Tuesday, 25 December 2012

Belajar Membuat EA Sederhana 21 (Jebakan)


http://jumforex.blogspot.com/2012/12/belajar-membuat-ea-sederhana-21-jebakan.html

Pastikan sudah mengikuti di part 20 disini

Pada posting kali ini saya akan coba bahas tentang EA jebakan dengan menggunakan dua buah order pending stop.

Adapun rulenya adalah pada jam tertentu langsung pasang 2 buah order buystop dan sellstop dan ketika salah satu order pening stop tersebut tersentuh maka order pending stop yang tersisa langsung didelet.
Kemudian bila pada hari itu tidak tersentuh maka akan didelet. dan tambahan lain pada hari senin tidak trading karena EA ini cocok untuk trend pada hari itu , kalau hari senin diperkirakan biasanya sideway.

Jadi order setiap hari hanya akan melakukan order satu kali saja.

Coba perhatikan gambar di atas pada tanda panah , jadi pada jam server kira 2 jam 0 : 30 maka order stop akan di pasang .

Nah Kita coba buat deklarasinya sbb:


extern string  Nama_EA                 = "Jum+Profit";
extern bool    Trade_buystop           = true;
extern bool    Trade_sellstop          = true;
extern string  Jam_server              = "Set sesuai selera";
extern int     Jam                     = 0;
extern int     Menit                   = 30;
extern bool    Tp_in_Money             = false;
extern double  TP_in_money             = 5;
extern int     TP                      = 100;
extern int     SL                      = 20;
extern double  Lots                    = 0.1;
extern int     Jarak_stop              = 25;
extern bool    TrailingStop_           = true;
extern int     TrailingStop            = 12;
extern int     Magic                   = 69;
double slb,tpb,sls,tps,pt,lslb,ltpb;

Beberapa bagian yang saya coba siapkan adalah script  delet order type, disini dibuat dalam bentuk fungsi sbb :
void closeall(int m)
{
 for (int i = OrdersTotal() - 1; i >= 0; i--) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() != Symbol() || OrderMagicNumber()!=Magic /*|| m!= OrderType()*/) continue;
  if (OrderType() == m) OrderDelete(OrderTicket());
  if (OrderType() == m) OrderDelete(OrderTicket());
  if (OrderType() == m) OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE);
  if (OrderType() == m)OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE);
 }
}

Untuk menentukan order pada  jam tertentu sy buat bagian sbb
Hour()==Jam && Minute()==Menit


Untuk bagian delet ketika salah satu order stop tersenttuh adalah


if(jumlahorder(0)==1 && jumlahorder(1)==0){ 
   closeall(5);
   }
if(jumlahorder(0)==0 && jumlahorder(1)==1){ 
   closeall(4);
   }

sedang bagian untuk mendelet orderstop yang tidak tersentuh maka pada jam tersentu di delet
contoh jam 23

if(Hour()==23){
   closeall(4);
   closeall(5);
   }

Untuk asesoris order Pending stop :

   double as = Ask + Jarak_stop*pt;
   double bi = Bid - Jarak_stop*pt;
   if(SL==0)slb=0;else slb=as-SL*pt;
   if(SL==0)sls=0;else sls=bi+SL*pt;
   if(TP==0)tpb=0;else tpb=as+TP*pt;
   if(TP==0)tps=0;else tps=bi-TP*pt;

Bagian lain untuk membuat EA libut trading hari senin adalah
DayOfWeek()!=1


Nah EA jadinya  sbb



//+------------------------------------------------------------------+
//|                                                    EA Jum+Profit |
//|                                                gifaesa@yahoo.com |
//|                                     http://JumForex.blogspot.com |
//+------------------------------------------------------------------+

#property copyright "JumForex.blogspot.com"
#property link      "Gifaesa@yahoo.com"

extern string  Nama_EA                 = "Jum+Profit";
extern bool    Trade_buystop           = true;
extern bool    Trade_sellstop          = true;
extern string  Jam_server              = "Set sesuai selera";
extern int     Jam                     = 0;
extern int     Menit                   = 30;
extern bool    Tp_in_Money             = false;
extern double  TP_in_money             = 5;
extern int     TP                      = 100;
extern int     SL                      = 20;
extern double  Lots                    = 0.1;
extern int     Jarak_stop              = 25;
extern bool    TrailingStop_           = true;
extern int     TrailingStop            = 12;
extern int     Magic                   = 69;
double slb,tpb,sls,tps,pt,lslb,ltpb;
//+------------------------------------------------------------------+
//| 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()
  {
label();
if(TrailingStop_)dtrailing();
if(Tp_in_Money ){
  if(TP_in_money<= money(0)){ 
   closeall(0);
   closeall(2);
   }
  if(TP_in_money<= money(1)){ 
   closeall(1);
   closeall(3);
   }
 }
if(jumlahorder(0)==1 && jumlahorder(1)==0){ 
   closeall(5);
   }
if(jumlahorder(0)==0 && jumlahorder(1)==1){ 
   closeall(4);
   }
if(Hour()==23){
   closeall(4);
   closeall(5);
   }
//----
   double as = Ask + Jarak_stop*pt;
   double bi = Bid - Jarak_stop*pt;
   if(SL==0)slb=0;else slb=as-SL*pt;
   if(SL==0)sls=0;else sls=bi+SL*pt;
   if(TP==0)tpb=0;else tpb=as+TP*pt;
   if(TP==0)tps=0;else tps=bi-TP*pt;
if(DayOfWeek()!=1 && Hour()==Jam && Minute()==Menit && jumlahorder(0)==0 && jumlahorder(1)==0){
  if(jumlahorder(4)==0  && Trade_buystop  ) {OrderSend(Symbol(),OP_BUYSTOP,NR(Lots),as,3,slb, tpb,Nama_EA,Magic,0,Blue);}
  if(jumlahorder(5)==0  && Trade_sellstop ) {OrderSend(Symbol(),OP_SELLSTOP,NR(Lots),bi,3,sls, tps,Nama_EA,Magic,0,Red);}
 }

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

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);
              }
              }
           }
     }
  
}
void closeall(int m)
{
 for (int i = OrdersTotal() - 1; i >= 0; i--) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() != Symbol() || OrderMagicNumber()!=Magic /*|| m!= OrderType()*/) continue;
  if (OrderType() == m) OrderDelete(OrderTicket());
  if (OrderType() == m) OrderDelete(OrderTicket());
  if (OrderType() == m) OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE);
  if (OrderType() == m)OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE);
 }
}
double money(int m)
{
 double dp = 0;
 int i;
 for (i = 0; i < OrdersTotal(); i++) {
  OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
  if (OrderSymbol() != Symbol()  || OrderMagicNumber()!=Magic || m!=OrderType()) continue;
  dp += OrderProfit();
 }
 return(dp);
}

void label()
{
 Comment("\n ",
   "\n ",
   "\n ------------------------------------------------",
   "\n :: =>+Jum+Profit<=",
   "\n :: =>JumForex.blogspot.com<=",
   "\n ------------------------------------------------",
   "\n :: Spread                 : ", MarketInfo(Symbol(), MODE_SPREAD),
   "\n :: Leverage               : 1 : ", AccountLeverage(),
   "\n :: Equity                 : ", AccountEquity(),
   "\n :: Jam Server             :", Hour(), ":", Minute(),
   "\n ------------------------------------------------",
   "\n :: Floting buy : ",money(0),
   "\n :: Floting sell : ",money(1),
   "\n ------------------------------------------------",
   "\n :: >>By: Jum69<<",
   "\n ------------------------------------------------");
}



Nah jadi deh

Jangan lupa  kasih comment ya !

Belajar Membuat EA Sederhana 20 (Pending Order)


http://jumforex.blogspot.com/2012/12/belajar-membuat-ea-sederhana-pending.html

Pastikan telah mengikuti part 19 disini

sepertinya sudah lama gak posting !

Okey pada part ini saya akan coba bahas tentang EA yang terkait dengan Pending order.
Ada 6 macam type  yaitu

  1. Type  0 yaitu = Buy
  2. Type  1 yaitu = Sell
  3. Type  2 yaitu = Buylimit
  4. Type  3 yaitu = Selllimit
  5. Type  4 yaitu = Buystop
  6. Type  5 yaitu = Sellstop
Dari 6 macam type order tersebut type pending order ada 4 macam. (pastikan juga sudah membaca pada bagian part awal yang juga membahas type order).
Untuk itulah kita akan bahas type  pending order

1. Buylimit
       Buy limit merupakan order pesanan dibawah harga yang sedangan berjalan , sehingga pada strkur order yang perlu durubah adalah type order dan harga yang dipesan.
Perhatikan pada order buy berikut:

        OrderSend(Symbol(), 0, start_lot, Ask, 3, Ask-SL*Point,Ask+TP*Point, "", Magic, 0, Blue);

Ada bagian yang  bergaris bawah merupakan bagian yang harus dirubah dalam menggunakan order Pending tersebut.
Dan bagian yang juga harus diperhatikan adalah Jarak antara harga berjalan dengan harga yang dipesan untuk pending ordernya (OrdersOpenprice)==>    Ask- Jarak*Point
Sehingga jadinya sbb:
  OrderSend(Symbol(), 2, start_lot, Ask- Jarak*Point, 3, Ask- Jarak*Point-SL*Point,Ask-Jarak*Point+TP*Point, "", Magic, 0, Blue);
Bisa juga di tulis:
OrderSend(Symbol(), OP_BUYLIMIT, start_lot, Ask- Jarak*Point, 3, Ask- Jarak*Point-SL*Point,Ask-Jarak*Point+TP*Point, "", Magic, 0, Blue);

2. Selllimit

Selllimit merupakan order pesanan di atas harga yang sedang bergerak.
Seperti halnya pada order buylimiit bagian yg penting adalah type order dan jarak,
Nah silahkan di banding kan

  OrderSend(Symbol(), 3, start_lot, Bid+Jarak*Point, 3, Bid +Jarak*Point+ SL*Point,Bid+Jarak*Point-TP*Point, "", Magic, 0, Red);
Bisa juga di tulis:
OrderSend(Symbol(), OP_SELLLIMIT, start_lot, Bid+Jarak*Point, 3, Bid+ Jarak*Point + SL*Point,Bid+Jarak*Point-TP*Point, "", Magic, 0, Red);

3. Buystop

Buystop merupakan order pesanan di atas harga yang sedang bergerak.
Silahkan di amati dan dibandingkan dengan type sebelumnya

 OrderSend(Symbol(), 4, start_lot, Ask+ Jarak*Point, 3, Ask+ Jarak*Point-SL*Point,Ask+Jarak*Point+TP*Point, "", Magic, 0, Blue);
Bisa juga di tulis:
OrderSend(Symbol(), OP_BUYSTOP, start_lot, Ask+ Jarak*Point, 3, Ask+ Jarak*Point-SL*Point,Ask+Jarak*Point+TP*Point, "", Magic, 0, Blue);

4. Sellstop
Sellstop adalah merupakan order pesanan dibawah harga yang sedangan berjalan.
Silahkan di amati dan dibandingkan dengan type sebelumnya

  OrderSend(Symbol(), 5, start_lot, Bid-Jarak*Point, 3, Bid -Jarak*Point+SL*Point,Bid-Jarak*Point-TP*Point, "", Magic, 0, Red);
Bisa juga di tulis:
OrderSend(Symbol(), OP_SELLSTOP, start_lot, Bid-Jarak*Point, 3, Bid- Jarak*Point+SL*Point,Bid-Jarak*Point-TP*Point, "", Magic, 0, Red);

Nah Kita akan coba membuat EA sederhana dengan menggunakan ke 4 pending tersebut!
Namun sebelum kita buat kita harus membuat filter jumlah order sesuai typenya , Nah untuk memudahkan saya sediakan sbuah script yang merupakan fungsi untuk menghitung type order


int jumlahorder(int m)
{
int total = 0;
for (int i = 0; i < OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol()|| OrderMagicNumber()!=Magic || OrderType()!=m ) continue;
 total++;
}
return(total);
}


Cara memanggilnya
Contoh:
Untuk Buylimit

if(jumlahorder(OP_BUYLIMIT) ==0 )OrderSend(Symbol(), 2, start_lot, Ask- Jarak*Point, 3, Ask- Jarak*Point-SL*Point,Ask-Jarak*Point+TP*Point, "", Magic, 0, Blue);

 atau

if(jumlahorder(2)==0) OrderSend(Symbol(), OP_BUYLIMIT, start_lot, Ask- Jarak*Point, 3, Ask- Jarak*Point-SL*Point,Ask-Jarak*Point+TP*Point, "", Magic, 0, Blue);

Untuk Selllimit
if(jumlahorder(OP_SELLLIMIT) ==0 )OrderSend(Symbol(), 3, start_lot, Bid+Jarak*Point, 3, Bid +Jarak*Point+SL*Point,Bid+Jarak*Point-TP*Point, "", Magic, 0, Red);

atau

if(jumlahorder(3)==0)OrderSend(Symbol(), OP_SELLLIMIT, start_lot, Bid+Jarak*Point, 3, Bid +Jarak*Point+SL*Point,Bid+Jarak*Point-TP*Point, "", Magic, 0, Red);


Nah silahkan di lanjut deh

Tapi saya udah coba buatkan EA sederhananya  untuk lebih memahami
silahkan di amati


//+------------------------------------------------------------------+
//|                                             EA Pending Order.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//-------------------------------------------------------------------+


#property copyright "JumForex.blogspot.com"
#property link      "Gifaesa@yahoo.com"

extern string  Nama_EA                 = "Jum+Pending";
extern int     Mulai_Jam               = 6;
extern int     Akhir_Jam               = 20;
extern int     TP                      = 20;
extern int     SL                      = 100;
extern double  Lots                    = 0.01;
extern int     Jarak                   = 15;
extern int     Magic                   = 69;

double slb,tpb,sls,tps,pt;
int wt,wk,tiket,ticet;
//+------------------------------------------------------------------+
//| 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()
  {
label();
  
   if(Jam_trade()==1){
      if(jumlahorder(2)==0)OrderSend(Symbol(), OP_BUYLIMIT,NR(Lots), Ask- Jarak*Point, 3, Ask- Jarak*Point-SL*Point,Ask-Jarak*Point+TP*Point, "", Magic, 0, Blue);
      if(jumlahorder(3)==0)OrderSend(Symbol(), OP_SELLLIMIT,NR(Lots) , Bid+Jarak*Point, 3, Bid+ Jarak*Point+SL*Point,Bid+Jarak*Point-TP*Point, "", Magic, 0, Aqua);
      if(jumlahorder(4)==0)OrderSend(Symbol(), OP_BUYSTOP,NR(Lots) , Ask+ Jarak*Point, 3, Ask+ Jarak*Point-SL*Point,Ask+Jarak*Point+TP*Point, "", Magic, 0, Blue);
      if(jumlahorder(5)==0)OrderSend(Symbol(), OP_SELLSTOP,NR(Lots) , Bid-Jarak*Point, 3, Bid- Jarak*Point+SL*Point,Bid-Jarak*Point-TP*Point, "", Magic, 0, Yellow);
     }
   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 label()
{
 Comment("\n ",
   "\n ",
   "\n ------------------------------------------------",
   "\n :: =>+Jum+Pending<=",
   "\n :: =>JumForex.blogspot.com<=",
   "\n ------------------------------------------------",
   "\n :: Spread                 : ", MarketInfo(Symbol(), MODE_SPREAD),
   "\n :: Leverage               : 1 : ", AccountLeverage(),
   "\n :: Equity                 : ", AccountEquity(),
   "\n :: Jam Server             :", Hour(), ":", Minute(),
   "\n ------------------------------------------------",
   "\n :: >>By: Jum69<<",
   "\n ------------------------------------------------");
}

Bila ada manfaatnya atau belum jelas silahkan kasih comment ya

Happppy profit deh

Belajar Membuat EA Sederhana 19 Martingel


http://jumforex.blogspot.com/2012/11/belajar-membuat-ea-sederhana-19.html

Pastikan udah baca di part 18 disini
Berbicara EA martingel tentu gak ada habisnya !
Banyak trader yang anti dengan EA martingel tapi juga banyak trader penggemar martingel
Haaaaa
Biasanya banyak trader yang  kebetulan habis MC gara2 EA martingel pasti akan memberi sumpah serapah" Dasar EA martingel heeeee kapok deh menggunakan EA martingel....."

Sebagai pengguna EA martingel tentu saja bagi saya EA martingel merupakan  EA yg profitabel terlepas dari kekurangan dan kelemahannya , yang penting bisa memahami dan memperhitungankan risikonya  tentu tidak menjadi masalah.

Oke pada part 19 ini saya akan bahas tentang EA martingel sederhana dengan menggunakan 2 buah indikator yaitu  zigzag dan candel mingguan

Rulesnya :
Buy :

  • Zigzag muncul dibawah (lower) 
  • Harga di atas harga open candel minggu yang sedang berjalan
  • op tidak dalam candel yang sama seperti pada part 18
Untuk sel kebalikannya!

Tambahan lain pada EA kali ini adalah menggunakan target Equety ( jika target equety terpenuhi maka EA berhenti trading) EA yang akan kita gunakan masih sama seperti pada part 18...


Oke yang perlu dibahas dulu adalah indikator zigzag 
Nah pada indikator zigzag yang perlu dipahami adalah bahwa indikator ini berubah mengikuti harga tertinggi (Uper) dan terendah (lower).
Kita buat customnya:

    double up=iCustom(Symbol(),0,"ZigZag",  ExtDepth , ExtDeviation, ExtBackstep, MODE_UPPER,0 );
    double lo=iCustom(Symbol(),0,"ZigZag", ExtDepth , ExtDeviation, ExtBackstep, MODE_LOWER, 0);

Jadi modenya MODE_UPPER ketika harga posisi diatas dan MODE_LOWER ketika posisi dibawah.
Kemudian mengingat kita akan mengacu pada posisi zigzag dan berapapun jarak candel maka pada shift nya kita buat fleksibel saya tambahkan operasi for sebagai berikut

    for(int d=0; d<Bars  ; d++){
    double up=iCustom(Symbol(),0,"ZigZag",   ExtDepth , ExtDeviation, ExtBackstep, MODE_UPPER, d);
    double lo=iCustom(Symbol(),0,"ZigZag",   ExtDepth , ExtDeviation, ExtBackstep, MODE_LOWER,d);
    if(up!=0 || lo!=0) break;}
     if(up>0 )  aturan buy 
     if(lo>0)   aturan sell

Bars ini adalah angka yang jumlah tick candel untuk menunjukkan shift nya dalam menghitung candel  , bisa juga diganti dengan angka 1000 atau lebih ,ini untuk menentukan dimasa candel kebelakang  keberadaan posisi zigzag.

Sedangkan untuk membuat menentukan Open candel mingguan kita gunakan:
double  OP=iOpen(Symbol(),PERIOD_W1,0);
if(Ask>OP) aturan buy 
if(Bid<OP)  aturan sell

Nah dari uraian diatas kita gunakan aturan buy sbb

int sigz, sigc;
     if(up>0 )  sigz= 1;
     if(lo>0)    sigz= 5;

    if(Ask>OP)sigc=1;
    if(Bid<OP) sigc=5;

if(sigz+sigc==2) op buy
if(sigz+sigc==10) op sell

Penggunaan angka 1 dan 5 ini sebarang aja intinya untuk memudahkan identifikasi saja , jadi suka-suka saja!

Tambahan lain adalah target Equety  (jika target equety terpenuhi maka EA berhenti trading).

extern double Target_Equety= 1000;

supaya bisa data balance ketika EA di attack ke chart tersimpan maka kita buat dulu data balance yang ditempatkan di bawah int init()


int init()
  {
bal= AccountBalance();
   return(0);
  }


dan untuk menghentikan ketika target terpenuhi maka harus dibuat coding target dibawah int start() , sbb:


   if(Target_Equety<AccountEquity()) {
    closeall(0);
    closeall(1);
   Alert("Cek Target_Equetynya ");
   return(0);
   }

Setelah di coba penampakannya sbb:



Nah silahkan  di rakit sendiri dulu ya !

Monggo di kasih comment dulu!

Belajar Membuat EA Sederhana 18 Martingel


http://jumforex.blogspot.com/2012/10/belajar-membuat-ea-sederhana-18.html

Pastian sudah mengikuti part 17 sebelumnya disiini

Pada pembahasan ali ini kita akan membuat EA yang bertype Martingel , saya rasa banyak penggemar Ea yang berjenis kelaminnya martingel heeeeeeee

Pada Ea martingel yang kita bikin ini hanya mengedit Ea sebelumnya di part 17 dan saya beri nama Jum+Donchian+v2

Seperti biasa dalam Ea martingel ada beberapa parameter tambahan bila dibanding dengan Ea non martingel,  al:

  1. Pengali lot , sering diberi nama multiflier atau multi saja ..... atau dimarti haaa   ya .. suka2 aja yang bikin. 
  2. Jarak antar order , sering diberi nama pips atau range atau apalah suka2
  3. Banyaknya level order, ini merupaan batasan jumlah order masksimum

Nah dari penambahan 3 parameter di atas maka kita akan membuat codingnya

Pengali lot

Ada banyak cara dalam membuat pengali lot order ini , pada bagian ini saya akan menggunakan fungsi matematika MathPow (merupakan fungsi matematika yang digunakan menghitung kelipatan).
Aturannya  MathPow(double value1, double value 2)
value 1 = merupakan bilangan kelipatan
value 2 = bilangan level kelipatan

Jadi dalam hal ini kita gunakan Lots*MathPow(DiMarti,jumlahorder())
dalam hal ini pengali lot kita gunaan DiMarti

Cara lain selain dengan menggunakan MathPow adalah dengan mengalikan order lot terakhir dengan DiMarti 
(lain kali kita bahas)
Nah dalam hal ini saya buat fungsinya sbb:


double xlot(int m)
{
double ylot,dlot;
for (int i = 0; i < OrdersTotal(); i++) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic ||OrderType()!=m) continue;
   dlot=OrderLots();
   }
if(OrderType()==m)ylot=NR(Lots*MathPow(DiMarti,jumlahorder(m)));
return(ylot);
}



Jarak antar order
Jarak antar order ini di hitung dari harga order sebelumnya sering disebut Orderopenprice.
Nah untuk menentukan besaran Orderopenprice pada order terahir perlu dibuat scrip pencacah atau untuk menghitung order openprice terahir
saya gunakan fungsi sbb:

int trad()
{
int type,dp; double opb,ops,lastlotb,lastlots;
for (int i = 0; i < OrdersTotal(); i++) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
   type=OrderType();
if(type==0)opb = OrderOpenPrice();
if(type==1)ops = OrderOpenPrice();
}
   double as = opb - Jarak_order * pt;
   double bi = ops + Jarak_order * pt;
   if ( Ask <= as &&  jumlahorder(0)> 0 ) dp=1; 
if ( Bid >= bi &&  jumlahorder(1)> 0 ) dp=2;

return(dp);
}

Banyaknya level order
Untuk membatasi order maka saya gunakan batasan jumlahorder(0)<Max_order , jumlahorder(1)<Max_order 

Haaa wah udah hampir jadi nih .....

Nah saya aan tambahkan filter candel supaya kalau ada news panjang akan order setiap pergantian candel , dengan memanfaatan wt!=Time[0] seperti pembahasan sebelumnhya.

Terapan tambahan untuk order martingelnya saya buat sbb:


if(trad()==1 && wt!=Time[0] && jumlahorder(1)==0 && jumlahorder(0)<Max_order  && Trade_buy  && signal==2) {OrderSend(Symbol(),OP_BUY,xlot(0),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue); wt=Time[0]; }
if(trad()==2 && wk!=Time[0] && jumlahorder(0)==0 && jumlahorder(1)<Max_order  && Trade_sell && signal==1) {OrderSend(Symbol(),OP_SELL,xlot(1),Bid,3,sls, tps,Nama_EA,Magic,0,Red); wk=Time[0];  }


Dan untuk sedikit melihat info maka saya juga  buatkan fungsi untuk membuat labelnya

void label()
{
Comment("\n ",
"\n ",
"\n ------------------------------------------------",
"\n :: =>+Jum+Donchian+v2<=",
"\n :: =>JumForex.blogspot.com<=",
"\n ------------------------------------------------",
"\n :: Spread                 : ", MarketInfo(Symbol(), MODE_SPREAD),
"\n :: Leverage               : 1 : ", AccountLeverage(),
"\n :: Equity                 : ", AccountEquity(),
"\n :: Jam Server             :", Hour(), ":", Minute(),
"\n ------------------------------------------------",
"\n :: >>By: Jum69<<",
"\n ------------------------------------------------");
}


Sehingga jadinya gini deh


//+------------------------------------------------------------------+
//|                                                 EA Jum+Donchian+ |
//|                                                gifaesa@yahoo.com |
//|                                     http://JumForex.blogspot.com |
//+------------------------------------------------------------------+

#property copyright "JumForex.blogspot.com"
#property link      "Gifaesa@yahoo.com"

extern string  Nama_EA                 = "Jum+Donchian+v2";
extern bool    Trade_buy               = true;
extern bool    Trade_sell              = true;
extern int     Mulai_Jam               = 6;
extern int     Akhir_Jam               = 20;
extern bool    Tp_in_Money             = true;
extern double  TP_in_money             = 10;
extern int     TP                      = 100;
extern int     SL                      = 0;
extern double  Lots                    = 0.1;
extern int     Jarak_order             = 35;
extern int     Max_order               = 10;
extern double  DiMarti                 = 1.3;
extern bool    TrailingStop_           = false;
extern int     TrailingStop            = 20;
extern int     Magic                   = 69;
extern string  Seting_Donchian         = "Sesuka Hati";
extern int     IPeriod                 = 20;

double slb,tpb,sls,tps,pt;
int wt,wk,tiket,ticet;
//+------------------------------------------------------------------+
//| 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()
  {
label();
if(TrailingStop_)dtrailing();
if(Tp_in_Money && TP_in_money<= money()){ 
   closeall(0);
   closeall(1);
   }
//----
 double da = iCustom(Symbol(), 0,"Donchian Bands",IPeriod, 0,0 ) ;// garis atas modenya 0
 double db = iCustom(Symbol(), 0,"Donchian Bands",IPeriod, 1,0 ) ;// garis bawah modenya 1
 double dt = iCustom(Symbol(), 0,"Donchian Bands",IPeriod, 2,0 ) ;// garis tengah modenya 2
int signal;
if(da<Ask) signal=1;// aturan buy
if(db>Bid) 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 && jumlahorder(1)==0  && Trade_buy  && signal==2) {OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue);}
  if(jumlahorder(0)==0 && jumlahorder(1)==0  && Trade_sell && signal==1) {OrderSend(Symbol(),OP_SELL,NR(Lots),Bid,3,sls, tps,Nama_EA,Magic,0,Red);}
 }
if(trad()==1 && wt!=Time[0] && jumlahorder(1)==0 && jumlahorder(0)<Max_order  && Trade_buy  && signal==2) {OrderSend(Symbol(),OP_BUY,xlot(0),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue); wt=Time[0]; }
if(trad()==2 && wk!=Time[0] && jumlahorder(0)==0 && jumlahorder(1)<Max_order  && Trade_sell && signal==1) {OrderSend(Symbol(),OP_SELL,xlot(1),Bid,3,sls, tps,Nama_EA,Magic,0,Red); wk=Time[0];  }

   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);
              }
              }
           }
     }
  
}
void closeall(int m)
{
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber()!=Magic || m!= OrderType()) continue;
if (OrderType() > 1) OrderDelete(OrderTicket());
else {
if (OrderType() == 0) OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE);
else               OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE);
}
}
}
double money()
{
double dp = 0;
int i;
for (i = 0; i < OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol()  || OrderMagicNumber()!=Magic) continue;
dp += OrderProfit();
}
return(dp);
}

int trad()
{
int type,dp; double opb,ops,lastlotb,lastlots;
for (int i = 0; i < OrdersTotal(); i++) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
   type=OrderType();
if(type==0)opb = OrderOpenPrice();
if(type==1)ops = OrderOpenPrice();
}
   double as = opb - Jarak_order * pt;
   double bi = ops + Jarak_order * pt;
   if ( Ask <= as &&  jumlahorder(0)> 0 ) dp=1; 
if ( Bid >= bi &&  jumlahorder(1)> 0 ) dp=2;

return(dp);
}
double xlot(int m)
{
double ylot,dlot;
for (int i = 0; i < OrdersTotal(); i++) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic ||OrderType()!=m) continue;
   dlot=OrderLots();
   }
if(OrderType()==m)ylot=NR(Lots*MathPow(DiMarti,jumlahorder(m)));
return(ylot);
}
void label()
{
Comment("\n ",
"\n ",
"\n ------------------------------------------------",
"\n :: =>+Jum+Donchian+v2<=",
"\n :: =>JumForex.blogspot.com<=",
"\n ------------------------------------------------",
"\n :: Spread                 : ", MarketInfo(Symbol(), MODE_SPREAD),
"\n :: Leverage               : 1 : ", AccountLeverage(),
"\n :: Equity                 : ", AccountEquity(),
"\n :: Jam Server             :", Hour(), ":", Minute(),
"\n ------------------------------------------------",
"\n :: >>By: Jum69<<",
"\n ------------------------------------------------");
}

Sepertinya EA ini udah layak di Coba deh untuk di Beck test  ........

Nah sampai disini monggo dicoba kalao ada manfaat dan pertanyaan silahkan kasih komen ya

Smoga bermanfaat!

Belajar Membuat EA Sederhana 17


http://jumforex.blogspot.com/2012/10/belajar-membuat-ea-sederhana-17.html

Pastikan telah mengikuti di part 16 disini

Nah setelah kita pelajari cara membuat custom  indikator Donchian pada part sebelumnya , maka kita akan coba bikin EAnya dengan indikator tersebut
Yandg belum punya indikator silahkan  download dulu di part 15

Rulenya sbb:
mode trend
Buy : Pada saat harga di atas garis merah atas
Sell : Pada saat harga di bawah garis merah bawah

mode reversal
dan rule di atas di balik

Sehingga di tambahkan
if(Mode_trend){
if(da<Ask) signal=1;// aturan buy
if(db>Bid) signal=2;//aturan sell
}

if(!Mode_trend){
if(da<Ask) signal=2;// aturan sell
if(db>Bid) signal=1;//aturan buy
}
Ini untu mengatur sesuai selera signal mana yang mau digunakan

Untuk EA yang dibikin mengacu pada EA yang telah dibikin sebelumnya



//+------------------------------------------------------------------+
//|                                               EA Jum+Donchian+   |
//|                                                gifaesa@yahoo.com |
//|                                     http://JumForex.blogspot.com |
//+------------------------------------------------------------------+

#property copyright "JumForex.blogspot.com"
#property link      "Gifaesa@yahoo.com"

extern string  Nama_EA                 = "Jum+Donchian+";
extern bool    Trade_buy               = true;
extern bool    Trade_sell              = true;
extern int     Mulai_Jam               = 6;
extern int     Akhir_Jam               = 20;
extern bool    Tp_in_Money             = false;
extern double  TP_in_money             = 2;
extern bool    Mode_trend             = true;
extern int     TP                      = 100;
extern int     SL                      = 500;
extern double  Lots                    = 0.1;
extern bool    TrailingStop_           = true;
extern int     TrailingStop            = 25;
extern int     Magic                   = 69;
extern string  Seting_Donchian         = "Sesuka Hati";
extern int     IPeriod                 = 20;

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()
  {

if(TrailingStop_)dtrailing();
if(Tp_in_Money && TP_in_money<= money()) closeall();
//----
 double da = iCustom(Symbol(), 0,"Donchian Bands",IPeriod, 0,0 ) ;// garis atas modenya 0
 double db = iCustom(Symbol(), 0,"Donchian Bands",IPeriod, 1,0 ) ;// garis bawah modenya 1
 double dt = iCustom(Symbol(), 0,"Donchian Bands",IPeriod, 2,0 ) ;// garis tengah modenya 2
int signal;
if(Mode_trend){
if(da<Ask) signal=1;// aturan buy
if(db>Bid) signal=2;//aturan sell
}

if(!Mode_trend){
if(da<Ask) signal=2;// aturan sell
if(db>Bid) signal=1;//aturan buy
}

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 && jumlahorder(1)==0 && Trade_buy  && signal==1) {OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,slb, tpb,Nama_EA,Magic,0,Blue);}
  if(jumlahorder(0)==0  && 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);
              }
              }
           }
     }

}
void closeall()
{
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber()!=Magic ) continue;
if (OrderType() > 1) OrderDelete(OrderTicket());
else {
if (OrderType() == 0) OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE);
else               OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE);
}
}
}
double money()
{
double dp = 0;
int i;
for (i = 0; i < OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol()  || OrderMagicNumber()!=Magic) continue;
dp += OrderProfit();
}
return(dp);
}

Jadi deh
Mudah2 an dengan gambaran EA di atas akan membuka wawasan bagi trader semuanya

Salam Sukses