不管是用mql4语言还是用mlq5语言编写智能交易EA系统,return 语句都是常用的。要用一个词总结return 语句的作用,那就是“返回”。
返回什么呢?概括的说分返回计算结果、返回条件真假及返回操作符终止当前函数操作等。下面分别举例来说明。
return 语句终止操作退出函数
如果在一个void()函数中遇到带有某种条件的 return 语句,那么程序将会直接返回退出所在的整个函数,不再往下执行任何语句。当然,它不影响EA中的其它函数。
例一:比如在EA的主函数 void OnTick()函数中,如果我们需要账户资金满足一万美金才交易,那么可以用以下条件加return 语句来实现:
void OnTick()
{
if(AccountBalance()<10000)return;
//ea运行交易
}
if(AccountBalance()<10000)return; 这段代码的意思是:如果账户余额小于一万美金,就直接返回,退出void OnTick()函数。不再执行 void OnTick()函数中 return语句以下其它语句。
这里需要注意一点:void OnTick()函数是EA的最新主函数,在它当中用return语句,是不需要带什么值的,直接满足或不满做什么条件执行return就行。在EA的老函数 int start()中return 语句是要带一个值的,通常是return(0)。
如果在一个函数内的for()循环或者其它循环内遇到return 语句,同样是跳到所在函数的退出处,不再执行return 语句下面的其它语句。
return 语句返回计算结果
在自定义int,double,datetime等类型的函数中,return 语句返回计算结果。
比如要获取20SMA移动平均线的值,可以创建如下自定义函数:
double ma_20(int i)
{
return(iMA(Symbol(),0,20, 0,MODE_SMA,PRICE_CLOSE, i));
}
在ma_20(int i)函数中,return语句的作用就是返回20sm均线的具体数值。
再比如我们要根据账户资金来计算EA的开仓手数,可以创建自定义手数函数,代码示例如下:
double Lots_r()
{
double lots =0;
if(AccountBalance()<1000)lots =0.01;
if(AccountBalance() < 2000 && AccountBalance() >= 1000)lots =0.02;
if(AccountBalance() < 3000 && AccountBalance() >= 2000)lots =0.03;
if(AccountBalance() >= 3000)lots =0.04;
return(lots);
}
在Lots_r()函数中,return(lots) 语句就是返回了根据比较账户余额计算出来的手数值。
return 语句返回条件真假
其实这和上面一条是同类的。在bool类型的函数中,return 语句返回结果的真假。也就是true和false。
比如我们比较K线为阳线来开多单,那么可以创建最简单自定义函数来获取K线是否为阳线。代码示例如下:
bool tr_sin(int i)
{
bool trsin = false;
if(Close[i]>Open[i])trsin = true; else trsin = false;
return(trsin);
}
在tr_sin(int i)函数中,return 语句返回的就是一种条件比较的结果。如果tr_sin(1)返回的是true,那么说明上一根蜡烛就是阳线。
当然,return 语句在编程语言中具体的作用还是要看具体的环境来决定的。本文所说的也只是 return 语句在外汇EA编程中最基本及最常见的用法。