请观看如何免费下载自动交易
请在Facebook上找到我们!
加入我们粉丝页
有趣的脚本?
因此发布一个链接 -
让其他人评价
喜欢这个脚本? 在MetaTrader 5客户端尝试它
显示:
1595
等级:
(14)
已发布:
2018.04.27 10:37
\MQL5\Signal\ \MQL5\Experts\
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务

这个函数库是 SignalMAAboveBelow 2 的进一步开发。


版本 3 中的 新功能。

  • CurrentBarSize 参数允许设置当前柱线的大小 (计算为 Close-Open);
  • PreviousBarSize 是前一根柱线的大小 (以 Close-Open 计算)。

如果当前柱线的价格高于指标,那么两根柱线都必须是看涨。 如果当前柱线的价格低于指标,那么两根柱线都必须是看跌。 因此,这两个参数 (CurrentBarSizePreviousBarSize) 是开仓时的保护性过滤器。

在信号模块中,我们需要 在构造函数中连接时间序列:

//+------------------------------------------------------------------+
//| 构造函数                                                          |
//+------------------------------------------------------------------+
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_closem_open 对象,它们分别对应 CiCloseCiOpen 类 (对象声明在更高级别 - 在父类级别 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 时的开仓例子:

SignalMAAboveBelow 3 开多头仓位

图例 1. SignalMAAboveBelow 3 - 开多头仓位

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

VSI VSI

VSI - 波动率切换指标。

IDayIIndex IDayIIndex

IDayIIndex (日内强度指数) 振荡指标。

Alexav SpeedUp M1 Alexav SpeedUp M1

同时打开两个相对的位置。 尾随停止。

Cross_Line_Trader Cross_Line_Trader

当价格穿过指标线对象时,智能交易系统将开仓。