通过指标句柄获取指标设置
有时,MQL 程序需要获取运行中指标实例的参数。这些指标可以是图表上的第三方指标,也可以是从主程序传递到 库 或头文件的句柄。为此,MQL5 提供了 IndicatorParameters函数。
int IndicatorParameters(int handle, ENUM_INDICATOR &type, MqlParam ¶ms[])
该函数通过指定句柄返回指标输入参数数量及其类型和值。
成功时,该函数将填充传入的 params数组,并将指标类型保存在 type 参数中。
如果出现错误,该函数将返回 -1。
作为使用该函数的示例,我们将改进 删除指标实例章节中展示的UseDemoAllLoop.mq5 指标。新版本命名为 UseDemoAllParams.mq5。
你应该还记得,我们曾在循环中依次创建列表中的内置指标,并将参数列表留空,这导致指标使用某些未知的默认值。为此,我们曾在图表注释中显示一个通用原型:仅包含指标名称,而没有具体参数值。
// UseDemoAllLoop.mq5
|
现在,我们可以基于指标句柄获取其参数并向用户显示。
// UseDemoAllParams.mq5
|
将 MqlParam数组转换为字符串的功能通过 MqlParamStringer 特殊类实现(请参阅文件 MqlParamStringer.mqh)。
class MqlParamStringer
|
编译并运行新指标后,你会发现当前渲染指标的特定参数列表显示在图表左上角。
对于列表中的单个自定义指标 (LifeCycle),第一个参数将包含指标的路径和文件名。第二个参数在源代码中被描述为整数类型。但第三个参数有点不同,它隐式定义了所有使用简化版OnCalculate处理程序的指标所共有的“Apply to”特性。在此处,指标默认应用于 PRICE_CLOSE(值 1)。
Initializing LifeCycle() EURUSD, PERIOD_H1 Handle=10 [type] [integer_value] [double_value] [string_value] [0] 14 0 0.00000 "Indicators\MQL5Book\p5\LifeCycle.ex5" [1] 7 0 0.00000 null [2] 7 1 0.00000 null Initializing iAlligator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price() EURUSD, PERIOD_H1 iAlligator_jawP_jawS_teethP_teethS_lipsP_lipsS_method_price requires 8 parameters, 0 given Handle=10 [type] [integer_value] [double_value] [string_value] [0] 7 13 0.00000 null [1] 7 8 0.00000 null [2] 7 8 0.00000 null [3] 7 5 0.00000 null [4] 7 5 0.00000 null [5] 7 3 0.00000 null [6] 7 2 0.00000 null [7] 7 5 0.00000 null Initializing iAMA_period_fast_slow_shift_price() EURUSD, PERIOD_H1 iAMA_period_fast_slow_shift_price requires 5 parameters, 0 given Handle=10 [type] [integer_value] [double_value] [string_value] [0] 7 9 0.00000 null [1] 7 2 0.00000 null [2] 7 30 0.00000 null [3] 7 0 0.00000 null [4] 7 1 0.00000 null
|
根据日志记录,内置指标的设置也与默认值相符。