EA Sederhana Menggunakan Indikator DeMarker untuk MetaTrader 4

Mike 2020.12.17 01:28 99 0 0
Lampiran

Pernahkah kamu berpikir untuk menggunakan EA (Expert Advisor) dalam trading? Saya juga! Di sini, saya akan berbagi tentang EA sederhana yang saya gunakan, dan ini adalah yang paling mudah yang pernah saya buat. Setelah membaca, jangan lupa untuk memberikan penilaian, ya!

EA ini bekerja pada satu pasangan mata uang saja. Kamu bisa mengatur periode waktu, lot, stop loss, dan take profit melalui menu properti yang tersedia.


externENUM_TIMEFRAMES TF  = PERIOD_CURRENT;// Pilih Time Frame
externint period          = 8;// Periode DeMarker
externdouble lt           = 0.01;// Lot
externint sl              = 100;// Stop Loss
externint tp              = 100;// Take Profit
externdouble OB           = 0.7;// Over Sold
externdouble OS           = 0.3;// Over Bought
externbool OPENBAR        = false;// Trading di harga open bar baru

Berikut adalah rahasianya, saya membagi variabel ini menjadi 3 bagian:
1. Data | Timeframe
2. Order
3. Pair

//+------------------------------------------------------------------+
//-- time frame|indicator
double dmrk[5];
int signal  =-1;//-- 0.buy 1.sell
int hold = 0;

//-- order
int ticket  =0;
double lot  =0.0;
int typ     =-1;

//-- pair
datetime t1=0;
bool newbar=false;
bool entry =false;

//+------------------------------------------------------------------+

Di fungsi OnInit(), saya harus menginisialisasi array variabel indikator DeMarker dan juga memeriksa ukuran lot minimum untuk jenis broker tertentu.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
voidOnInit()
  {
   ArrayInitialize(dmrk,0.0);
  //---
      constdouble test_lot   = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
      if(lt<test_lot)   lt    = test_lot;
  }

Di fungsi OnTick(), saya menghitung indikator dan menentukan sinyal beli dan jual.

//---------------------------------------------------------------------------
   signal = -1;
//---------------------------------------------------------------------------

//---calc
   for(int i=0; i<ArraySize(dmrk); i++)
     {
      dmrk[i]  =  iDeMarker(Symbol(),TF,period,i);
     }
//---

   if(dmrk[1] > OB)
     {
      hold = 1;//set
     }
   else
      if(dmrk[1] < OS)
        {
         hold = -1;//set
        }
      else
        {
         hold = 0;//reset
        }

   if(hold ==  1)
     {
      if(dmrk[0]<OB && dmrk[1]>OB)
        {
         signal = OP_SELL;
        }
     }
   if(hold == -1)
     {
      if(dmrk[0]>OS && dmrk[1]<OS)
        {
         signal = OP_BUY;
        }
     }

Untuk membuka sinyal beli dan jual...

//---------------------------------------------------------------------------
   if(signal != -1)
      if(newbar==true)
         if(entry==false)//pintu terbuka
           {
            //---
            entry =true;//set
            //---

            if(signal == OP_BUY)
              {
               ticket = OrderSend(Symbol(),OP_BUY,lt,Ask,(int)((Ask-Bid)/Point,
                                   sl>0?Bid-sl*Point:0.0,
                                   tp>0?Bid+tp*Point:0.0,
                                  EAName+":signal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold),
                                  EANumber,
                                  0,
                                  clrBlue);
               signal=-1;
               //hold =0;
              }//reset
            else
               if(signal == OP_SELL)
                 {
                  ticket = OrderSend(Symbol(),OP_SELL,lt,Bid,(int)((Ask-Bid)/Point,
                                     sl>0?Ask+sl*Point:0.0,
                                     tp>0?Ask-tp*Point:0.0,
                                     EAName+":signal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold),
                                  EANumber,
                                   0,
                                   clrRed);
                  signal=-1;
                  //hold =0;
                     }//reset signal

             }


Dan untuk penutupan...

   if(entry == true) // penutupan
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET))
        {
         if(OrderCloseTime() == 0)//-- order masih aktif
           {
            /*  todo kondisi untuk menutup  */
            //entry = false;
           }
         //else
            if(OrderCloseTime() != 0)//--  close by 1. manual 2. sl/tp 3. ea
              {
               entry = false;//reset entry
              }
        }
     }

  



Daftar
Komentar 0