在编写MQL4交易策略时,理解和灵活运用函数参数的传递方式(Passing Parameters)是至关重要的。本文将详细介绍MQL4中两种函数参数的传递方式:值传递和引用传递,并通过具体示例来揭示这两种方式的工作原理和使用场景。
值传递
当我们通过值传递参数时,参数的副本被传递给函数。这意味着,在函数内部对参数所做的任何更改都不会影响到调用函数时使用的原始数据。
示例:
double FirstMethod(int i,int j)
{
double res;
i *= 2;
j /= 2;
res = i + j;
return(res);
}
void OnStart()
{
int a = 14, b = 8;
Print("a and b before call:", a, " ", b);
double d = FirstMethod(a, b);
Print("a and b after call:", a, " ", b);
}
执行结果:
a and b before call: 14 8
a and b after call: 14 8
可以看到,函数内部对i
和j
的修改并没有影响到原始变量a
和b
的值。
引用传递
与值传递不同,引用传递是将参数的引用(而非其值)传递给函数。因此,在函数内部对参数的任何更改都会影响到原始数据。
示例:
double SecondMethod(int &i, int &j)
{
double res;
i *= 2;
j /= 2;
res = i + j;
return(res);
}
void OnStart()
{
int a = 14, b = 8;
Print("a and b before call:", a, " ", b);
double d = SecondMethod(a, b);
Print("a and b after call:", a, " ", b);
}
执行结果:
a and b before call: 14 8
a and b after call: 28 4
与值传递不同,引用传递使得a
和b
的值在函数调用后发生了变化。
参数的计算顺序
值得注意的是,在MQL4中,参数是以逆序传递给函数的。即首先计算并传递最后一个参数,然后是倒数第二个,依此类推。
示例:
void OnStart()
{
int a[] = {0, 1, 2};
int i = 0;
func(a[i], a[i++], "First call (i = " + string(i) + ")");
func(a[i++], a[i], "Second call (i = " + string(i) + ")");
}
void func(int par1, int par2, string comment)
{
Print(comment, ": par1 = ", par1, " par2 = ", par2);
}
执行结果:
First call (i = 0) : par1 = 1 par2 = 0
Second call (i = 1) : par1 = 1 par2 = 1
总结,掌握MQL4中的值传递和引用传递对于编写高效和可靠的交易策略至关重要。值传递适用于不希望函数修改原始数据的场景,而引用传递则允许函数直接操作原始数据。理解参数的计算和传递顺序也是编写正确代码的关键。在开发交易策略时,要根据具体需求选择合适的参数传递方式。