Estrategia Camel CCI MACD para MetaTrader 5: Un Asesor Experto para USDJPY

Mike 2017.03.23 01:33 38 0 0
Archivos adjuntos

Autor de la idea — John Smithautor del código MQL5 — barabashkakvn.

Este Asesor Experto está configurado para operar el par USDJPY en el marco de tiempo H1.

El sistema utiliza dos medias móviles, un MACD y un CCI. La función OnTradeTransaction se emplea para recibir el tiempo de apertura de las posiciones.

Todos los valores de los indicadores se toman desde la barra con índice 1.

//--- Configuración del Indicador 
   CAMELHIGHP1=iMAGet(handle_iMA_PRICE_HIGH,1);
   CAMELLOWP1=iMAGet(handle_iMA_PRICE_LOW,1);
//
   MACDSP1=iMACDGet(SIGNAL_LINE,1);
   MACDSP2=iMACDGet(SIGNAL_LINE,2);
//
   MACDHP1=iMACDGet(MAIN_LINE,1);
   MACDHP2=iMACDGet(MAIN_LINE,2);
//
   CCIP1=iCCIGet(1);

Se realiza un control adecuado para verificar si ya se ha abierto una posición en la barra actual, de forma que no sea necesario revisar todas las posiciones (ya que otros Asesores Expertos pueden estar operando en la misma cuenta de trading).

El tiempo de apertura de la posición se controla en OnTradeTransaction. Si se registra el cierre de una posición, se reiniciará el tiempo de apertura:

//+------------------------------------------------------------------+
//| Función TradeTransaction                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obtener el tipo de transacción como valor de enumeración 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- si la transacción es resultado de la adición de la transacción en el historial
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      long     deal_time         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
        {
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            m_last_close_time=(datetime)deal_time;
           }
         else if(deal_entry!=DEAL_ENTRY_OUT)
           {
            m_last_close_time=0;
           }
        }
     }
  }
Lista
Comentarios 0