下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

显示:
335
等级:
投票: 26
已发布:
2017.06.05 13:42
\MQL5\Include\

如果您在 MetaTrader 中改变了时段或者图表交易品种的名称,所有图表上的指标都将卸载并且会再次载入到其中。和 MT4 不同, 在 MT5 中,载入/卸载的顺序没有确定,这是因为它的内部结构。

这种功能有些时候会引起问题,而并不会被马上发现。这些问题相关的是,新载入指标实例的 OnInit 可能在该实例卸载时的 OnDeinit 之前执行。

发现这种问题的情形,通常是想在旧指标的 OnDeinit 中传输一些信息到新指标实例的 OnInit 中,换句话说,新指标实例应当知道存在旧的指标,并且在旧的实例卸载之前不能载入。

这个库可以使这种同步应用到任何指标中。

这里是一个简单指标的例子

#property indicator_chart_window

#property indicator_buffers 1
#property indicator_plots   1
#property indicator_color1  clrRed
#property indicator_type1   DRAW_LINE

input int Input = 0;

double Buffer[];

int OnInit()
{
  SetIndexBuffer(0, Buffer);
  Print("Init");
  return(INIT_SUCCEEDED);
}

void OnDeinit( const int Reason )
{
  Print("DeInit");
}

void OnChartEvent( const int id,
                   const long& lparam,
                   const double& dparam,
                   const string& sparam )
{
}

void OnTimer()
{
}

int OnCalculate( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[] )
{
  ArrayCopy(Buffer, open, prev_calculated, prev_calculated);  
  return(rates_total);
}

如果您载入这个指标,并且开始在图表中切换时段或者交易品种,"Init"和"Deinit"中的线会被打断,

如果我们在指标代码的开头加入了下面这行,

#include <Init_Sync.mqh> // 同步指标的 Init/Deinit

就可以观察到正常的变化。

为了在想要的指标中应用这种属性,要把上面的结构加到它的代码中。

注意

// 这个库使得指标的 Init/Deinit 同步.
// 指标中必须包含 int OnInit(), OnDeinit, OnTimer 和 OnChartEvent.
// 如果没有使用呢?保留空白。

#include <TypeToBytes.mqh> // https://www.mql5.com/en/code/16280
#include <crc64.mqh>       // https://www.mql5.com/en/blogs/post/683577

在指定的链接中可以找到库中另外所需的 mqh 文件。

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/18138

Color_Spread Color_Spread

本指标使用彩色线显示当前的点差。

Exp_XFatlXSatlCloud Exp_XFatlXSatlCloud

Exp_XFatlXSatlCloud 交易系统是基于 XFatlXSatlCloud 指标显示的趋势改变的。

XMA_BB_Pivot XMA_BB_Pivot

在一个柱的两个布林带通道数值之间画出彩色填充的长方形。

XMA_Keltner_Pivot XMA_Keltner_Pivot

在一个柱的两个Keltner通道数值之间画出彩色填充的长方形。