EA Sencillo con el Indicador DeMarker para MetaTrader 4: Tu Asesor Experto

Mike 2020.12.17 01:28 74 0 0
Archivos adjuntos

¡Hola, traders! Hoy quiero compartir con ustedes un Asesor Experto (EA) muy sencillo que he estado usando en mis operaciones. Este EA, que utiliza el indicador DeMarker, es el más simple que he tenido, así que después de leerlo, no duden en dejar su valoración.

Este EA está diseñado para operar en un solo par de divisas. Las configuraciones como el marco temporal, lotes, stop loss y take profit se pueden ajustar desde el menú de propiedades.


externENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Seleccionar el marco temporalexternint period = 8;// Periodo DeMarkerexterndouble lt = 0.01;// Lotesexternint sl = 100;// Stop Lossexternint tp = 100;// Take Profitexterndouble OB = 0.7;// Sobrevendidoexterndouble OS = 0.3;// Sobrecompradoexternbool OPENBAR = false;// Operar en el precio de apertura de la nueva barra

Aquí está el truco: divido las variables en tres partes:

  • Datos | Marco Temporal
  • Orden
  • Par
//+------------------------------------------------------------------+//-- marco temporal | indicadordouble dmrk[5];
int signal = -1;//-- 0.comprar 1.venderint hold = 0;

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

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

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

En la función OnInit(), inicializo la variable del array del indicador DeMarker y verifico el tamaño mínimo de lote de trading según los requisitos de mi bróker.

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

En la función OnTick(), calculo el indicador y determino las señales de compra y venta.

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

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

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

Para abrir una señal de compra o venta...

//---------------------------------------------------------------------------
   if(signal != -1)
      if(newbar == true)
         if(entry == false)// puerta abierta
           {
            //---
            entry = true;// establecer
            //---

            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
            elseif(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

           }

Y para el cierre...

   if(entry == true) // cierre
     {
      if(OrderSelect(ticket, SELECT_BY_TICKET))
        {
         if(OrderCloseTime() == 0)//-- orden activa
           {
            /*  todo condición para cerrar  */
            //entry = false;
           }
         //else
            if(OrderCloseTime() != 0)//-- cierre por 1. manual 2. sl/tp 3. ea
              {
              entry = false;//reiniciar entrada
              }
        }
    }



¡Espero que este EA les sea útil y que puedan implementarlo en su trading! No olviden dejar sus comentarios y compartir sus experiencias. ¡Éxitos en sus operaciones!

Lista
Comentarios 0