Home Systeemhandel Bericht

De Eenvoudigste Expert Advisor met DeMarker Indicator voor MetaTrader 4

Bijlage
32418.zip (1.46 KB, Downloaden 0 keer)

Heb je ooit nagedacht over het gebruik van een Expert Advisor (EA) voor jouw trading? Ik heb dat gedaan, en ik wil mijn ervaring delen over de eenvoudigste EA die ik ooit heb gehad. Neem even de tijd om het te lezen en laat me weten wat je ervan vindt!

Deze EA is specifiek ontworpen voor één valutapaar. In de instellingen kun je eenvoudig de tijdsinstelling, lotgrootte, stop loss en take profit aanpassen.


extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Selecteer tijdsframe
extern int period = 8;// Periode DeMarker
extern double lt = 0.01;// Lots
extern int sl = 100;// Stop Loss
extern int tp = 100;// Take Profit
extern double OB = 0.7;// Over Verkocht
extern double OS = 0.3;// Over Gekocht
extern bool OPENBAR = false;// Handel op nieuwe bar open prijs

Het geheim? Ik heb de variabelen verdeeld in drie delen:
1. gegevens | tijdsframe
2. order
3. paar

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

//-- tijdsframe|indicator
double dmrk[5];
int signal = -1;//-- 0.koop 1.verkoop
int hold = 0;

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

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

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

In de functie OnInit() initialiseert de EA de DeMarker-indicator en controleert het de minimale lotgrootte op basis van de vereisten van de specifieke broker.

//+------------------------------------------------------------------+
//|                                                                            |
//+------------------------------------------------------------------+
void OnInit()
  {
   ArrayInitialize(dmrk,0.0);
  //---
      const double test_lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
      if(lt < test_lot) lt = test_lot;
  }

In de OnTick() functie berekent de EA de indicator en bepaalt het koop- en verkoopsignalen.

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

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

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

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

Om een koop- of verkoopsignaal te openen...

//---------------------------------------------------------------------------
   if(signal != -1)
      if(newbar == true)
         if(entry == false)//deur open
           {
            //---
            entry = true;//instellen
            //---

            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
              }//reset signal

          }

En voor het sluiten van de posities...

   if(entry == true) // sluiten
     {

      if(OrderSelect(ticket, SELECT_BY_TICKET))
        {
         if(OrderCloseTime() == 0)//-- order actieve trade
           {
            /*  todo voorwaarde om te sluiten  */
            //entry = false;
           }
         //else
            if(OrderCloseTime() != 0)//--  sluiten door 1. handmatig 2. sl/tp 3. ea
              {
               entry = false;//reset entry
              }
        }
     }



Gerelateerde berichten

Reactie (0)