Autore dell'idea — John Smith, autore del codice MQL5 — barabashkakvn.
L'Expert Advisor è configurato per operare su USDJPY nel timeframe H1.
Questo EA utilizza due Medie Mobili, un MACD e un CCI. La funzione OnTradeTransaction è impiegata per ricevere il tempo di apertura delle posizioni.
Tutti i valori degli indicatori sono presi dalla barra con indice 1.
//--- Impostazione degli Indicatori 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);
Viene effettuato un controllo per verificare se una posizione è già stata aperta sulla barra attuale, evitando così di controllare tutte le posizioni (dato che possono essere in esecuzione altri EA sullo stesso conto di trading).
Il tempo di apertura della posizione viene controllato nella funzione OnTradeTransaction. Se viene registrata la chiusura di una posizione, il tempo di apertura verrà resettato:
//+------------------------------------------------------------------+ //| Funzione TradeTransaction | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- ottieni il tipo di transazione come valore enumerato ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- se la transazione è il risultato dell'aggiunta della transazione nella storia 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; } } } }
Commento 0