Autor de la idea — John Smith, autor 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; } } } }
Comentarios 0