创意作者 — John Smith,MQL5代码作者 — barabashkakvn。
这款智能交易助手(EA)专为在H1时间框架内交易美元兑日元(USDJPY)而配置。
该EA使用了两条移动平均线、一个MACD和一个CCI指标。在交易过程中,会利用OnTradeTransaction函数来接收开仓时间。
所有指标值均来自于索引为 1 的K线。
//--- 指标设置 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);
在当前K线上会进行适当的控制,以确认是否已开仓,因此无需检查所有仓位(因为同一交易账户可能有其他EA在运行)。
在OnTradeTransaction中控制开仓时间。如果记录到了平仓,将会重置开仓时间:
//+------------------------------------------------------------------+ //| 交易事务函数 | //+------------------------------------------------------------------+ 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