Trading Sistemático 게시글

EA de DeMarker en MT4 – Estrategia de Trading Automático Sencilla

첨부파일
32418.zip (1.46 KB, 다운로드 0회)

En el mundo del trading, utilizar un sistema de trading automatizado puede ser un gran aliado. Hoy quiero compartir con ustedes un EA (sistema de trading automático) que he desarrollado utilizando el indicador DeMarker, el cual es uno de los más simples que he creado. Estoy ansioso por recibir sus comentarios después de que lo prueben.

Este EA está diseñado para operar en un solo par de divisas. En el menú de propiedades, se pueden ajustar todos los parámetros funcionales, como el marco temporal, el número de lotes, el stop loss y el take profit.


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;// Trading en el precio de apertura de nueva barra

Aquí está el secreto: divido las variables en 3 partes:

  • Datos | Marco temporal
  • Órdenes
  • Par de divisas
//+------------------------------------------------------------------+
//-- 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 de array del indicador DeMarker y también verifico el tamaño mínimo de lotes para cumplir con los requisitos específicos del corredor.

//+------------------------------------------------------------------+
//|                                                                    |
//+------------------------------------------------------------------+
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(), realizo los cálculos del 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;
              }//reiniciar
              }//reiniciar señal

           }

Y para el cierre...

   if(entry == true) // cierre
     {
      if(OrderSelect(ticket, SELECT_BY_TICKET))
        {
         if(OrderCloseTime() == 0)//-- orden de comercio activa
           {
            /*  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 esta guía sobre el uso del EA con el indicador DeMarker en MT4 les sea útil para mejorar su estrategia de trading automatizado. No duden en dejar sus comentarios y experiencias tras utilizar esta herramienta.

연관 포스트

댓글 (0)