• Welcome back! Thank you for being a part of this Traders Community. Let's discuss and share :)
    Selamat datang kembali! Trimakasih telah menjadi bagian dari Komunitas Trader ini. Mari berdiskusi dan berbagi :)

Tanya Jawab MQL

Untuk bertanya tidak perlu minta maaf, karena agan tidak bersalah kepada saya :)
fungsi ini bertujuan untuk mencari CANDLE KE BERAPA PALING TINGGI DARI 10 CANDEL , jika Candel target di isi 10.
iHighest (PAIR yang akan digunakan, Time Frame berapa, MODE yang akan dipakai, Cendle Target akir, Cendel Start Memulai )
CONTOH.
Code:
int fHigh = iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,10,1);
  double fHigest=iHigh(Symbol(), PERIOD_CURRENT,fHigh);
   // Untuk melihat hasilnya, gunakan Alert saja
   Alert (fHigest);

Terima kasih masta HendroFX , atas fast reply nya ...
dan code nya berfungsi .....
kalau tidak keberatan masta, tolong jelaskan kesalahan code yang saya tanyakan masta... kenapa codenya tidak berfungsi ...:)
 
Master HendroFX , saya coba buat ea sederhana tapi gak mau OP,,,
Mohon di koreksi master, dimana salahnya ...

--------------

[HASHTAG]#property[/HASHTAG] copyright "Copyright © 2007, MetaQuotes Software Corp."
[HASHTAG]#property[/HASHTAG] link "http://www.metaquotes.net"
double mypoint = MarketInfo(Symbol(),MODE_POINT);
extern double TakeProfit=50;
extern double MaxLots=7;
extern double pips=7;
double mybid = MarketInfo(Symbol(),MODE_BID);
double myask = MarketInfo(Symbol(),MODE_ASK);
double mylot = MarketInfo(Symbol(),MODE_LOTSIZE);
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//-----------
double total,fLowest,fHigest;
double sl;
double MA90=iMA(Symbol(),0,90,0,MODE_SMA,PRICE_CLOSE,0);
double harga = iClose(Symbol(),0,1);
double cenaoppos=OrderOpenPrice();

total=OrdersTotal();
if(MA90<harga) // Jika harga diatas ma90;
{
fLowest=iLowest(Symbol(),PERIOD_CURRENT,MODE_LOW,72,1);
double fLowes=iLow(Symbol(), PERIOD_CURRENT,fLowest);
sl=(OrderOpenPrice()-fLowest)/mypoint;
OrderSend(Symbol(),OP_BUY,mylot,myask,3,sl,TakeProfit,NULL,0,0,Green);
Alert(sl);
}

if(MA90>harga)
{
fHigest= iHighest(Symbol(),PERIOD_CURRENT,MODE_HIGH,72,1);
double fHiges=iHigh(Symbol(), PERIOD_CURRENT,fHigest);
sl= (fHigest-OrderOpenPrice())/mypoint;
OrderSend(Symbol(),OP_SELL,mylot,myask,3,sl,mybid-TakeProfit*Point,0,Red);

}

return(0);
//----------------------------------
 
Saran saya, buat fungsi order dulu, dengan menjalankan OrderSend, tanpa menggunakan signal, hal ini bertujuan untuk mengetahui sudah berjalan apa belum fungsi tersebut.
 
Saran saya, buat fungsi order dulu, dengan menjalankan OrderSend, tanpa menggunakan signal, hal ini bertujuan untuk mengetahui sudah berjalan apa belum fungsi tersebut.
Setelah signal di hilangkan satu per satu dan hanya menggunakan fungsi order ternyata bisa OP, master .....
Jadi harus perbaiki signal nya ya ,,,,,
 
Master HendroFX , Mohon bantuannya lagi ....:)

int start()
//-----------
{
double total;
double MA96=iMA(Symbol(),0,96,0,MODE_SMA,PRICE_CLOSE,0);
double harga = iClose(Symbol(),0,1);

total=OrdersTotal();
if(harga<MA96)
{
OrderSend(Symbol(),OP_SELL,Lots,mybid,3,slsell,tpsell,NULL,0,0,Green);
}

if(harga>MA96)
{
OrderSend(Symbol(),OP_BUY,Lots,myask,3,slbuy,tpbuy,NULL,0,0,Green);
}
//----------------------------------
return(0);
}

Dengan script kaya diatas, kenapa OP nya bisa banyak banget ya .... sampai 41 op ....
Bagaimana biar op nya satu satu ajah master ?
 
Baca threadMarks, pertanyaan sudah pernah di jawab
Penempatan Fungsinya tidak di Init(), tetapi di OnTick(), dengan catatan buat fungsi pengitung Order
Jadi logikanya adalah, JIKA Jumlah ORDER BUY=0, maka OP_BUY, begitu juga dengan SELL, coba buat dulu nanti kita bantu koreksi :)

Yang ini ya .... kurang paham tadinya..... :rofl:
Ok dech, nunggu selanjutnya ....
 
Buatlah dulu fungsi penghitung order, misalnya saya berikan contoh menghitung order buy dengan operator for
Code:
int HdBuy()
{int OB=0;
for(int i=OrdersTotal()-1; i>=0; i--)
         {
            if( !OrderSelect(i,SELECT_BY_POS,MODE_TRADES)continue;
           if(OrderType()!=OP_BUY) continue;
           if(OrderType()==OP_BUY) OB++;
         }
return(OB); 
}
Dengan fungsi diatas maka kita akan mengetahui jumlah order buy ada berapa, sehingga logikanya jika total order buy kurang dari atau sama dengan NOL, maka Jalankan Perintah Order Buy,
Dengan demikian Order buy tidak akan banyak / hanya satu saja.
 
if(OrderOpenPrice()<1)
{
// sinyal OP sell
if(harga<MA96)
{
if(harga<cross)
{
if(c2>c1)
{
OrderSend(Symbol(),OP_SELL,Lots,mybid,3,slsell,tpsell,"Faza",0,0,Blue);
}
}
}



// sinyal OP buy
if(harga>MA96)
{
if(harga>cross1)
{
if(c2<c1)
{
OrderSend(Symbol(),OP_BUY,Lots,myask,3,slbuy,tpbuy,"Faza",0,0,Green);
}
}
}
}

//----------------------------------
return(0);
//
}

Master HendroFX , mau tanya lagi master, kenapa dengan script diatas EA nya cuma OP buy, gak bisa OP sell?
Mohon bimbingannya master ...
 
if(OrderOpenPrice()<1)
{
// sinyal OP sell
if(harga<MA96)
{
if(harga<cross)
{
if(c2>c1)
{
OrderSend(Symbol(),OP_SELL,Lots,mybid,3,slsell,tpsell,"Faza",0,0,Blue);
}
}
}



// sinyal OP buy
if(harga>MA96)
{
if(harga>cross1)
{
if(c2<c1)
{
OrderSend(Symbol(),OP_BUY,Lots,myask,3,slbuy,tpbuy,"Faza",0,0,Green);
}
}
}
}

//----------------------------------
return(0);
//
}

Master HendroFX , mau tanya lagi master, kenapa dengan script diatas EA nya cuma OP buy, gak bisa OP sell?
Mohon bimbingannya master ...
Saya tidak bisa membaca secara keseluruhan dari koding di atas, jika hanya OP buy yang jalan artinya Signal Buy saja yang memenuhi syarat Op, sedangkan Op Sell Tidak, atau coding dalam signal OP Sell salah yang mengakibatkan tidak terpenuhinya syarat untuk Op Sell. jadi periksa kembali
 
tanya dong, gmna script untuk membaca alert dari indikator ato ea menjadi op. sy coba sperti ini gk bsa
if(alert(BUY)) Ordersend(......
 
tanya dong, gmna script untuk membaca alert dari indikator ato ea menjadi op. sy coba sperti ini gk bsa
if(alert(BUY)) Ordersend(......
Bila alert berasal dalam coding indikator ditambahkan perintah open order jelas tidak bisa jalan, perintah order send bisa bekerja apalila diletakkan dalam coding EA, dan bukan indikator. untuk itu buatlah costum Indikator untuk mendapatkan signal Buy atau Sell
 
gmana buat push notifikasi(alert di mt4 android)? kalo alert di mt4 pc tinggal kasih Alert.......... misal if(1+1) Alert..............
 
Halo Teman teman Trader, dan semua orang yang ingin belajar membuat Coding, tentunya bagi meraka yang tertarik dengan MQL, yaitu bahasa pemrograman untuk Metatrader, saya memberikan ruang bagi mereka yang sedang belajar MQL namun mengalami kesulitan dalam menulis Coding, Thread ini dibuat untuk saling bertanya dan memberikan Jawaban mengenai kesulitan kesulitan / Error coding. Semoga threat ini bermanfaat :):ok:
Silahkan kita saling diskusi dan memberikan pencerahan.......:clap:

Untuk memudahkan membaca isi diskusi Threat ini, silahkan buka THREADMARK yang saya buat
Om momod mau tanya dong...
Saya buat ea yg menyimpan history trading ke folder lain selain folder terminal kok g bisa ya...?
Kodingnya gini om
Int handle=FileOpen("c:\desktop"+"history.csv",FILE_CSV|FILE_WRITE,",");
Apa ada yg salah...?
 
Menulis file hitory dalam folder file dalam MT4, dengan format seperti ini
Code:
uint FileWrite(
intfile_handle, // File handle
... // List of recorded parameters
   );

CONTOH Aplikasi dalam penulisan codingnya :)
Code:
#propertycopyright"Copyright 2014, MetaQuotes Software Corp."
#propertylink"https://www.mql5.com"
#propertyversion"1.00"
#propertystrict
//--- show the window of input parameters when launching the script
#propertyscript_show_inputs
//--- parameters for receiving data from the terminal
inputstring InpSymbolName="EURUSD"; // Сurrency pair
inputENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1; // Time frame
inputint InpFastEMAPeriod=12; // Fast EMA period
inputint InpSlowEMAPeriod=26; // Slow EMA period
inputint InpSignalPeriod=9; // Difference averaging period
inputENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Price type
//--- parameters for writing data to file
inputstring InpFileName="MACD.csv"; // File name
inputstring InpDirectoryName="Data"; // Folder name
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
voidOnStart()
{
bool sign_buff[]; // signal array (true - buy, false - sell)
datetime time_buff[]; // array of signals' appear time
int sign_size=0; // signal array size
double macd_buff[]; // array of indicator values
datetime date_buff[]; // array of indicator dates
int macd_size=0; // size of indicator arrays
//--- set indexing as time series
ArraySetAsSeries(sign_buff,true);
ArraySetAsSeries(time_buff,true);
ArraySetAsSeries(macd_buff,true);
ArraySetAsSeries(date_buff,true);
//--- reset last error code
ResetLastError();
//--- copying the time from last 1000 bars
int copied=CopyTime(NULL,0,0,1000,date_buff);
if(copied<=0)
{
PrintFormat("Failed to copy time values. Error code = %d",GetLastError());
return;
}
//--- prepare macd_buff array
ArrayResize(macd_buff,copied);
//--- copy the values of main line of the iMACD indicator
for(int i=0;i<copied;i++)
{
macd_buff[i]=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice,MODE_MAIN,i);
}
//--- get size
macd_size=ArraySize(macd_buff);
//--- analyze the data and save the indicator signals to the arrays
ArrayResize(sign_buff,macd_size-1);
ArrayResize(time_buff,macd_size-1);
for(int i=1;i<macd_size;i++)
{
//--- buy signal
if(macd_buff[i-1]<0 && macd_buff[i]>=0)
{
sign_buff[sign_size]=true;
time_buff[sign_size]=date_buff[i];
sign_size++;
}
//--- sell signal
if(macd_buff[i-1]>0 && macd_buff[i]<=0)
{
sign_buff[sign_size]=false;
time_buff[sign_size]=date_buff[i];
sign_size++;
}
}
//--- open the file for writing the indicator values (if the file is absent, it will be created automatically)
ResetLastError();
int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
if(file_handle!=INVALID_HANDLE)
{
PrintFormat("%s file is available for writing",InpFileName);
PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
//--- first, write the number of signals
FileWrite(file_handle,sign_size);
//--- write the time and values of signals to the file
for(int i=0;i<sign_size;i++)
FileWrite(file_handle,time_buff[i],sign_buff[i]);
//--- close the file
FileClose(file_handle);
PrintFormat("Data is written, %s file is closed",InpFileName);
}
else
PrintFormat("Failed to open %s file, Error code = %d",InpFileName,GetLastError());
}
 
master2 di sini.. saya mau tanya masalah BB
Code:
double BBtop  = iBands(NULL,PERIOD_M15,20,2,0,PRICE_WEIGHTED,MODE_UPPER,1);
semisal code di atas
kemudia untuk fungsi agar EA mau OP adalah jika close candle diatas BB UPPER.
dengan Fungsu close
Code:
double close= iClose(NULL,PERIOD_M15,1);

nah saya penasaran ketika saya gunakan dua variable diatas ea saya BT dalam 1 tahun tidak ada OP
Code:
if(OrderCountBuy(OP_BUY) && close1>BBtop)
  {
   signal1=1;
  }
if(OrderCountSell(OP_SELL) && close1<BBlow)
  {
   signal2=1;
  }

ap yang salah ya
 
master2 di sini.. saya mau tanya masalah BB
Code:
double BBtop  = iBands(NULL,PERIOD_M15,20,2,0,PRICE_WEIGHTED,MODE_UPPER,1);
semisal code di atas
kemudia untuk fungsi agar EA mau OP adalah jika close candle diatas BB UPPER.
dengan Fungsu close
Code:
double close= iClose(NULL,PERIOD_M15,1);

nah saya penasaran ketika saya gunakan dua variable diatas ea saya BT dalam 1 tahun tidak ada OP
Code:
if(OrderCountBuy(OP_BUY) && close1>BBtop)
  {
   signal1=1;
  }
if(OrderCountSell(OP_SELL) && close1<BBlow)
  {
   signal2=1;
  }

ap yang salah ya
Logika OrderContBuy dan Sell harus diperiksa dulu.
yang kedua lihat apakah close1>BBtop sudah benar bernilai 1?? demikian juga dengan yang Low
 
Logika OrderContBuy dan Sell harus diperiksa dulu.
yang kedua lihat apakah close1>BBtop sudah benar bernilai 1?? demikian juga dengan yang Low
ordercountnya udah oke.. saya test OP dengan indi MA work.

cara memastikan value close1>BBtop = 1 gmn? pake alert? atau di print di comment

=======================================
arrrgh... ralaat..

itu harusnya ditulis OrderCountBuy==0
pantesan ga OP2
 
Master Hendro mohon bantuannya, saya coba membuat indikator versi mtf tetapi masih error. Berikut saya sertakan file mq4 nya. Terimakasih banyak atas bantuannya.
 

Attachments

Back
Top