Bagian ini membahas beberapa fungsi yang penting, yang dipakai dalam hampir
setiap EA. Sebetulnya fungsi pada MQL 4 itu banyak sekali, tapi mari kita
membahas 2 fungsi dasar dulu saja, yaitu fungsi order dan fungsi analisa
teknikal.
1. Fungsi Order
Fungsi ini pasti ada di semua EA. Gunanya adalah untuk buka, tutup, atau
ubah posisi (sebetulnya fungsinya banyak sih)…
lebih lengkapnya ada di help nya MQL4, di bagian “Trading Functions”
disini kita bahas beberapa aja (sisanya bisa dibaca sendiri), kan yang penting ngerti gimana cara baca & pakainya
disini kita bahas beberapa aja (sisanya bisa dibaca sendiri), kan yang penting ngerti gimana cara baca & pakainya
OrderSend() : untuk membuka order
code:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
contoh, untuk buka buy 1 lot, tanpa tp dan sl :
code:
OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,”My order #1″,1,0,Green);
symbol itu diisi Symbol() jika mau yang diorderkan sama dengan chart dimana
EA jalan.. kalau misalnya mau order pair tertentu, ya tulis aja “GBPUSD” atau
“EURUSD” misalnya…
cmd itu ada 6 : OP_BUY, OP_SELL, OP_SELLSTOP, OP_SELLLIMIT, OP_BUYLIMIT, OP_BUYSTOP
volume itu jumlah lotnya price, kalau buy, pastikan pricenya Ask, kalau sell, pricenya Bid.
cmd itu ada 6 : OP_BUY, OP_SELL, OP_SELLSTOP, OP_SELLLIMIT, OP_BUYLIMIT, OP_BUYSTOP
volume itu jumlah lotnya price, kalau buy, pastikan pricenya Ask, kalau sell, pricenya Bid.
Kalau ga ntar error. slippage itu isi aja 0-5 pip, biar tidak kena requote.
Tapi tergantung strateginya juga, kalau TP cuman 3 pip ya otomatis slippagenya
jangan besar-besar…
stoploss = harga stoploss (bukan pips SL)…
stoploss = harga stoploss (bukan pips SL)…
takeprofit = harga takeprofitnya
comment = terserah mau diisi apa….. cuman keterangan aja untuk user
magic = magic ini magicnumber, gunanya untuk mengidentifikasi posisi.
Misalnya saja, EA hanya di program untuk memanage order dengan magic number
tertentu, maka EA tersebut ga akan modify/close order manual u (karena order
manual tidak ada magic number)
expiration = khusus untuk pending order
expiration = khusus untuk pending order
color = warna tanda di chartnya
fungsi OrderSend() ini akan mengembalikan nilai -1 kalau ordernya gagal,
kalau ordernya berhasil, maka akan mengembalikan nomor ordernya
untuk mengetahui gagal ordernya karena apa, bisa pake fungsi getLastError()
contohnya begini :
contohnya begini :
code:
int ticket;
if(iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,”My order
{
ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,”My order
#2″,16384,0,Green);
if(ticket<0)
{
Print(“OrderSend failed with error #”,GetLastError());
if(ticket<0)
{
Print(“OrderSend failed with error #”,GetLastError());
return(0);
}
}
nomor kode error nya bisa diliat di help nya, di MQL4 Reference -> Standard constants -> Error codes
}
}
nomor kode error nya bisa diliat di help nya, di MQL4 Reference -> Standard constants -> Error codes
nah, setelah order dibuka, order juga bisa di modify (diubah SL/TP nya)
dengan fungsi OrderModify()
code:
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
code:
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, color arrow_color=CLR_NONE)
OrderModify() ini akan bernilai true jika modifikasinya berhasil, dan false
jika modifikasinya gagal…
code:
if(TrailingStop>0)
{
OrderSelect(12345,SELECT_BY_TICKET);
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
return(0);
}
}
}
oya, ada 1 function lagi yang penting, yaitu OrderSelect()
if(TrailingStop>0)
{
OrderSelect(12345,SELECT_BY_TICKET);
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue);
return(0);
}
}
}
oya, ada 1 function lagi yang penting, yaitu OrderSelect()
OrderSelect() ini gunanya untuk memilih order yang akan
dimodifikasi/diclose
code:
bool OrderSelect( int index, int select, int pool=MODE_TRADES)
code:
bool OrderSelect( int index, int select, int pool=MODE_TRADES)
OrderSelect() ini bisa digunakan untuk memilih (men-select – bahasa indo
yang tepat apa ya? ) order baik yang sudah tertutup, lagi terbuka, atau masih
pending (limit/stop order)..
index = adalah index order (0,1,2,3,dst) pada mode SELECT_BY_POS ; atau nomor ticket pada mode SELECT_BY_TICKET
index = adalah index order (0,1,2,3,dst) pada mode SELECT_BY_POS ; atau nomor ticket pada mode SELECT_BY_TICKET
select = ya itu tipe select nya, bisa SELECT_BY_POS (memilih berdasarkan
posisi, kalau ga tau nomor ticketnya, pakai yang ini), atau SELECT_BY_TICKET
(kalau sudah tahu nomor ticketnya pakai yang ini)…
pool = MODE_TRADES itu untuk milih order yang aktif (limit/stop order/order
yang masih kebuka), MODE_HISTORY untuk memilih order yang udah ditutup/dihapus.
contoh :
code:
if(OrderSelect(12470, SELECT_BY_TICKET)==true)
code:
if(OrderSelect(12470, SELECT_BY_TICKET)==true)
{
Print(“order #12470 open price is “, OrderOpenPrice());
Print(“order #12470 open price is “, OrderOpenPrice());
Print(“order #12470 close price is “, OrderClosePrice());
}
else
Print(“OrderSelect returned the error of “,GetLastError());
else
Print(“OrderSelect returned the error of “,GetLastError());
oya, setelah di-select, kita bisa pakai fungsi-fungsi untuk mengetahui
informasi mengenai order tersebut, seperti jumlah lot, SL, TP, Symbol, dll
fungsi-fungsi antara lain :
OrderLots() = mengetahui jumlah lot
OrderTakeProfit() = mengetahui TP
OrderStopLoss() = mengetahui SL
OrderSymbol() = mengetahui pair nya
…lengkapnya langsung saja cek di MQL4 Reference -> Trading functions ;
kalau kurang jelas tentang cara pakainya, bisa di post di topic ini…
ok, order udah bisa di modify, bisa di select, sekarang saatnya untuk
menutup order atau menghapus pending order yang tidak jadi untuk menutup posisi
yang kebuka, pakai OrderClose() (atau OrderCloseBy() kalau hedging) untuk
menghapus pending order, pakai OrderDelete()
code:
bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
ticket = nomor ticket
bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE)
ticket = nomor ticket
lots = jumlah lot yang ditutup.. kalau misalnya mau ditutup semua ya isi
aja OrderLots()
price = kalau mau nutup sell, pakai harga Ask, kalau mau nutup buy, ketik Bid
slippage = isi 0-5 sesuai keinginan…
price = kalau mau nutup sell, pakai harga Ask, kalau mau nutup buy, ketik Bid
slippage = isi 0-5 sesuai keinginan…
color = warna tanda di chartnya..
sama seperti OrderModify(), OrderClose() ini akan bernilai True kalau
berhasil menutup, dan bernilai false kalau gagal menutup posisi untuk
OrderDelete(), jauh lebih simple dari OrderClose()
code:
bool OrderDelete( int ticket, color Color=CLR_NONE)
contoh :
code:
if(Ask>var1)
{
OrderDelete(order_ticket);
return(0);
}
code:
if(Ask>var1)
{
OrderDelete(order_ticket);
return(0);
}
4 fungsi tadi adalah fungsi-fungsi dasar untuk trade…. nah selanjutnya,
kita akan bahas fungsi-fungsi untuk membaca nilai dari indikator teknikal
seperti Moving Average, MACD, dll
setelah pembahasan fungsi indikator teknikal ini, harusnya sudah bisa bikin EA yang sederhana (untuk latihan…… )
setelah pembahasan fungsi indikator teknikal ini, harusnya sudah bisa bikin EA yang sederhana (untuk latihan…… )
2. Fungsi Indikator Teknikal
Di help mql4, bisa di cek di MQL4 Reference – Technical indicators
saya kasih contoh moving average aja…
functionnya iMA()
code:
double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
double iMA( string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
misalnya sesuai gambar diatas, rulenya kalau close candle sebelumnya diatas
EMA 144, saya buka buy…
code:
//pertama musti siapin variabel
//pertama musti siapin variabel
double ma1=0;
ma1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
if (iClose(Symbol(),0,1)>ma1)
if (iClose(Symbol(),0,1)>ma1)
{
//open buy……
//open buy……
}
untuk ma_method, itu ada 4 (bisa di klik sih di help nya), ada MODE_SMA,
MODE_EMA, MODE_SMMA, MODE_LWMA
untuk applied_price, itu ada 7, klik aja di link helpnya untuk detailnya
(daripada gw tulis lagi…)
contoh lain, strategi paling populer sepanjang masa, MA cross kalau EMA 10
motong EMA 20 dari atas, open sell kalau diterjemahin ke perintah-perintah
komputer, kira-kira kayak begini
1) cek EMA 10 dan 20 pada candle 2 sebelum sekarang
1) cek EMA 10 dan 20 pada candle 2 sebelum sekarang
2) cek EMA 10 dan 20 pada candle 1 sebelum sekarang
3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih
rendah dari EMA 20 pada candle 1, berarti terjadi cross
ya tinggal di coding aje….
code:
double ma10_1, ma20_1, ma10_2, ma20_2=0;
double ma10_1, ma20_1, ma10_2, ma20_2=0;
//1) cek EMA 10 dan 20 pada candle 2 sebelom sekarang
ma10_2=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,2);
ma20_2=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,2);
ma20_2=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,2);
//2) cek EMA 10 dan 20 pada candle 1 sebelom sekarang’
ma10_1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
ma20_1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
ma20_1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih
rendah dari EMA 20 pada candle 1, berarti terjadi cross
if ( ma10_2 > ma20_2 && ma10_1 < ma20_1 )
{
//open sell……
//open sell……
}
kurang canggih…. mau dikasih filter RSI buat detek overbought (supaya lebih klop)…
kurang canggih…. mau dikasih filter RSI buat detek overbought (supaya lebih klop)…
code:
double ma10_1, ma20_1, ma10_2, ma20_2=0;
double ma10_1, ma20_1, ma10_2, ma20_2=0;
double rsi1=0; ‘
//1) cek EMA 10 dan 20 pada candle 2 sebelom sekarang
ma10_2=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,2);
ma20_2=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,2);
ma20_2=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,2);
//2) cek EMA 10 dan 20 pada candle 1 sebelom sekarang
ma10_1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
ma20_1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
ma20_1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
rsi1=iRSI(Symbol(),0,14,PRICE_CLOSE,1);
//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih rendah dari EMA 20 pada candle 1, berarti terjadi cross
//3) klo EMA 10 lebih tinggi dari EMA 20 pada candle 2, dan EMA 10 lebih rendah dari EMA 20 pada candle 1, berarti terjadi cross
if ( ma10_2 > ma20_2 && ma10_1 70 )
{
//open sell……
//open sell……
}
gampang kan
Info yang sangat bagus. kunjungi juga website kami di www.belajarforexgratis.net
BalasHapus