EA Paling Mudah Menggunakan Indikator DeMarker - Panduan untuk MetaTrader 4

Mike 2020.12.17 01:28 48 0 0
Lampiran

Pernahkah anda terfikir untuk menggunakan EA (Robot Perdagangan) dalam trading anda? Saya juga pernah terfikir dan hari ini saya ingin berkongsi EA paling mudah yang pernah saya gunakan. Selepas membaca, sila beri penilaian tentang EA ini ya!

EA ini berfungsi untuk satu pasangan mata wang sahaja. Semua tetapan seperti jangka masa, lot, stop loss dan take profit boleh dimasukkan melalui menu sifat.


externENUM_TIMEFRAMES TF  = PERIOD_CURRENT;// Pilih Jangka Masaexternint period          = 8;// Tempoh DeMarkerexterndouble lt           = 0.01;// Lotexternint sl              = 100;// Stop Lossexternint tp              = 100;// Take Profitexterndouble OB           = 0.7;// Terlampau Jualexterndouble OS           = 0.3;// Terlampau Beliexternbool OPENBAR        = false;// Berdagang pada harga buka bar baru

Ini rahsianya, saya bahagikan kepada 3 bahagian pembolehubah:
1. data | jangka masa
2. pesanan
3. pasangan

//+------------------------------------------------------------------+//-- jangka masa|indikatordouble dmrk[5];
int signal  =-1;//-- 0.beli 1.jualint hold = 0;


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



//-- pasangandatetime t1=0;
bool newbar=false;
bool entry =false;


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

Dalam fungsi OnInit(), saya perlu menginisialisasi pembolehubah array indikator DeMarker dan juga memeriksa ukuran lot minimum untuk keperluan broker tertentu.

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

Dalam fungsi OnTick(), ini adalah untuk mengira indikator dan menentukan isyarat beli dan jual.

//---------------------------------------------------------------------------
   signal = -1;
//---------------------------------------------------------------------------//---kira
   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 isyarat 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 menutup...

   if(entry == true) // tutup
     {

      if(OrderSelect(ticket,SELECT_BY_TICKET))
      {
         if(OrderCloseTime() == 0)//-- pesanan aktif
           {
            /*  todo syarat untuk tutup  */
            //entry = false;
           }
         //else
            if(OrderCloseTime() != 0)//--  ditutup oleh 1. manual 2. sl/tp 3. ea
              {
               entry = false;//reset entry
              }
        }
     }




Senarai
Komen 0