Senin, 24 Desember 2012

Belajar Membuat EA Sederhana 9


http://jumforex.blogspot.com/2012/08/belajar-membuat-ea-sederhana-9.html

Di part 8 kita sudah banyak membahas tentang filter penggunaan EA di broker 5 digits

Kali ini kita akan membahas tentang flter lots.
Kegunaannya ini untuk mencegah terjadinya error yang di sebabkan oleh parameter lots yang tidak sesuai

Di pembahasan sebelumnya kita sudah banyak membahas juga tentang penggunaan scrip secara langsung dan juga bisa menggunakn fungsi. Jada pada dasar setiap trader dalam menuangkan kode program itu punya gaya sendiri , dan tidak mesti sama setiap orang .

Nah untuk menambahkan   filter lots ini saya akan berbagi script dalam bentuk fungsi yang selama ini saya gunakan, sbb:

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);
}

Penggunaannya bagaimana?

Pada EA yang telah kita buat di part sebelumnya kita ambil bagian yang ada hubungannya dengan pengaturaun lots yaitu  Lots dan kita tambahkan menjadi  NR(Lots)

Sehingga sebelumnya
if(Jam_trade()==1){
  if(jumlahorder(0)==0 && Trade_buy) {OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-SL*Point, Ask+TP*Point,Nama_EA,Magic,0,Blue);}
  if(jumlahorder(1)==0 && Trade_sell) {OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+SL*Point, Bid-TP*Point,Nama_EA,Magic,0,Red);}
 }

Menjadi:

if(Jam_trade()==1){
  if(jumlahorder(0)==0 && Trade_buy) {OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,Ask-SL*Point, Ask+TP*Point,Nama_EA,Magic,0,Blue);}
  if(jumlahorder(1)==0 && Trade_sell) {OrderSend(Symbol(),OP_SELL,NR(Lots),Bid,3,Bid+SL*Point, Bid-TP*Point,Nama_EA,Magic,0,Red);}
 }


Dari penamahan script diatas maka bila terjadi kekeliruan pengisian parameter lots maka EA tetap akan melakukan eksekuri order dan tidak error.
Bila pengisian lotsnya salah dan terlalu kecil maka EA tetap melakukan order dengan menggunakan lots terkecil yang di ijin ka oleh broker, dan juga bila di gunakan pada penggunaan lots yang salah tetap akan order sesuai kektentuan broker , dengan tambahan filter ini maka akan terhindar dari error yang disebabkan oleh kesaalan penggunaan lots

Kita masukkan ke dalam EA sebelumnya jadinya


//+------------------------------------------------------------------+
//|                                                     Buy Saja.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern string  Nama_EA                 = "Buy dan Sell";
extern bool    Trade_buy               = true;
extern bool    Trade_sell              = true;
extern int     Mulai_Jam               = 22;
extern int     Akhir_Jam               = 4;
extern int     TP                      = 11;
extern int     SL                      = 100;
extern double  Lots                    = 0.1;
extern int     Magic                   = 69;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----


if(Jam_trade()==1){
  if(jumlahorder(0)==0 && Trade_buy) {OrderSend(Symbol(),OP_BUY,NR(Lots),Ask,3,Ask-SL*Point, Ask+TP*Point,Nama_EA,Magic,0,Blue);}
  if(jumlahorder(1)==0 && Trade_sell) {OrderSend(Symbol(),OP_SELL,NR(Lots),Bid,3,Bid+SL*Point, Bid-TP*Point,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);
}


Oke bro sampai di sini dulu ketemu pada part 10 dalam pembahasan yang berbeda


Salam Profit







Tidak ada komentar:

Posting Komentar