Inicio Trading Sistemático Publicación

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

Archivos adjuntos
32418.zip (1.46 KB, Descargar 0 veces)

¡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.


extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// Seleccionar el marco temporal
extern int period = 8;// Periodo DeMarker
extern double lt = 0.01;// Lotes
extern int sl = 100;// Stop Loss
extern int tp = 100;// Take Profit
extern double OB = 0.7;// Sobrevendido
extern double OS = 0.3;// Sobrecomprado
extern bool 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 | indicador
double dmrk[5];
int signal = -1;//-- 0.comprar 1.vender
int hold = 0;

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

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

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

           }

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!

Publicaciones relacionadas

Comentarios (0)