MetaTrader5
Proffessor v3 - MetaTrader 5的交易专家
创意作者: vitalyMQL5代码作者: barabashkakvn这个交易策略非常简单。我们通过设置一个待处理的止损订单来保护买入或卖出头寸,距离为 Delta 1。接着,我们会在距离为 Delta 2 的位置创建一个由限价单或止损单组成的网格。每个方向的待处理订单数量由最大行数(Max Lines)决定。通过一个统一的 PendingOrder 函数来设置待处理订单(买入限价单、卖出限价单、买入止损单和卖出止损单),该函数接收待处理订单类型(order_type)、交易量(volume)、止损(sl)和获利(tp)等参数。//+------------------------------------------------------------------+
//| 待处理订单 |
//+------------------------------------------------------------------+
void PendingOrder(ENUM_ORDER_TYPE order_type,double volume,double price,double sl,double tp)
{
sl=m_symbol.NormalizePrice(sl);
tp=m_symbol.NormalizePrice(tp);
if(m_trade.OrderOpen(m_symbol.Name(),order_type,volume,0.0,
m_symbol.NormalizePrice(price),m_symbol.NormalizePrice(sl),m_symbol.NormalizePrice(tp)))
{
if(m_trade.ResultOrder()==0)
{
Print("#1 ",EnumToString(order_type)," -> false. 结果代码: ",m_trade.ResultRetcode(),
", 结果描述: ",m_trade.ResultRetcodeDescription());
PrintResultTrade(m_trade,m_symbol);
}
else
{
Print("#2 ",EnumToString(order_type)," -> true. 结果代码: ",m_trade.ResultRetcode(),
", 结果描述: ",m_trade.ResultRetcodeDescription());
PrintResultTrade(m_trade,m_symbol);
}
}
else
{
Print("#3 ",EnumToString(order_type)," -> false. 结果代码: ",m_trade.ResultRetcode(),
", 结果描述: ",m_trade.ResultRetcodeDescription());
PrintResultTrade(m_trade,m_symbol);
}
//---
}当达到 获利平仓 目标时,关闭所有头寸并移除所有待处理订单。如果亏损超过 亏损平仓 (如果设置 亏损平仓 为 0.0,参数将失效),也可以关闭所有头寸并删除待处理订单。EA的操作(开仓及设置保护性待处理订单)将在工作时间区间内进行,从 开始时间 到 结束时间(开始时间 可以小于 结束时间 或超过它)。主要思路分析 工作时间框 的ADX值。如果ADX低于40,就被视为盘整状态,此时会放置限价单。否则,使用止损单;如果DI+高于DI-,则买入,否则卖出。两个参数的最佳优化结果(当前条ADX 从0到2,步长为1,以及工作时间框 从M1到H1)EURUSD,当前条ADX 0,工作时间框 H1USDJPY,当前条ADX 2,工作时间框 M1在EURUSD情况下,当前条ADX 0,工作时间框 H1,但亏损平仓参数设置为 "0.0"以及USDJPY,当前条ADX 2,工作时间框 M1,但亏损平仓参数设置为 "0.0"
2018.10.26