Saturday 19 January 2013

Studi Kasus : EA Trading Scalper.


Teman-teman trader.

Di PM, saya menerima pesan dan pertanyaan-pertanyaan seputar Thread ini. Kesan saya, ternyata teman-teman masih malu-malu memperlihatkan codingnya di sini, walaupun saya lihat sudah bagus. Sebagian lain ternyata masih banyak yang kebingungan mengenai coding EA. Jadi tampaknya saya akan mengulang satu kasus lagi supaya jelas langkah-langkah membuat EA sederhana dari dasar.

Namanya Studi Kasus, kita tidak mengambil contoh dari kasus khayalan. Tapi kita benar-benar mencari satu strategi trading yang ada di forum, dan kita buatkan EA-nya. Kita percaya bahwa strategi yang diposting di forum sudah menghasilkan profit bagi TS-nya. Dan kalau EA sudah jadi, kita bisa konsultasikan ke pencipta sistem untuk mencari cara bagaimana EA-nya bisa profit.

Kita coba melihat strategi trading yang ada di sub forum ini :
http://indo.mt5.com/showthread.php?2...rading-Scalper

Spoiler Spoiler:



Di atas, kita lihat bahwa indikator yang digunakan hanya 3 Moving Average. Jadi cukup mudah untuk dibuatkan EA-nya.

Coba diingat-ingat lagi, apa yang harus kita lakukan pertama kali ?

Benar, kita membuat template dari indikator-indikator di atas. Jadi kita pasang 3 indikator Moving Average itu di chart, dan kita simpan dalam template. Saya namakan saja EAScalper, dan nanti EA-nya kita namakan EA Scalper.

Spoiler Spoiler:



Sebelum dilanjutkan, mohon dibaca pembahasan di halaman depan. Nanti kita lanjutkan lagi ya, break sebentar.
Last edited by DwiM; 11-27-2010 at 06:28 PM.




=============================================


 Baik, kita lanjutkan teman-teman.

Coding dulu parameter-parameter yang standar, seperti TakeProfit, StopLoss, dan lain-lain. Masukkan juga parameter untuk indikator yang sudah diketahui yaitu MA1PeriodeMA2Periode dan MA3Periode.

Code:
//+------------------------------------------------------------------+
//|                                                    EAScalper.mq4 |
//|                                             Dwi M ea@dwim.web.id |
//|                                            http://ea.dwim.web.id |
//+------------------------------------------------------------------+
#property copyright "Dwi M ea@dwim.web.id"
#property link      "http://ea.dwim.web.id"

extern   int      TakeProfit        = 10;
extern   int      StopLoss          = 20;
extern   int      Slippage          = 3;
extern   int      Lots              = 1.0;

extern   int      MA1Periode        = 10;
extern   int      MA2Periode        = 20;
extern   int      MA3Periode        = 30;

double   dPoint;  //untuk setting Broker 5 Digits
Di depan kita sudah belajar bagaimana menangani broker 5 Digits. Agar coding menjadi singkat, saya memasukkan ke bagianInit(). Bagian Init() hanya dijalankan satu kali ketika EA di drag ke chart. Ini lebih baik daripada dimasukkan ke Start() yang dijalankan berkali-kali setiap ada tick.

Code:
int init()
  {
//----

   /* Bila chartnya adalah broker 5 Digit maka Point dikali 10 */
   if (Digits==3 || Digits==5)
   {
      dPoint=Point*10;
   }
   else
   {
      dPoint=Point;
   } 
     
   
//----
   return(0);
  }
Di dalam Start(), kita masukkan indikator-indikator yang diketahui. Coba pelajari function 3 Indikator MA di bawah ini:

Code:
   double   dMA1now, dMA2now, dMA3now, dMA1before, dMA2before, dMA3before;

   
   /* Cari nilai MA saat ini */
   dMA1now=iMA(NULL,0,MA1Periode,0,MODE_SMA,PRICE_CLOSE,0);
   dMA2now=iMA(NULL,0,MA2Periode,0,MODE_SMA,PRICE_CLOSE,0);
   dMA3now=iMA(NULL,0,MA3Periode,0,MODE_SMA,PRICE_CLOSE,0);
   
   /* Cari nilai MA satu candle sebelumnya */
   dMA1before=iMA(NULL,0,MA1Periode,0,MODE_SMA,PRICE_CLOSE,1);
   dMA2before=iMA(NULL,0,MA2Periode,0,MODE_SMA,PRICE_CLOSE,1);
   dMA3before=iMA(NULL,0,MA3Periode,0,MODE_SMA,PRICE_CLOSE,1);
Terakhir, kita masukkan function logic Konsep Trading, yang dilanjutkan dengan function OrderSend untuk buy dan sell. Codingnya seperti di bawah ini. Jangan lupa, supaya kita membatasi dalam satu saat hanya ada satu OP saja, kita gunakanif(OrdersTotal()<1)

Code:
   if(OrdersTotal()<1)
   {
   
      if (AccountFreeMargin()<1000*Lots)
      { Comment("EA tidak bekerja, dana kurang :", AccountFreeMargin()); return(0);}
 

      if ((dMA1now > dMA2now) && (dMA1before < dMA2before))
      {
         OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Bid-StopLoss*dPoint,Ask+TakeProfit*dPoint,0);
      }
      else if ((dMA1now < dMA2now) && (dMA1before > dMA2before))
      {
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Ask+StopLoss*dPoint,Bid-TakeProfit*dPoint,0);
      }   
   }
OK, Coding dasar sudah dimasukkan. Kita bisa test dulu di strategy tester sebelum dioprek mencari settingan yang tepat. 

Spoiler Spoiler:



Menurut saya coding EA ini sudah cukup sampai disini. Simpel saja. Tidak pakai trailing stop. Sebab ini model EA Scalper yang mencari 10 pip tiap OP. Kalau target TP-nya 30 pip ke atas, akan saya tambahkan locking dan trailing stop.

Ini saya kutipkan keseluruhan coding EA ini. Silakan ditest :

Code:
//+------------------------------------------------------------------+
//|                                                    EAScalper.mq4 |
//|                                             Dwi M ea@dwim.web.id |
//|                                            http://ea.dwim.web.id |
//+------------------------------------------------------------------+
#property copyright "Dwi M ea@dwim.web.id"
#property link      "http://ea.dwim.web.id"

extern   int      TakeProfit        = 10;
extern   int      StopLoss          = 20;
extern   int      Slippage          = 3;
extern   int      Lots              = 1.0;

extern   int      MA1Periode        = 10;
extern   int      MA2Periode        = 20;
extern   int      MA3Periode        = 30;

double   dPoint;  //untuk setting Broker 5 Digits

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

   /* Bila chartnya adalah broker 5 Digit maka Point dikali 10 */
   if (Digits==3 || Digits==5)
   {
      dPoint=Point*10;
   }
   else
   {
      dPoint=Point;
   } 
     
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----

   double   dMA1now, dMA2now, dMA3now, dMA1before, dMA2before, dMA3before;
   
   /* Cari nilai MA saat ini */
   dMA1now=iMA(NULL,0,MA1Periode,0,MODE_SMA,PRICE_CLOSE,0);
   dMA2now=iMA(NULL,0,MA2Periode,0,MODE_SMA,PRICE_CLOSE,0);
   dMA3now=iMA(NULL,0,MA3Periode,0,MODE_SMA,PRICE_CLOSE,0);
   
   /* Cari nilai MA satu candle sebelumnya */
   dMA1before=iMA(NULL,0,MA1Periode,0,MODE_SMA,PRICE_CLOSE,1);
   dMA2before=iMA(NULL,0,MA2Periode,0,MODE_SMA,PRICE_CLOSE,1);
   dMA3before=iMA(NULL,0,MA3Periode,0,MODE_SMA,PRICE_CLOSE,1);

   if(OrdersTotal()<1)
   {
   
      if (AccountFreeMargin()<1000*Lots)
      { Comment("EA tidak bekerja, dana kurang :", AccountFreeMargin()); return(0);}
 

      if ((dMA1now > dMA2now) && (dMA1before < dMA2before))
      {
         OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Bid-StopLoss*dPoint,Ask+TakeProfit*dPoint,0);
      }
      else if ((dMA1now < dMA2now) && (dMA1before > dMA2before))
      {
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Ask+StopLoss*dPoint,Bid-TakeProfit*dPoint,0);
      }   
   }
   

   
//----
   return(0);
  }
//+------------------------------------------------------------------+
Baik, semoga pengulangan kasus ini bisa menambah kejelasan. Jika ada pertanyaan silakan diposting disini, akan kita bantu sama-sama.

Jika sudah lebih percaya diri, silakan pecahkan kasus yang saya ajukan di halaman-halaman depan. Kita berlatih EA sama-sama disini.

Salam profit


=================================================


itu kan MA nya pakai SMA.kalau mau di ganti pake LSMA atau EMA mana yang harus di rubah bro.
Kita lihat function Moving Average ini :
dMA1now=iMA(NULL,0,MA1Periode,0,MODE_SMA,PRICE_CLO SE,0);
Kalau mau jadi EMA ya diganti saja parameternya jadi :
dMA1now=iMA(NULL,0,MA1Periode,0,MODE_EMA,PRICE_CLO SE,0);

Itu ada di manual dalam Meta Editor kok hehehehe

=====================================================


1 comment:

  1. dMA3now dan dMA3before nya buat apa brother, kok tidak digunakan di logic programnya. Thanks, salam provit.

    ReplyDelete