- 显示:
- 1680
- 等级:
- 已发布:
- 2018.04.27 10:37
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
这个函数库是 SignalMAAboveBelow 2 的进一步开发。
版本 3 中的 新功能。
- CurrentBarSize 参数允许设置当前柱线的大小 (计算为 Close-Open);
- PreviousBarSize 是前一根柱线的大小 (以 Close-Open 计算)。
如果当前柱线的价格高于指标,那么两根柱线都必须是看涨。 如果当前柱线的价格低于指标,那么两根柱线都必须是看跌。 因此,这两个参数 (CurrentBarSize 和 PreviousBarSize) 是开仓时的保护性过滤器。
在信号模块中,我们需要 在构造函数中连接时间序列:
//+------------------------------------------------------------------+ //| 构造函数 | //+------------------------------------------------------------------+ CSignalMA::CSignalMA(void) : m_reverse(false), m_ma_period(12), m_ma_shift(0), m_ma_method(MODE_SMA), m_ma_applied(PRICE_CLOSE), m_pattern_0(80), m_size_current_bar(40), m_size_previous_bar(20) { //--- 保护数据的初始化 m_used_series=USE_SERIES_OPEN+USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE; }
连接时间序列后, 我们可以访问 m_close 和 m_open 对象,它们分别对应 CiClose 和 CiOpen 类 (对象声明在更高级别 - 在父类级别 ExpertBase.mqh)。
我们在 CSignalMA::LongCondition 中处理这些对象
//+------------------------------------------------------------------+ //| "投票" 价格将会增长。 | //+------------------------------------------------------------------+ int CSignalMA::LongCondition(void) { if(m_type_trade==1) // m_type_trade: 交易枚举类型: 0 -> 买入, 1 -> 卖出, 2 -> 买入和卖出 return(0); int result=0; int idx =StartIndex(); //--- if(m_close.GetData(idx+1)-m_open.GetData(idx+1)<m_previous_bar_size*PriceLevelUnit()) return(0); if(m_close.GetData(idx)-m_open.GetData(idx)<m_current_bar_size*PriceLevelUnit()) return(0); //--- 在第一根柱线上分析持仓与收盘价格和指标的关系
и в CSignalMA::ShortCondition
//+------------------------------------------------------------------+ //| "投票" 价格将会下跌。 | //+------------------------------------------------------------------+ int CSignalMA::ShortCondition(void) { //--- m_type_trade: 交易枚举类型: 0 -> 买入, 1 -> 卖出, 2 -> 买入和卖出 if(m_type_trade==0) return(0); int result=0; int idx=StartIndex(); //--- if(m_open.GetData(idx+1)-m_close.GetData(idx+1)<m_previous_bar_size*PriceLevelUnit()) return(0); if(m_open.GetData(idx)-m_close.GetData(idx)<m_current_bar_size*PriceLevelUnit()) return(0); //--- 在第一根柱线上分析持仓与收盘价格和指标的关系
当 Reverse == false 时的开仓例子:
图例 1. SignalMAAboveBelow 3 - 开多头仓位
图例 2. SignalMAAboveBelow 3 - 开空头仓位
信号模块的参数
- Reverse - 反转信号标志;
- PeriodMA - 移动均线指标的均化周期;
- Shift - 移动均线指标的水平偏移;
- Method - 移动均线指标的平滑类型;
- Applied - 计算移动平均的价格类型;
- TypeOfTrade - 交易信号类型: 0 → 买入, 1 → 卖出, 2 → 买入和卖出;
- CurrentBarSize - 当前柱线的大小 (计算为 Close-Open);
- PreviousBarSize - 前一根柱线的大小 (计算为 Close-Open);
测试智能交易系统 TestSignalMAAboveBelow3.mq5,默认参数,未执行优化。
如果智能交易系统 TestSignalMAAboveBelow3.mq5 在 MQL5 向导里生成
//+------------------------------------------------------------------+ //| 输入 | //+------------------------------------------------------------------+ //--- 智能系统的输入 input string Expert_Title ="TestSignalMAAboveBelow3"; // 文档 ulong Expert_MagicNumber =20884; // bool Expert_EveryTick =false; // //--- 主信号的输入
我们启用 ON EVERY TICK 操作 (将默认的 "false" 更改为 "true"),我们可以获得更有趣的结果: EA 将会更快地处理当前柱线 (索引为 #0 的柱线) 等于或稍大于 CurrentBarSize 参数时的条件。
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/20164