Laman utama Perdagangan Sistem Siaran

EA Paling Mudah Menggunakan Indikator DeMarker - Panduan untuk MetaTrader 4

Lampiran
32418.zip (1.46 KB, Muat turun 0 kali)

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.


extern ENUM_TIMEFRAMES TF  = PERIOD_CURRENT;// Pilih Jangka Masa
extern int period          = 8;// Tempoh DeMarker
extern double lt           = 0.01;// Lot
extern int sl              = 100;// Stop Loss
extern int tp              = 100;// Take Profit
extern double OB           = 0.7;// Terlampau Jual
extern double OS           = 0.3;// Terlampau Beli
extern bool 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|indikator
double dmrk[5];
int signal  =-1;//-- 0.beli 1.jual
int hold = 0;


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



//-- pasangan
datetime 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.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   ArrayInitialize(dmrk,0.0);
  //---
      const double 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
              }
        }
     }




Siaran berkaitan

Komen (0)