De Eenvoudigste Expert Advisor met DeMarker Indicator voor MetaTrader 4

Mike 2020.12.17 01:28 51 0 0
Bijlage

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.


externENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Selecteer tijdsframeexternint period = 8;// Periode DeMarkerexterndouble lt = 0.01;// Lotsexternint sl = 100;// Stop Lossexternint tp = 100;// Take Profitexterndouble OB = 0.7;// Over Verkochtexterndouble OS = 0.3;// Over Gekochtexternbool 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|indicatordouble dmrk[5];
int signal = -1;//-- 0.koop 1.verkoopint hold = 0;

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

//-- paardatetime 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.

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

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] 1;//instellen
        }
      else
        {
         hold = 0;//resetten
        }

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

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



Lijst
Reactie 0