诚信为本
量力而为
当前位置:峰汇在线 ea编程知识 正文

MQL语言中input与extern用法的不同之处

在用MQL语言编写技术指标或者开发智能交易EA程序时,一般都会用到输入变量。在声明变量及其所用修饰符时,通常会用到 input 与 extern,那么这两个在实际用法上的不同之处是什么呢?

在MQL语言中,关键字 extern 用来声明变量标识符,作为全局使用期的静态存储标识符。input 输入修饰符变量不可以在程序中修改,只能只读访问这个变量,用户只能通过程序属性窗口改变输入变量值。

上面是官方对 extern 与 input 给出的说明。从说明中,可以看出最重要的一点, input 声明的输入变量只能通过程序属性窗口改变输入变量值,而不可以在程序中修改。这也就是它和 extern 的主要不同之处。extern 可以通过程序属性窗口改变输入变量值,也可以在程序中修改。

下面分别用 input 与 extern 来声明 lots 和 lotsa 两个手数变量,

input  double lots  = 0.01;
extern double lotsa = 0.01;

现在假设有一种EA策略需要将开仓手数限制在 10 手或以下,那么用下面代码限制:

  if(lots > 10) lots = 10;//如果lots大于10,则lots等于10;
  if(lotsa > 10) lotsa = 10;//如果lotsa大于10,则lotsa等于10; 

下面编译下程序,看看有什么反映。

input与extern用法的不同之处

从上面图片中可以看出,用 extern 声明的 lotsa 就可以正常运行。而用 input 声明的 lots 就出现报错,提示“’lots’ – constant cannot be modified”,中文意思:’lot’ – 常数不能被修改。

总结起来也很简单,如果智能交易EA或者技术指标的变量只需要在属性输入框中赋值或修改,那就用 input;如果变量需要在程序中修改或者根据条件赋予新的值,那就用 extern;如果一定要用input 的话,那就再单独定义个变量(如上图中所示的lots_1),定义好后在OnInit()初始化函数中执行它等于 input 定义的变量,在程序中用单独定义个变量(lots_1) 就可以。

版权所有转载请注明标题及链接:峰汇在线 » MQL语言中input与extern用法的不同之处