Senin, 24 Desember 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 !

1 komentar:

  1. gan bagaimana caranya agar kita bisa memfilter pending order dengan mengecek nilai price pada pending order tersebut..

    saya udah coba" pake orderopenprice tapi ga jalan kyknya..

    misalnya ada sellstop pada harga 1.3350
    lalu kita ingin mengecek apakah harga pending order tersebut sama dengan nilai candle Open[2]

    lalu misalnya harga 1.3350 tidak sama dengan Open[2]

    saya ingin melakukan perintah..
    jika tidak sama -> saya ingin menghapus sellstop yang harganya 1.3350..
    lalu saya membuat sellstop baru lagi pada harga Close[1]

    mohon bantuan gan

    BalasHapus