Jumat, 07 Desember 2012

Studi Kasus: Koding Simple EA Martingale

http://indo.mt5.com/showthread.php?9497-%26%239668%3B%26%231769%3B%26%239679%3B%26%231757%3B%26%239679%3B%26%231769%3B%26%239658%3B-Studi-Kasus-Koding-Simple-EA-Martingale.



 Studi Kasus: Koding Simple EA Martingale.

 Salam profit untuk trader-trader yang baik hati di Forum MT5.

Dear moderator dan admin, mudah-mudahan tidak bosan dengan ulah si newbie nekat ini. Kali ini saya mohon ijinnya sekali lagi untuk membuka thread baru mengenai coding-codingan EA buat pemula. Mumpung lagi libur akhir tahun, ada sedikit waktu untuk bongkar pasang EA dan meramaikan forum. Mudah-mudahan thread ini bermanfaat untuk rekan-rekan.

Pertama kali saya mohon maaf kepada teman-teman yang sering mengirim email dan PM kepada saya. Terus terang email dari teman-teman banyak sekali. Ada yang bertanya soal coding indikator, coding EA, ada yang minta settingan, ada yang minta EA-nya dijebol proteksinya dan lain-lainlah. Karena saya masih kerja fulltime maka tidak semua email bisa direspons. Tapi jangan patah semangat ya, kalau saya sempat pasti akan dibalas. Doakan saya bisa trading fulltime, jadi kita bisa diskusi sambil ngopi bareng kapan aja.

Thread kali ini membahas pertanyaan teman-teman yang sering ditanyakan di email. Yaitu minta codingan Martingale jika misalnya OP-nya salah arah. "Gan, tulung donk. Tambahin codingan di EA ane, jadi kalo misalnya OP-nya salah maka akan dimartiyem". Email seperti ini bukan cuma sekali dua kali. Lama-lama jadi inget pepatahnya master Givonly untuk memberi kail dan bukan memberi ikan. Jadi mungkin sebaiknya kita buatkan saja thread simple untuk membahas codingan Martingale sederhana. Jadi kapan saja teman-teman memerlukan, tinggal copy coding ini ke EA-nya. Kutak-kutik sedikit, dan bisa langsung dijalankan.

Mohon jangan berharap terlalu banyak dari thread ini. Namanya juga thread simple. Jangan berharap hasilnya bisa dibandingkan dengan (misalnya) EA Sejuta Umat yang sudah tersohor di dunia persilatan Forex. Disini saya mencoba membuat coding yang sangat simple dan sederhana, hanya untuk proses belajar teman-teman yang sedang getol mengutak-utik coding EA. Harapannya hanya untuk memotivasi teman-teman yang siang-malam berjuang menekuni dunia programming EA. Biar tambah semangat. Semoga para programmer EA kita akan membawa nama harum bagi nusa dan bangsa di kancah internasional. Amin.

Untuk para master EA, mohon dukungannya agar thread ini rame. Terus terang saya memimpikan trader dan programmer EA Indonesia tidak kalah pamor sama bangsa sebelah. Mari kita bersatu hati saling mengisi satu sama lain. Kritikan dan saran saya nantikan untuk memperbaiki diri saya. Terima kasih.

*Pidato pak Lurah sudah selesai, yang mau nge-klik thanks di bawah ini tidak usah malu dan ragu-ragu*

--------------------------------------------------------------

Apa itu Martingale ?

Menurut Wikipedia, Martingale adalah strategi betting yang mulai populer di Perancis pada abad ke 18. Strateginya adalah bertaruh hanya pada satu sisi koin, dan jika kalah maka dia akan bertaruh pada sisi koin yang sama sambil melipatgandakan taruhannya. Demikian terus-menerus dia akan bertaruh pada satu sisi koin itu dengan melipatgandakan taruhannya. Harapannya adalah dengan sekali kemenangan dia akan merecover semua kerugian sebelumnya.

Dunia Forex mirip situasi betting Perancis ini. Sebab ada sisi koin "buy" dan sisi koin "sell". Para trader yang berpengalaman menggunakan martingale sangat yakin ketangguhan martingale ini. Kata mereka, "Apa yang naik, pasti akan turun. Dan apa yang turun, pasti akan naik". Jadi betting Martingale Perancis cocok diterapkan di dalam Forex. Saya sendiri masih jantungan dengan strategi martingale, dan sementara ini hanya senang membuatkan coding buat teman-teman saja.

Langsung saja kita masuk lebih dalam. Saya mendapat gambar dari thread yang pernah dibuat master Tenyom Goreng di forum ini sbb (mohon ijin ya master) :

riset martingale...bisakah sistem ini menjauh sejauh mungkin dari margin call
http://indo.mt5.com/showthread.php?779-riset-martingale


Dari gambar di atas, kita akan membuat coding sederhana EA Martingale. Dimana nanti strateginya adalah EA akan membuka lagi posisi OP yang salah (floating minus) yang jaraknya senilai PipStep. Sementara lot-nya akan digandakan 2 kali. Dan nilai semua TP akan digeser mengikuti nilai TP dari OP yang terakhir.

Jadi dari EA Simple Martingale ini kita akan menemukan fungsi-fungsi sebagai berikut :

1. Fungsi Pemicu sebagai trigger OP pertama :Ini terserah strategi teman-teman, hanya untuk OP pertama saja. Misalnya teman-teman memakai cross 2 buah MA untuk OP buy atau sell.

2. Fungsi GoMartingale : Fungsi ini memeriksa apakah ada OP yang salah ? Jika ya, maka akan dibuat OP baru searah dengan OP semula. Dengan lot yang digandakan.

3. Fungsi Modifikasi TP : Di dalam fungsi ini, semua OP martingale akan dimodifikasi TP-nya.

*Istirahat sebentar ya, nanti kita lanjutkan*

----------------------------------------------------------------
 Ini adalah contoh strategi gabungan MA dan Martingale. Kita lihat gambar di bawah.

Ada garis SMA 18 Close (warna merah) dan garis EMA200 Close (warna putih). Strateginya adalah :

- Kalau price berada di atas SMA18, dan SMA18 berada di atas EMA200, maka BUY dengan TP 10 pip.

- Kalau price berada di bawah SMA18, dan SMA18 berada di bawah EMA200, maka SELL dengan TP 10 pip.

- Jika order salah arah, lakukan martingale dengan PipStep 10 pip.



Sistem ini seperti diduga, akan berjalan terus-menerus. Bila satu OP sudah mengenai TP, maka dia akan OP lagi. Begitu seterusnya. Bila arahnya salah, OP-nya akan ditambah dengan OP Martingale.

EA ini akan berjalan dengan agresif, terus-menerus. Saat ini untuk studi, kita tidak membatasi dengan coding waktu. Biarkan EA berjalan 24 jam.

---------------------------------------------------------------

EA Martingale2MA

Kita akan mulai dengan coding variabel-nya, sbb

Code:
//+------------------------------------------------------------------+
//| EA DwiM Martingale2MA.mq4 |
//| @DwiMalistyo |
//| http://ea.dwim.web.id |
//+------------------------------------------------------------------+
#property copyright "@DwiMalistyo"
#property link "http://ea.dwim.web.id"

/*-- Parameter ini ditampilkan di EA dan bisa diubah --*/
extern int TakeProfit = 10; // Nilai TP setiap OP di EA Martingale ini
extern int PipStep = 10; // Jarak pip dimana akan buka OP baru
extern int Slippage = 3; // Apa itu slippage ? Googling sendiri ya..
extern double Lots = 0.1; // Nilai lots awal, nantinya akan digandakan setiap step
extern double Multiply = 2.0; // Nilai pengali setiap step OP baru
extern int MaxTrade = 11; // Banyak OP maksimal yang boleh dijalankan
extern bool UseTime = TRUE; // Pilihan apakah memakai waktu bekerjanya EA ?
extern int HourStart = 18; // Waktu mulai EA bekerja
extern int HourEnd = 24; // Waktu akhir EA bekerja

/*-- Parameter ini tidak ditampilkan di EA --*/
string EAName = "EA DwiM Martingale2MA ver 1.0"; // Nama EA, untuk ditampilkan di layar
string EAComment = "DwiM"; // Variabel ini akan kita masukkan di setiap OP sebagai Comment
int EAMagicNumber = 8095; // Magic Number
double SetPoint = 0; // Variabel SetPoint untuk kode digit broker 4 atau 5
Yang terpenting dari variable di atas adalah :

TakeProfit, yaitu 10 pip.
PipStep, yaitu 10 pip.
Multiply, ini adalah angka pengali. Biasa diisi 2x atau 1.7x. Tergantung strategi martingalenya.
- MaxTrade, ini adalah batas maksimal OP martingale yang akan dibuat oleh EA.

Baiklah, sekarang kita masuk ke coding indikatornya. Kalau agan-agan mengikuti thread Studi Kasus yang pertama, banyak contoh coding dengan memakai indikator MA disana.

Langsung saja ke aplikasinya :
 Code:
int start()
{
//----

int iTrade=0;

double SMA18=0, EMA200=0;

SMA18=iMA(NULL, 0, 18, 0, MODE_SMA, PRICE_CLOSE, 0 );
EMA200=iMA(NULL, 0, 200, 0, MODE_EMA, PRICE_CLOSE, 0);

Comment(EAName); // Tampilkan Nama EA di layar

/* -- Jika tidak ada OP sama sekali, maka jalankan fungsi berikut --*/
/* -- Disinilah tempat anda memasukkan koding indikator untuk memicu OP --*/
if(OrdersTotal()==0)
{

if((Bid > SMA18) && (SMA18 > EMA200))
{
/*-- Order Buy --*/
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, EAMagicNumber);

}
else if((Ask < SMA18) && (SMA18 < EMA200))
{
/*-- Order Sell --*/
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, EAMagicNumber);
}

}

}
Coding di atas adalah pemicu dari OP. Jika price berada di atas SMA18 dan SMA18 berada di atas EMA200 maka BUY. Demikian pula sebaliknya.

Dalam coding di atas, saya usahakan menuliskan banyak comment agar mudah dipahami oleh rekan trader yang baru belajar EA.

Sekarang kita masuk ke coding martingalenya.

---------------------------------------------------------

Fungsi GoMartingale dan Fungsi ModifyTP

Mengulang penjelasan di awal, ada 2 fungsi di EA Simple ini. Yaitu GoMartingale dan ModifyTP.

Fungsi GoMartingale penampakannya adalah sbb. Ini dibuat sesimple mungkin dalam satu fungsi. Tugas fungsi ini adalah memeriksa apakah OP-nya salah arah. Jika salah arah, maka fungsi akan membuat satu OP lagi searah dengan sebelumnya, dengan lot yang sudah dilipatduakan.

Code:
void GoMartingale()
{
int iCount = 0;
double LastOP = 0;
double LastLots = 0;
bool LastIsBuy = FALSE;
int iTotalBuy = 0;
int iTotalSell = 0;
int Spread=0;

Spread= MarketInfo(Symbol(), MODE_SPREAD);


for(iCount=0;iCount<OrdersTotal();iCount++)
{

OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);

if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP>OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=TRUE;
iTotalBuy++;

/* Bila mencapai batas OP maksimal, jangan tambah OP lagi */
if(iTotalBuy==MaxTrade) {return(0);}
}

if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP<OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=FALSE;
iTotalSell++;

/* Bila mencapai batas OP maksimal, jangan tambah OP lagi */
if(iTotalBuy==MaxTrade) {return(0);}
}

}

/* Jika arah Price adalah DOWNTREND...., Periksa nilai Bid (*/
if(LastIsBuy)
{
if(Bid<=LastOP-(Spread*SetPoint)-(PipStep*SetPoint))
{
OrderSend(Symbol(), OP_BUY, Multiply*LastLots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, EAMagicNumber);
ModifyTP();
LastIsBuy=FALSE;
return(0);
}
}
/* Jika arah Price adalah Sell...., Periksa nilai Ask (*/
else if(!LastIsBuy)
{
if(Ask>=LastOP+(Spread*SetPoint)+(PipStep*SetPoint))
{
OrderSend(Symbol(), OP_SELL, Multiply*LastLots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, EAMagicNumber);
ModifyTP();
return(0);
}
}

}
Fungsi yang kedua, adalah ModifyTP.

Untuk memahami fungsi ini, saya berikan gambaran sbb. Ini saya ambil dari penjelasan Wikipedia mengenai Martingale Betting di Perancis.

Kalau ada OP1 senilai 0.1 salah arah, maka akan dibuat OP2 dengan lot 2x lipat. Nah, karena OP1 dianggap gagal -- maka TP dari OP1 dan TP dari OP2 disamakan. Yaitu sama-sama di titik TP-nya OP2.

Kalau ada 3 OP Martingale, maka TP-nya disamakan semua senilai TP OP yang ke-3
Kalau ada 4 OP Martingale, maka TP-nya disamakan semua senilai TP OP yang ke-4
Demikian seterusnya.

Mohon maaf untuk master martingale, saya memahami bahwa banyak varian martingale di luar sana. Coding ini hanya membahas salah satu varian martingale. Yang penting teman-teman bisa coding dulu. Masalah variannya nanti tergantung keinginan mereka kalau sudah mahir di coding.

Nah, fungsi ModifyTP ini menyamakan TP di satu titik. Sehingga jika TP ini kena, maka semua OP martingale akan tertutup dengan hasil balance bertambah. Memang ada OP awal yang loss, tapi karena OP selanjutnya lot-nya ditambah, maka jika kena TP ini hasil akhirnya akan menambah balance. Silakan dicoba.

Code:
/*-- Fungsi ModifyTP ini untuk mengubah semua OP agar TP di titik yang sama --*/
void ModifyTP()
{
int iCount=0;
double NewTP=0;

/*- Ambil nilai Take Profit dari Order terakhir -*/
for(iCount=0;iCount<OrdersTotal();iCount++)
{

OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);

/*-- Kalau OP-nya adalah BUY, ambil nilai TP yang paling kecil. Jadikan TP bersama --*/
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(NewTP==0) {NewTP=OrderTakeProfit();}
if(NewTP>OrderTakeProfit()) {NewTP=OrderTakeProfit();}

}

/*-- Kalau OP-nya adalah SELL, ambil nilai TP yang paling besar. Jadikan TP bersama --*/
if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(NewTP==0) {NewTP=OrderTakeProfit();}
if(NewTP<OrderTakeProfit()) {NewTP=OrderTakeProfit();}
}

}

/*- Ubah semua nilai OP TakeProfit dengan yang baru (2x lipat) -*/
         for(iCount=0;iCount<OrdersTotal();iCount++)
{

OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);

/*- Kalau semua OP adalah BUY, maka ubahlah TP mereka -*/
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0);
}

/*- Kalau semua OP adalah SELL, maka ubahlah TP mereka -*/
if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0);
}

}
}

--------------------------------------------

Coding Lengkap

Baiklah, sekarang kita gabungkan coding lengkap dari EA Simple Martingale ini. Nama EA-nya saya sebut saja EA Martingale2MA.


//+------------------------------------------------------------------+
//| EA DwiM Martingale2MA.mq4 |
//| @DwiMalistyo |
//| http://ea.dwim.web.id |
//+------------------------------------------------------------------+
#property copyright "@DwiMalistyo"
#property link "http://ea.dwim.web.id"

/*-- Parameter ini ditampilkan di EA dan bisa diubah --*/
extern int TakeProfit = 10; // Nilai TP setiap OP di EA Martingale ini
extern int PipStep = 10; // Jarak pip dimana akan buka OP baru
extern int Slippage = 3; // Apa itu slippage ? Googling sendiri ya..
extern double Lots = 0.1; // Nilai lots awal, nantinya akan digandakan setiap step
extern double Multiply = 2.0; // Nilai pengali setiap step OP baru
extern int MaxTrade = 11; // Banyak OP maksimal yang boleh dijalankan
extern bool UseTime = TRUE; // Pilihan apakah memakai waktu bekerjanya EA ?
extern int HourStart = 18; // Waktu mulai EA bekerja
extern int HourEnd = 24; // Waktu akhir EA bekerja

/*-- Parameter ini tidak ditampilkan di EA --*/
string EAName = "EA DwiM Martingale2MA ver 1.0"; // Nama EA, untuk ditampilkan di layar
string EAComment = "DwiM"; // Variabel ini akan kita masukkan di setiap OP sebagai Comment
int EAMagicNumber = 8095; // Magic Number
double SetPoint = 0; // Variabel SetPoint untuk kode digit broker 4 atau 5


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

SetBroker();

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

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

int iTrade=0;

double SMA18=0, EMA200=0;

SMA18=iMA(NULL, 0, 18, 0, MODE_SMA, PRICE_CLOSE, 0 );
EMA200=iMA(NULL, 0, 200, 0, MODE_EMA, PRICE_CLOSE, 0);

Comment(EAName); // Tampilkan Nama EA di layar

/* -- Jika tidak ada OP sama sekali, maka jalankan fungsi berikut --*/
/* -- Disinilah tempat anda memasukkan koding indikator untuk memicu OP --*/
if(OrdersTotal()==0)
{

if((Bid > SMA18) && (SMA18 > EMA200))
{
/*-- Order Buy --*/
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, EAMagicNumber);

}
else if((Ask < SMA18) && (SMA18 < EMA200))
{
/*-- Order Sell --*/
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, EAMagicNumber);
}

}


/* -- Inilah Fungsi Martingale. Jika ada OP yang salah, maka lakukan martingale --*/
if(OrdersTotal()>=1)
{
GoMartingale();
}


//----
return(0);
}
//+------------------------------------------------------------------+

/*--agar EA bisa running di Broker 4 Digit atau 5 Digit--*/
void SetBroker()
{
if (Digits==3 || Digits==5) // Perintah untuk broker 5 Digits
{SetPoint=Point*10;}
else // Perintah untuk broker 4 Digits
{SetPoint=Point;}
}

void GoMartingale()
{
int iCount = 0;
double LastOP = 0;
double LastLots = 0;
bool LastIsBuy = FALSE;
int iTotalBuy = 0;
int iTotalSell = 0;
int Spread=0;

Spread= MarketInfo(Symbol(), MODE_SPREAD);


for(iCount=0;iCount<OrdersTotal();iCount++)
{

OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);

if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP>OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=TRUE;
iTotalBuy++;

/* Bila mencapai batas OP maksimal, jangan tambah OP lagi */
if(iTotalBuy==MaxTrade) {return(0);}
}

if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(LastOP==0) {LastOP=OrderOpenPrice();}
if(LastOP<OrderOpenPrice()) {LastOP=OrderOpenPrice();}
if(LastLots<OrderLots()) {LastLots=OrderLots();}
LastIsBuy=FALSE;
iTotalSell++;

/* Bila mencapai batas OP maksimal, jangan tambah OP lagi */
if(iTotalBuy==MaxTrade) {return(0);}
}

}

/* Jika arah Price adalah DOWNTREND...., Periksa nilai Bid (*/
if(LastIsBuy)
{
if(Bid<=LastOP-(Spread*SetPoint)-(PipStep*SetPoint))
{
OrderSend(Symbol(), OP_BUY, Multiply*LastLots, Ask, Slippage, 0, Ask+TakeProfit*SetPoint, EAComment, EAMagicNumber);
ModifyTP();
LastIsBuy=FALSE;
return(0);
}
}
/* Jika arah Price adalah Sell...., Periksa nilai Ask (*/
else if(!LastIsBuy)
{
if(Ask>=LastOP+(Spread*SetPoint)+(PipStep*SetPoint))
{
OrderSend(Symbol(), OP_SELL, Multiply*LastLots, Bid, Slippage, 0, Bid-TakeProfit*SetPoint, EAComment, EAMagicNumber);
ModifyTP();
return(0);
}
}

}

/*-- Fungsi ModifyTP ini untuk mengubah semua OP agar TP di titik yang sama --*/
void ModifyTP()
{
int iCount=0;
double NewTP=0;

/*- Ambil nilai Take Profit dari Order terakhir -*/
for(iCount=0;iCount<OrdersTotal();iCount++)
{

OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);

/*-- Kalau OP-nya adalah BUY, ambil nilai TP yang paling kecil. Jadikan TP bersama --*/
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(NewTP==0) {NewTP=OrderTakeProfit();}
if(NewTP>OrderTakeProfit()) {NewTP=OrderTakeProfit();}

}

/*-- Kalau OP-nya adalah SELL, ambil nilai TP yang paling besar. Jadikan TP bersama --*/
if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
if(NewTP==0) {NewTP=OrderTakeProfit();}
if(NewTP<OrderTakeProfit()) {NewTP=OrderTakeProfit();}
}

}

/*- Ubah semua nilai OP TakeProfit dengan yang baru (2x lipat) -*/
for(iCount=0;iCount<OrdersTotal();iCount++)
{

OrderSelect(iCount,SELECT_BY_POS,MODE_TRADES);

/*- Kalau semua OP adalah BUY, maka ubahlah TP mereka -*/
if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0);
}

/*- Kalau semua OP adalah SELL, maka ubahlah TP mereka -*/
if(OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderComment()==EAComment && OrderMagicNumber()==EAMagicNumber)
{
OrderModify(OrderTicket(), OrderLots(), 0, NewTP, 0);
}

}
}

 Kita akan coba melakukan backtesting sbb di bawah.

Kita lihat pada gambar, bahwa jika price berada di atas kedua MA, maka OP akan buy. Tapi price turun terus, sehingga GoMartingale akan membuat OP baru dalam jarak PipStep yaitu 10 pip.

Perhatikan juga, bahwa selain membuat OP Martingale, nilai TP dimodifikasi seperti garis merah, yaitu senilai TP OP yang terakhir. Sehingga jika OP terakhir ini (buy paling bawah) kena TP - akibatnya semua OP akan terhapus dan balance akan bertambah.




 Sip deh teman-teman. EA Simple Martingale-nya sudah selesai. Simple banget kan ?

Hehehe...memang itulah tujuannya. Maksudnya agar coding EA ini bisa di-copy paste, dan dimasukkan ke dalam coding EA teman-teman yang menggunakan strategi martingale.

Sekian dulu penjelasannya. Kita kelak akan melanjutkan thread ini dengan kasus-kasus coding Martingale lain. Tentunya yang sederhana saja ya. Agar visi misi thread ini bisa tercapai. Silakan jika ada masukan, saran dan kritik dari rekan-rekan trader, dan juga master-master EA di Forum MT5.

Salam hangat.

Tidak ada komentar:

Posting Komentar