创意作者 — Vladimir Khlystov,MQL5代码作者 — barabashkakvn.
这款交易系统的策略是突破选定时间区间的高点或低点。当市场出现亏损时,EA会采用“Nevalyashka”策略和马丁格尔技术来增加手数。
EA会在指定的时间区间内计算高点和低点,从 “开始时间” 到 “结束时间”:

如果价格超过这个时间区间的高点,则会开一个买入(BUY)仓位;如果价格低于低点,则会开一个卖出(SELL)仓位。止损(StopLoss)会设置在相应的区间边界,即买入仓位在低点,卖出仓位在高点。止盈(TakeProfit)则根据控制区间的高度进行设置。
如果设置了 使用关闭时间 为真,那么 关闭时间 参数(关闭所有仓位的时间)将会生效。
在参数 “开始时间”、“结束时间” 和 “关闭时间” 中,仅考虑小时和分钟。
止损的执行由 OnTradeTransaction 监控。
当找到 “DEAL_ENTRY_OUT” (即“退出”)时,检查该交易的评论字段。如果 评论中包含“sl”,则表示该交易是由止损关闭的:
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { MqlDateTime str1; TimeToStruct(TimeCurrent(),str1); //--- 可能是止盈的关闭 if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0) { TradeDey=str1.day; return; } //--- 可能是止损的关闭 if(StringFind(deal_comment,"sl",0)!=-1) { if(TradeDey!=str1.day) { Print("检测到止损关闭!"); double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume); if(deal_type==DEAL_TYPE_SELL) // 卖出仓位被关闭 { double SL=m_symbol.Bid()+loss*m_symbol.Point(); double TP=m_symbol.Bid()-loss*m_symbol.Point(); double Lot=LotCheck(deal_volume*InpK_martin); if(Lot==0.0) return; OpenSell(SL,TP,Lot,"Nevalyashka"); if(deal_type==DEAL_TYPE_BUY) // 买入仓位被关闭 { double SL=m_symbol.Ask()-loss*m_symbol.Point(); double TP=m_symbol.Ask()+loss*m_symbol.Point(); double Lot=LotCheck(deal_volume*InpK_martin); if(Lot==0.0) return; OpenBuy(SL,TP,Lot,"Nevalyashka"); } return; } } }
在关闭的仓位对面开一个新的仓位(如果交易类型是“DEAL_TYPE_SELL”,那么关闭的是买入仓位;而“DEAL_TYPE_BUY”表示关闭的是卖出仓位),并且手数增加,乘以 K. martin。如果仓位关闭时盈利,EA将等待下一个时间区间的开始时间 “结束时间”,然后重复上述操作。
“无损” 参数表示盈亏平衡;当仓位利润达到一半时,止损会调整到开仓价格。
例如在 EURUSD,M30 上测试:


评论 0