アイデアの著者 — John Smith, MQL5コードの著者 — barabashkakvn.
このEAは、H1タイムフレームでUSDJPYをトレードするように設定されています。
このEAは、2つの移動平均、1つのMACD、1つのCCIを使用します。また、OnTradeTransactionを利用してポジションのオープン時間を取得します。
すべてのインジケーター値は、インデックスが 1 のバーから取得されます。
//--- インジケーターの設定 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);
適切なコントロールが行われ、現在のバーでポジションがすでにオープンしているかどうかが確認されます。これにより、すべてのポジションをチェックする必要がありません(他のEAが同じ口座で実行されている可能性があるため)。
ポジションのオープン時間はOnTradeTransaction内で制御されます。ポジションがクローズされた場合、オープン時間はリセットされます:
//+------------------------------------------------------------------+ //| TradeTransaction関数 | //+------------------------------------------------------------------+ void OnTradeTransaction(const MqlTradeTransaction &trans, const MqlTradeRequest &request, const MqlTradeResult &result) { //--- トランザクションタイプを列挙値として取得 ENUM_TRADE_TRANSACTION_TYPE type=trans.type; //--- トランザクションが履歴に追加された結果の場合 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; } } } }
コメント 0