Sabtu, 17 April 2010

Fungsi Order dan Indikator Teknikal

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
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)
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. 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)...
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
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 :
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 #2",16384,0,Green);
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
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)
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(){
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)
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
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)
{
Print("order #12470 open price is ", OrderOpenPrice());
Print("order #12470 close price is ", OrderClosePrice());
}
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
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...
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);
}
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...... )
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)
misalnya sesuai gambar diatas, rulenya kalau close candle sebelumnya diatas EMA 144, saya buka buy...
code:
//pertama musti siapin variabel
double ma1=0;
ma1=iMA(Symbol(),0,144,0,MODE_EMA,PRICE_CLOSE,1);
if (iClose(Symbol(),0,1)>ma1)
{
//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
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;
//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);

//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);

//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......
}
kurang canggih.... mau dikasih filter RSI buat detek overbought (supaya lebih klop)...
code:
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);

//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);

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

if ( ma10_2 > ma20_2 && ma10_1 < ma20_1 && rsi1 > 70 )
{
//open sell......
}
gampang kan
untuk indikator-indikator lain seperti macd, par-sar, sto, envelope, dll bisa dibaca sendiri di referencenya....
bahasan selanjutnya adalah membuat EA sederhana yang komplit (bisa dicompile & bisa jalan) (tapi ga tau profitable atau ga...)


Tidak ada komentar:

Posting Komentar