Tuesday 18 September 2012

Membuat EA tanpa Coding, Cross MA

http://indo.mt5.com/showthread.php?7186-Praktek-Membuat-EA-sederhana-tanpa-melakukan-coding.

Salam profit untuk semua trader di forum MT5 tercinta. 

Mohon ijin kepada moderator yang baik untuk membuka thread baru tentang programming Expert Advisor (EA). Saya mengaku sebenarnya saya adalah newbie asli, baik di dunia Forex apalagi di bidang Expert Advisor. Namun karena tahun lalu (2010) newbie ini pernah nekat menulis thread tentang cara membuat EA, akibatnya banyak yang minta diskusi tentang Expert Advisor di email. Dan dari situ saya mengetahui bahwa betapa menggeloranya semangat teman-teman trader untuk bisa tahu dan menguasai cara membuat EA ini.

Bagi mereka yang pernah belajar programming C dan C++, tentu tidak akan mengalami kesulitan untuk memahami bahasa pemrograman MQL yang menjadi bahasanya EA. Tapi bagi yang tidak suka ruwet-ruwet, bagaimana ?. Di luar sana banyak software-software yang memudahkan pembuatan EA seperti Forex EA Generator. Tapi menguasai software ini tidak mudah. Masih banyak kendala yang harus dihadapi mereka yang belum pernah belajar bahasa komputer.

Melalui thread ini, saya mengajak teman-teman yang ingin sekali bisa membuat EA- untuk praktek cara membuat EA sederhana tanpa melakukan coding. Tools yang kita gunakan adalah Expert Advisor Builder online di alamat internet ini :

http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/

Bagaimana teman-teman ? Apakah semangat ingin membuat EA sendiri ?

Jika jawabannya ya, maka anda tidak membutuhkan waktu lama. Cukup simak luangkan waktu menyimak penjelasan singkat di thread ini -- lalu praktekkan !. Lewat ujicoba 2 atau 3 kali biasanya anda sudah bisa menggenerate EA sendiri tanpa kesulitan. Tentu saja EA yang dibuat dengan Builder online ini bukan jenis EA yang ruwet-ruwet. EA yang bisa diciptakan disini adalah jenis EA yang memakai indikator bawaan MT4 sendiri.

Tapi lumayanlah. Setelah mahir menggunakan builder ini, anda sudah bisa membuat EA dengan konsep trading sendiri. Bisa mengujicoba dengan backtesting, dan bisa sharing EA anda di forum MT5 dengan trader lain. Ada kemajuan !. Tidak perlu minta bantuan master EA yang lewat untuk dibuatkan EA lagi. Ke depannya anda bisa memperdalam ilmu coding jika dibutuhkan dengan dasar yang saat ini dimiliki.

Baik, inilah tampilan EA Builder online tsb.

Spoiler Spoiler:



Praktek : Membuat EA Simple MA.

Langsung praktek saja ya ? Kita lewatkan teori-teori yang tidak perlu. Langsung saja ke tujuan.

Katakan kita memiliki sebuah konsep trading dengan Simple MA. Ada 2 MA, masing-masing adalah MA 12 simple close dan MA 32 simple close. Perhatikan gambar di bawah ini :

Spoiler Spoiler:


Kita memiliki rule sebagai berikut :

1. Jika MA12 memotong MA32 dari atas ke bawah, maka SELL dengan TP 10 dan SL 30.
2. Jika MA12 memotong MA32 dari bawah ke atas, maka BUY dengan TP 10 dan SL 30.

Bagaimana membuat EA dari konsep trading di atas ?.

Kita akan langsung memasukkan nilai-nilai tadi di EA Builder kita. Ayo, sekarang kita meluncur ke TKP.

Penggunaan EA Builder Online nanti sangat sederhana. Cuma ada 4 langkah, dan EA kita sudah jadi. Langkah itu tampak di gambar, yaitu :

1. Masukkan parameter Order Option (TP, SL, Slippage, dll).
2. Masukkan logika SELL (Kapan EA harus melakukan SELL).
3. Masukkan logika BUY (Kapan EA harus melakukan BUY).
4. Selesai, tekan tombol "Complete", dan EA telah tersedia untuk anda. 

Kita praktekkan langsung di bawah ya....


Saya biasanya melakukan pengisian parameter seperti dalam coding EA, yaitu mulai dari mengisi nilai TP, nilai SL dan lain-lain. Maka kita masuk ORDER OPTION dulu, dan kita masukkan angka parameter yang kita inginkan.

Spoiler Spoiler:


Dalam praktek ini, saya gunakan Lot sebesar 1 lot setiap OP. StopLoss 30 pip, TakeProfit 10 pip, dan fasilitas Trailing Stop saya matikan (disable). Kapan-kapan jika anda menginginkan adanya fasilitas Trailing Stop di dalam EA anda, cukup anda ubah ke enable.

Berikutnya kita masuk ke tahap 2, yaitu memasukkan logika SELL. Kapan EA harus melakukan SELL ?

Untuk anda-anda yang belum pernah coding, saya coba jabarkan dengan detil -- sehingga pemula sekalipun pasti bisa membuat EA di thread ini.

Perhatikan gambar chart ini.

Spoiler Spoiler:


Katakanlah saat ini candle terakhir yang sedang berjalan adalah candle yang saya beri nomor 2. Tidak usah dilihat candle-candle selanjutnya, anggap tidak ada. Saat ini, candle terakhir dan yang tengah berjalan adalah candle nomor 2.

Pada saat candle 2, si MA 32 (merah) sedang berada di atas MA 12 (kuning). MA 32 saat itu sudah dipotong dari atas oleh MA 12. Bahasa matematika-nya adalah MA32 > MA12. Dan ini terjadi di candle sekarang atau disebut "Shift 0".

Sekarang lihat satu candle sebelumnya. Disini, MA 32 (merah) posisinya di bawah MA 12 (kuning). Atau MA 32 < MA 12 pada Shift 1. Shift 1 maksudnya pada satu candle sebelum candle yang sekarang.

Kalau kita tulis ulang persamaan tadi, menjadi demikian.

MA32 < MA12 Shift 1 AND MA32 > MA12 Shift 0

Persamaan di atas adalah kondisi programming dimana si EA harus melakukan SELL. buat yang masih bingung, silakan dibaca -- diresapi dan dihayati berulang-ulang.

Persamaan tadi segera kita masukkan ke EA Builder Online kita di bawah. Sebagai catatan, saya membuat EA ini untuk pair EURUSD di TF 1H. Ya ini sekedar contoh.

Spoiler Spoiler:


Pada gambar di atas, kita baru memasukkan persamaan ini :

MA32 < MA12 Shift 1

Kita belum memasukkan persamaan yang satu lagi. Yaitu yang Shift 1. Maka kita tekan tombol ADD untuk memasukkan persamaan yang kanan (Shift 0).

Spoiler Spoiler:


Nah, masukkan persamaan MA32 > MA12 Shift 0 di builder ini. Perhatikan bahwa antara persamaan kiri dan kanan menggunakan operator AND (lihat lingkaran pada gambar).

Kalau tahap ini sudah selesai anda lakukan, maka anda baru selesai memasukkan logika SELL ke dalam EA ini. Sekarang EA sudah mengerti kapan dia harus SELL.

Tapi kan dia belum mengerti bagaimana dan kapan harus BUY ? Maka kita akan masuk ke tahap 3 yaitu memasukkan logika BUY.



Sebelum memasukkan logika BUY, baiknya kita mencoret-coret dulu persamaan yang diperlukan. Agar nanti mudah memasukkan ke EA Builder-nya.

Spoiler Spoiler:


Kita sama-sama memperhatikan gambar. Posisi BUY terjadi bila :

Kiri (Shift 1) : MA32 (merah) di atas MA12 (kuning)
Kanan (Shift 0) : MA32 (merah) di bawah MA12 (kuning)

Atau bila ditulis dengan cara lain :

MA32 > MA12 Shift 1 AND MA32 < MA12 Shift 0

Sip. Maknyus !. Kita akan implementasikan formula ini ke dalam EA Builder. Kita klik BUY Strategy

Spoiler Spoiler:


Pada gambar atas, kita masukkan dulu persamaan kiri (yang shift 1). Lalu tekan ADD untuk memasukkan persamaan yang kanan. Operatornya adalahAND, jangan lupa dimasukkan ya.

Spoiler Spoiler:


 Baiklah, EA kita seharusnya sudah selesai !.

Cari tombol COMPLETE, dan tekan. Maka EA kita berupa coding MQL akan terdownload ke laptop kita.


Hasil :


//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder                  |
//|                http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//|                                                                  |
//|  In no event will author be liable for any damages whatsoever.   |
//|                      Use at your own risk.                       |
//|                                                                  |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY   1
#define SIGNAL_SELL  2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"
#property link      "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern   int      MagicNumber    = 0;
extern   bool     SignalMail     = False;
extern   bool     EachTickMode   = True;
extern   double   Lots           = 1.0;
extern   int      Slippage       = 3;
extern   bool     UseStopLoss    = True;
extern   int      StopLoss       = 30;
extern   bool     UseTakeProfit  = True;
extern   int      TakeProfit     = 10;
extern   bool     UseTrailingStop = False;
extern   int      TrailingStop   = 30;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init() {
   BarCount = Bars;
   if (EachTickMode) Current = 0; else Current = 1;
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit() {
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start() {
   int Order = SIGNAL_NONE;
   int Total, Ticket;
   double StopLossLevel, TakeProfitLevel;

   if (EachTickMode && Bars != BarCount) TickCheck = False;
   Total = OrdersTotal();
   Order = SIGNAL_NONE;

   //+------------------------------------------------------------------+
   //| Variable Begin                                                   |
   //+------------------------------------------------------------------+


double Buy1_1 = iMA("EURUSD", PERIOD_H1, 32, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy1_2 = iMA("EURUSD", PERIOD_H1, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = iMA("EURUSD", PERIOD_H1, 32, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy2_2 = iMA("EURUSD", PERIOD_H1, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double Sell1_1 = iMA("EURUSD", PERIOD_H1, 32, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell1_2 = iMA("EURUSD", PERIOD_H1, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = iMA("EURUSD", PERIOD_H1, 32, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell2_2 = iMA("EURUSD", PERIOD_H1, 12, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
   
   //+------------------------------------------------------------------+
   //| Variable End                                                     |
   //+------------------------------------------------------------------+

   //Check position
   bool IsTrade = False;

   for (int i = 0; i < Total; i ++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType() <= OP_SELL &&  OrderSymbol() == Symbol()) {
         IsTrade = True;
         if(OrderType() == OP_BUY) {
            //Close

            //+------------------------------------------------------------------+
            //| Signal Begin(Exit Buy)                                           |
            //+------------------------------------------------------------------+

            //+------------------------------------------------------------------+
            //| Signal End(Exit Buy)                                             |
            //+------------------------------------------------------------------+

            if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if(Bid - OrderOpenPrice() > Point * TrailingStop) {
                  if(OrderStopLoss() < Bid - Point * TrailingStop) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         } else {
            //Close

            if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
               if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
               if (!EachTickMode) BarCount = Bars;
               IsTrade = False;
               continue;
            }
            //Trailing stop
            if(UseTrailingStop && TrailingStop > 0) {                 
               if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
                  if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
                     OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
                     if (!EachTickMode) BarCount = Bars;
                     continue;
                  }
               }
            }
         }
      }
   }
   //+------------------------------------------------------------------+
   //| Signal Begin(Entry)                                              |
   //+------------------------------------------------------------------+

   if (Buy1_1 > Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;

   if (Sell1_1 < Sell1_2 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;
   //+------------------------------------------------------------------+
   //| Signal End                                                       |
   //+------------------------------------------------------------------+

   //Buy
   if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }

         if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("BUY order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
   } else {
    Print("Error opening BUY order : ", GetLastError());
   }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   //Sell
   if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
      if(!IsTrade) {
         //Check free margin
         if (AccountFreeMargin() < (1000 * Lots)) {
            Print("We have no money. Free Margin = ", AccountFreeMargin());
            return(0);
         }
         if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
         if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

         Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
         if(Ticket > 0) {
            if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
    Print("SELL order opened : ", OrderOpenPrice());
                if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
   } else {
    Print("Error opening SELL order : ", GetLastError());
   }
         }
         if (EachTickMode) TickCheck = True;
         if (!EachTickMode) BarCount = Bars;
         return(0);
      }
   }

   if (!EachTickMode) BarCount = Bars;
   return(0);
}
//+------------------------------------------------------------------+


Kita akan coba melakukan backtesting di MT4. 

Yah...hasilnya sih tidak terlalu memuaskan secara profit  namanya juga konsep trading asal jadi. Tapi EA ini sudah sanggup trading BUY dan SELL tepat pada cross indikator MA yang kita inginkan.

Spoiler Spoiler:


CATATAN :

om saya mw menanyakan tentang kolom "close(buy) strategy" dan "close(sell) strategy" untuk apa? :

Begini. Dalam contoh yang saya berikan di atas, -- OP-nya kan akan berakhir kalau kena TP atau kena SL.

Nah, bagaimana kalau kita membuat konsep trading dimana OP berakhir jika MA-nya bersilang balik ? - Disinilah kita menggunakan Close (Buy) Strategy dan Close (Sell) Strategy. OP akan ditutup jika MA bersilang kebalikannya. Nanti selama thread ini berjalan kita akan memakai fungsi ini agar newbies bisa belajar banyak membuat EA.


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

biasanya newbie sperti ane msih lom bs invest bnyk gan plingan cm $20 ja n main na di cent pke TF M15 n lot 0.01 
jadi klo qt mau ubah itu gmn cranya ya??

Kalau LOT 0.01 dan TF 15M ingin dimasukkan sebagai coding di dalam EA, maka ini caranya :

Ini untuk memasukkan LOT (di bagian Order Option)
Spoiler Spoiler:


Ini untuk memasukkan parameter TimeFrame 15M ( di bagian Sell Strategy atau Buy Strategy)
Spoiler Spoiler:
---------------------------------------------------

Perubahan di TF H1 menjadi M5



//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 0.01;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 30;
extern bool UseTakeProfit = True;
extern int TakeProfit = 10;
extern bool UseTrailingStop = False;
extern int TrailingStop = 30;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+


double Buy1_1 = iMA("EURUSD", PERIOD_M5, 16, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy1_2 = iMA("EURUSD", PERIOD_M5, 6, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Buy2_1 = iMA("EURUSD", PERIOD_M5, 16, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy2_2 = iMA("EURUSD", PERIOD_M5, 6, 0, MODE_SMA, PRICE_CLOSE, Current + 0);

double Sell1_1 = iMA("EURUSD", PERIOD_M5, 16, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell1_2 = iMA("EURUSD", PERIOD_M5, 6, 0, MODE_SMA, PRICE_CLOSE, Current + 1);
double Sell2_1 = iMA("EURUSD", PERIOD_M5, 16, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell2_2 = iMA("EURUSD", PERIOD_M5, 6, 0, MODE_SMA, PRICE_CLOSE, Current + 0);




//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
bool IsTrade = False;

for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) { 
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) { 
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 > Buy1_2 && Buy2_1 < Buy2_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2 && Sell2_1 > Sell2_2) Order = SIGNAL_SELL;


//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

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


HASIL BT nya :

Lihat screen shot di bawah. EA-nya langsung melakukan OP di account demo ini. Tidak ada masalah. Pertanyaannya, apakah ketika memasukkan EA ke chart, kolom "Allow Live Trading" sudah ikut dicentang ?
Spoiler Spoiler:









5 comments:

  1. Permisi Gan, ak mo tanya seandainya tetep pake 2 MA tersebut dan pake d TF M5 tp bgitu kedua MA itu cross lgsg 3x OP skaligus tetapi TP nya masing2 5 pip,dan tetep OP berakhir ketika ada cross kebalikan berikutnya,....gmn ya mohon penjelasannya trm ksh......

    ReplyDelete
  2. Misi gan... Gw coba persis, pas gw coba d strategy tester gak mau OP.. Apanya ya gan>??

    ReplyDelete
  3. Mohon pencerahan kalao mau bikin multi OP gmn ya gan??

    ReplyDelete
  4. Hey Everybody,

    Below is a list of the highest ranking forex brokers:
    1. Most Recommended Forex Broker
    2. eToro - $50 minimum deposit.

    Here is a list of the best forex tools:
    1. ForexTrendy - Recommended Probability Software.
    2. EA Builder - Custom Indicators Autotrading.
    3. Fast FX Profit - Secret Forex Strategy.

    Hopefully these lists are helpful to you...

    ReplyDelete