Home Trading Sistematico Post

Strategie di Trading con il Camel CCI e MACD su MetaTrader 5

Allegato
17841.zip (4.12 KB, Scarica 0 volte)

Autore dell'ideaJohn Smith, autore del codice MQL5barabashkakvn.

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;
           }
        }
     }
  }

Post correlati

Commento (0)