Fungsi Order dan Analisa 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 ga kena requote. Tapi tergantung strateginya juga, kalau TP cuman 3 pip ya otomatis slippagenya jangan besar2...

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, klo 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...

contoh :

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()
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 uda tau nomor ticketnya pake 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 fungsi2 untuk mengetahui informasi mengenai order tersebut, seperti jumlah lot, SL, TP, Symbol, dll

fungsi2nya antara laen :

OrderLots() = mengetahui jumlah lot
OrderTakeProfit() = mengetahui TP
OrderStopLoss() = mengetahui SL
OrderSymbol() = mengetahui pair nya

...lengkapnya langsung aje 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 nutup, dan bernilai false kalau gagal nutup 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 fungsi2 dasar untuk trade.... nah selanjutnya, kita akan bahas fungsi2 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......  )