http://jumforex.blogspot.com/2012/09/belajar-membuat-ea-sederhana-12.html
Kali ini kita akan coba melanjutkan tentang membuat EA sederhana yang sebelumnya sudah banyak saya bahas di post sebelumnya.
EA yang dibikin di posting ini telah saya becktest ternyata hasilnya termasuk lumayan untuk sebuah EA sederhana, ini imagenya:
Haaaaaa menarik kan!
Langsung saja kita EA tersebut rulenya sbb
Untuk buy
- Open candel 2 dibawah MA 2 dan close candel 2 diatas MA 2
- Open candel 1 diatas MA 1 dan close candel diatas MA 1
- Harga masih di atas MA1
Hal yang lain perlu ditambahkan adalah
- Jam trading
- SL dan TP bisa di atur 0
- Trailing yang bisa di atur
- TF suka2 ditadak ditentukan
1. TP dan SL supaya bisa di isi dengan 0
Pada EA sebelumnya bila TP dan SL diisi dengan 0 , maka akan error hal ini karena belum ada digunakan fasilitas untuk itu. Nah dalam supaya TP dan SL bisa diisi dengan 0 maka harus di buat variabel untuk mewakili pada harga TP maupun SL.
Untuk mudahnya harga pada Takeprofit buy saya buat ==> double tpb, untuk takeprofit sell==>double tps , harga pada stoploss buy==> double slb dan stoploss sell==> double sls.
terlebih dahulu dibuat deklarasi
double slb,tpb,sls,tps,pt;
dan membuat logikanya
if(SL==0)slb=0;else slb=Ask-SL*pt;
if(SL==0)sls=0;else sls=Bid+SL*pt;
if(TP==0)tpb=0;else tpb=Ask-SL*pt;
if(TP==0)tps=0;else tps=Bid+SL*pt;
OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue);
OrderSend(Symbol(),OP_SELL,NR(Lots),Bid,3,sls, tps,Nama_EA,Magic,0,Red);
2. Trailing
Untuk membuat script trailing ada banyak cara , tapi pada trailing yang akan kita buat ini saya buat dengan fungsi untuk perintah dengan mnggunakan void
perhatikan
{
for(int i=0; i<OrdersTotal(); i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic ) continue;
if(OrderType()==OP_BUY) {
if(Bid-OrderOpenPrice()>pt*TrailingStop) {
if((OrderStopLoss()<Bid-pt*TrailingStop) || (OrderStopLoss()==0)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pt*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
if(OrderType()==OP_SELL) {
if((OrderOpenPrice()-Ask)>(pt*TrailingStop)){
if(OrderStopLoss()>(Ask+pt*TrailingStop) || (OrderStopLoss()==0)){
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+pt*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
void digunakan sebagai fungsi trailing , sehingga dtrailing() harus dibuat di bawah int star()
3. Logika buy dan sell
sesuai rule diatas maka dibuat logika sbb:
double MA1 =iMA(Symbol(),0,Pereode,0,MODE_SMA,PRICE_CLOSE ,1);
int signal;
if(Open[2]<MA2 && Close[2]>MA2 && Open[1]>MA1 && Close[1]>MA1 && Ask>MA1) signal=1;// aturan buy
if(Open[2]>MA2 && Close[2]<MA2 && Open[1]<MA1 && Close[1]<MA1 && Bid<MA1) signal=2;//aturan sell
Nah logika diatas dibuat signal =1 berarti order buy dan bila signal=2 berarti order sell
Nah siahkan dilihat hasilnya dan menambah wawasan dari EA rule diatas
//+------------------------------------------------------------------+
//| EA MA AntiQ+ |
//| gifaesa@yahoo.com |
//| http://JumForex.blogspot.com |
//+------------------------------------------------------------------+
#property copyright "JumForex.blogspot.com"
#property link "Gifaesa@yahoo.com"
extern string Nama_EA = "MA AntiQ";
extern bool Trade_buy = true;
extern bool Trade_sell = true;
extern int Mulai_Jam = 6;
extern int Akhir_Jam = 20;
extern int TP = 100;
extern int SL = 100;
extern double Lots = 0.1;
extern int TrailingStop = 20;
extern int Magic = 69;
extern string Seting_MA = "Sesuka Hati";
extern int Pereode = 33;
double slb,tpb,sls,tps,pt;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
if(Digits==3 || Digits==5) pt=10*Point; else pt=Point;
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
dtrailing();
//----
double MA2 =iMA(Symbol(),0,Pereode,0,MODE_SMA,PRICE_CLOSE ,2);
double MA1 =iMA(Symbol(),0,Pereode,0,MODE_SMA,PRICE_CLOSE ,1);
int signal;
if(Open[2]<MA2 && Close[2]>MA2 && Open[1]>MA1 && Close[1]>MA1 && Ask>MA1) signal=1;// aturan buy
if(Open[2]>MA2 && Close[2]<MA2 && Open[1]<MA1 && Close[1]<MA1 && Bid<MA1) signal=2;//aturan sell
if(Jam_trade()==1){
if(SL==0)slb=0;else slb=Ask-SL*pt;
if(SL==0)sls=0;else sls=Bid+SL*pt;
if(TP==0)tpb=0;else tpb=Ask+TP*pt;
if(TP==0)tps=0;else tps=Bid-TP*pt;
if(jumlahorder(0)==0 && Trade_buy && signal==1) {OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue);}
if(jumlahorder(1)==0 && Trade_sell && signal==2) {OrderSend(Symbol(),OP_SELL,NR(Lots),Bid,3,sls, tps,Nama_EA,Magic,0,Red);}
}
//----
return(0);
}
//+------------------------------------------------------------------+
int Jam_trade()
{
bool trade = false;
if(Mulai_Jam > Akhir_Jam){
if (Hour() >= Mulai_Jam || Hour() < Akhir_Jam) trade = true;
} else
if (Hour() >= Mulai_Jam && Hour() < Akhir_Jam) trade = true;
return (trade);
}
int jumlahorder( int tipe)
{
int total=0;
for(int i=0; i<OrdersTotal(); i++)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic || OrderType()!=tipe) continue;
total++;
}
return(total);
}
double NR(double thelot)
{
double maxlots = MarketInfo(Symbol(), MODE_MAXLOT),
minilot = MarketInfo(Symbol(), MODE_MINLOT),
lstep = MarketInfo(Symbol(), MODE_LOTSTEP);
double lots = lstep * NormalizeDouble(thelot / lstep, 0);
lots = MathMax(MathMin(maxlots, lots), minilot);
return (lots);
}
void dtrailing()
{
for(int i=0; i<OrdersTotal(); i++){
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=Magic ) continue;
if(OrderType()==OP_BUY) {
if(Bid-OrderOpenPrice()>pt*TrailingStop) {
if((OrderStopLoss()<Bid-pt*TrailingStop) || (OrderStopLoss()==0)) {
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-pt*TrailingStop,OrderTakeProfit(),0,Green);
return(0);
}
}
}
if(OrderType()==OP_SELL) {
if((OrderOpenPrice()-Ask)>(pt*TrailingStop)){
if(OrderStopLoss()>(Ask+pt*TrailingStop) || (OrderStopLoss()==0)){
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+pt*TrailingStop,OrderTakeProfit(),0,Red);
return(0);
}
}
}
}
}
EA ini sebenarnya sudah termasuk bagus bisa digunakan sebagai bahan pembelajaran
Silahkan di coba di becktes hasilnya cukup bagus untuk sebuah EA sederhana dan mungkin bisa di coba untuk di Fowardtes
dan bila ada yang belum jelas silahkan kasih komen!
//sudah dikoreksi ada sedikit kesalahan paste //
Semoga bermanfaat
pada codebased pelajaran 11 kemarin sudah saya utak atik dengan menambahi logic buy & sell menggunakan indi fractal, he.. he...
Kalau bisa pelajarannya nanti diteruskan sampai kepada strategi tradingnya, seperti martingale, hedging dsb. dalam bentuk void, jadi tinggal manggil. Oke thank sudah berbagi.!!
banyak perubahan,, jadi bingung..
1. triger buy /sell dengan menambahkan indikator MA dan candel
2. suport tp dan sl supaya bisa di isi dengan nol
3. suport 5 digit (ini juga sudah dibahas)
4. penambabahan trailing
dipelajari santai aja , pelan2
Ym boleh saja : gifaesa