Nevalyashka_BreakdownLevel - MetaTrader 5EA
- 发布者:
- Vladimir Karputov
- 显示:
- 2127
- 等级:
- 已发布:
- 2017.08.18 11:05
- 需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
思路的作者 — Vladimir Khlystov, MQL5 代码的作者 — barabashkakvn.
交易策略: 在所选时间间隔内最高价/最低价的突破。为了恢复亏损的仓位,本EA交易使用了 "Nevalyashka" 策略和马丁格尔技术来增加手数。
本EA交易在指定时间间隔,从"Time start(开始时间)" 到 "Time end(结束时间)"之间计算最高价和最低价:
如果价格超过了这个时间段的最高价,就建立买入仓位,如果价格低于最低价,就建立卖出仓位。止损设在这个期间反向的边界上,也就是说,对于买入仓位就是最低价,而对于卖出仓位就是最高价。获利是根据控制区间的高度来设置的,
如果 "Use time close" 设为 true, the "Time close" 参数 (关闭所有仓位的时间) 就被激活。
对于"Time start", "Time end" 和 "Time close" 这些参数,只考虑小时数和分钟数。
根据止损平仓是在 OnTradeTransaction 中监控的.
当 "DEAL_ENTRY_OUT" (en: "出场") 被找到时,检查交易的注释栏位,如果 注释中包含 "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) // the buy position is closed { 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交易就会等到下个时间段的开始时间 "Time end", 然后再重复上面的过程.
"No loss" 参数是指要盈亏平衡; 当达到了仓位利润的一半时,止损要移动到仓位的开盘价格处。
在 EURUSD,M30 上的测试例子:
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/18645