Sabtu, 17 April 2010

Menyusun EA

ok, pada dasarnya, sebuah EA yang sederhana/standard (bukan EA yang kompleks seperti neural network, atau yang misalnya terdiri dari beberapa modul yang mengontrol trade sendiri-sendiri)... terdiri atas beberapa bagian/struktur.. bagian ini biasanya dibikinkan fungsi tersendiri, agar coding terlihat rapi, sekaligus mempermudah debugging
bagiannya :
1. BuySignal : pada kondisi apa EA buka buy
2. SellSignal : pada kondisi apa EA buka sel
3. CloseBuySignal : pada kondisi apa EA nutup posisi buy (yang ini tidak harus ada, karena dapat menggunakan TP/SL sebagai closingnya)
4. CloseSellSignal : sama seperti CloseBuySignal
5. MoneyManagement : buat itung lotsize secara otomatis
6. Trail : buat trailling posisi, klo misalnya diperlukan
7. Confirmator : kalau misalnya EA cuman trade hari senin-kamis, maka biasanya ditaruh di bagian ini..
Kalau 7 bagian itu sudah ketemu, bikin EA nya jadi lebih gampang
misalnya begini, gw mau bikin EA yang kayak di Bagian 2 - Contoh EA
Logika EA ini, kira2 (misal EA ini diletakkan di chart GBPUSD 1 Hour), Jika tidak ada posisi, jika candle jam lalu closenya diatas EMA 10, maka buy, kalau candle jam lalu closenya dibawah EMA 10, maka sell. TP nya 150 dan SL nya 100 pips
kalau di breakdown jadi 7 bagian tadi :
1) BuySignal : kalau harga close candle sebelumnya lebih besar/diatas EMA 10 pada candle sebelumnya
2) SellSignal : kalau harga close candle sebelumnya lebih kecil/dibawah EMA 10 pada candle sebelumnya
3) Tidak ada
4) Tidak ada
5) Lotnya otomatis diitung berdasarkan SL dan persen risiko.
6) Tidak pakai trail, jadi tidak ada
7) Posis baru dibuka kalau sedang tidak ada posisi, dan juga tidak trade di hari Jumat (gw tambahi rulenya)
kira-kira source code nya jadi begini
code:
extern double RiskPercent=5;
extern int StopLoss=100;
extern int TakeProfit=150;
extern string txComment="Order EA1";
extern int MagicNumber=12345;
extern int Slippage=5;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

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

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (bolehTrade()) //kalau boleh trade
{
if (BuySignal() ) //kalau ada signal buy
{
OrderSend(Symbol(),OP_BUY,itungLot(),Ask,Slippage,Ask-StopLoss*Point,Ask+TakeProfit*Point,txComment,MagicNumber);
}
else if (SellSignal() ) //kalau ada signal sell
{
OrderSend(Symbol(),OP_SELL,itungLot(),Bid,Slippage,Bid+StopLoss*Point,Bid-TakeProfit*Point,txComment,MagicNumber);
}

}
//----
return(0);
}
//+------------------------------------------------------------------+
bool BuySignal()
{
//kalau harga close candle sebelumnya lebih besar/diatas EMA 10 pada candle sebelumnya
if (iClose(Symbol(),0,1) > iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
return(true);
}
else
{
return(false);
}
}
bool SellSignal()
{
//kalau harga close candle sebelumnya lebih kecil/dibawah EMA 10 pada candle sebelumnya
if (iClose(Symbol(),0,1) < iMA(Symbol(),0,10,0,MODE_EMA,PRICE_CLOSE,1) )
{
return(true);
}
else
{
return(false);
}
}
bool bolehTrade()
{
//kalau jumat, EA ga trade ; atau kalau ada order terbuka, EA juga ga trade
if (DayOfWeek()==5 || OrdersTotal()>0) { return (false); } else { return(true); }
}
double itungLot()
{
//ini untuk itung lot secara otomatis berdasarkan SL dan persen risk
double xLots=0;
xLots=NormalizeDouble(AccountBalance()*RiskPercent/100 /StopLoss / 10,1);
return (xLots);
}
logikanya jadi rapi dan jelas...
oya, sekilas mengenai operator
|| berarti atau & berarti dan (nanti akan dijelaskan di bagian tentang operator)
EA ini kelihatannya simple sekali codingnya paling butuh 5-10 menit doank.... tapi kalau di backtest, profitable lho (terlepas dari dradownnya yang gede)...


Tidak ada komentar:

Posting Komentar