(五)Functions 函数

 

 
Functions  函数
 
函数是部分程序的一个名称,它可以在需要时从任何一个部分调用。 它是由定义分类返回值,名称,形式参量和合成运算符组成并执行的。通过的总数被限定在 64 个字符之内。
示例:
double // 被返回值的类型
linfunc (double x, double a, double b) // 函数名称和参量列表
{
// 合成运算符
return (a + b); // 返回值
}
“返回”运算符可以返回在这个运算符内表达式的值。如果需要,此表达式值可以转换为函数结果类型。函数没有返回的值必定是“省缺” 类型。
示例:
void errmesg(string s)
{
Print(“错误: “+s);
}
通过函数的参量可能存在由特定类型常数指定的默认值。
示例:
int somefunc(double a, double d=0.0001, int n=5, bool b=true, string s=”passed string”)
{
Print(“需求参量 a=”,a);
Print(“下列参量被传送: d=”,d,” n=”,n,” b=”,b,” s=”,s);
return (0);
}
如果此默认值指定一个参量,那么所有的参量也必须存在默认值。
错误范例:
int somefunc(double a, double d=0.0001, int n, bool b, string s=”passed string”)
{
}
Function call  函数调用
 
如果显示的文件没有描述, 它将考虑上下文的联系作为函数名称。
函数名称 (x1, x2,…, xn)
自变数(形式参量) 以值的形式通过。 计算每一个表达式 xl, . . . , xn 并将其值发送到函数。表达式计算命令值是被保证的。在执行系统测试数字和自变数类型期间会给出函数。 这种形式的函数调用被称作调用值。调用函数是一个通过函数返回的表达式的值。 描述函数类型必须相应类型返回的值。 全球范围内程序的任何一个部分函数是被公布或描述的, 即其他函数之外。在另外函数里,函数不能被公布或描述。
例如:
int start()
{
double some_array[4]={0.3, 1.4, 2.5, 3.6};
double a=linfunc(some_array, 10.5, 8);
//…
}
double linfunc(double x[], double a, double b)
{
return (a*x[0] + b);
}
函数的调用是默认参量,通过参量的列表是被限定的,但不是之前的第一默认参量。
例如:
void somefunc(double init,double sec=0.0001,int level=10); // function prototype
somefunc(); // 错误调用, 第一请求参量必须存在。
somefunc(3.14); // 正确调用
somefunc(3.14, 0.0002); // 正确调用
somefunc(3.14, 0.0002, 10); // 正确调用
当我们调用一个函数时,不可以忽略参量,存在默认值:
somefunc(3.14, , 10); // 错误调用。第二参量被忽略。
Special functions  特殊函数
 
在 MQL4 中存在三种预定义名称函数:
init() 在载入时调用,可以用此函数在开始自定义指标或者自动交易之前做初始化操作。start() 是基本函数。对于智能交易,在下一个价格变动进入之后被调用。对于客户指标,在指标添加到图表之后,客户端开始(如果指标添加到图表)并且下一个价格变动进入之后,函数被调用。对于脚本,在脚本被添加到图表之后立即执行并初始化。如果在模板中不存在start()函数,模板 (智能交易,脚本或客户指标) 不能开启。
deinit() 当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行预定义函数需要一些参量。不过,当这些参量被客户端调用时,外部没有参量提供。 start(),init()和 deinit()函数从模板的任何一点按照常规调用,等于其他函数。
不建议从 init()函数调用 start()函数或是执行交易业务,作为图表数据,市场开价格。模板的初始化会出现残缺。这时,init() 和 deinit() 函数必须尽可能结束运行。在调用 start()函数之前,尝试重新全面开启运行。
Variables  变量
 
可变量必须在公开之前使用。 可变量必须拥有特殊的辨认名。相关可变量的定义描述会显
示。
基本类型如下:
布尔数据 -布尔值的 true 和 false;
字串符数据 – 特殊字符串;
双精度数字 – 带有浮点双精度数字。
示例:
string MessageBox;
int Orders;
double SymbolPrice;
bool bLog;
附加类型:
颜色 为整数代表 RGB 颜色;
日期时间 为日期和时间, 起始时间从 1979 年 1 月上午 0.00 开始以秒数计算。
添加数据类型在输入参量的属性窗口方便查看。
示例:
datetime tBegin_Data = D’2004.01.01 00:00′;
color cModify_Color = C’0x44,0xB9,0xE6′;
数组
相同数列数据被标注序列。
int a[50]; // 50 整数的一维数组
double m[7][50]; // 7 个数组的二维数组
//每一个由 50 个整数组成。
唯一整数可以是 数组指数。 不允许四唯数列。数组元素开始编号为 0 。 一个一维列阵的
最后元素是 1 的数字比列阵大小。这就意味着, 请求数列的最后元素包括 50 个整数将出现
作为 a[49 ] 。 维度被标注从 0 到维度大小-1. 一个二维数组的最后元素从示例将出现作为m[6][49 ] 。
如 果 访 问 超 出 数 列 范 围 ,  执 行 系 统 将 发 生 错 误 可 能 生 成 错 误
ERR_ARRAY_INDEX_OUT_OF_RANGE,在 GetLastError()函数中可以得到。
Local variables  局部变量
 
在任意的地方内可变量的公开是局部的。局部变量在公开的部分里是被限定的。 局部变量可以由任意一个表示结果初始化。 每次函数的运行只可以初始化一个局部变量。局部变量储存在相应的存储器上。
示例:
int somefunc()
{
int ret_code=0;
….
return(ret_code);
}
Formal parameters  形式变量
 
通过函数的变量 是局部的。范围是在作用块内。在作用之内正式变量的名称必须不同于其
他外部定义变量和函数变量。 作用块内的正式变量值已经被赋予。
示例:
void func(int x[], double y, bool z)
{
if(y>0.0 && !z)
Print(x[0]);
}
正式参量可能由常数初始化。在这种情况下, 初始化的值作为缺省值被考虑。参量, 在旁边
(intialized) , 必须初始化。
示例:
void func(int x, double y = 0.0, bool z = true)
{
}
这样作用显现时, 初始化的参量可能被省去, 缺省值会代替它们。
示例:
func(123, 0.5);
MQL4 资料库功能在外部函数变量 模块之内无法有默认值初始化。
参量值通过。在任何情况下,变量里布局的修改将不会显示在功能板块内。 它是可以通过数列作为参量。但是, 为了数列可以作为变量,需要改变它的数列元素。它是还可能通过参量参考。在这种情况下, 修改的这样参量将被显示在对应的变量。 数组元素无法参考通过。参量可能只在一个模块参考通过, 数据库不提供。
示例:
void func(int& x, double& y, double& z[])
{
double calculated_tp;

for(int i=0; i<orderstotal(); i++)<=”” div=””>

{
if(i==ArraySize(z)) break;
if(OrderSelect(i)==false) break;
z[i]=OrderOpenPrice();
}
x=i;
y=calculated_tp;
}
数组可以通过参考通过, 全部改变会在数列来源内显示。 不同于简单的参量, 数组可以进
入数据库…
以缺省值参量通过无法初始化。
最大参量不可以超过 64 个。
Static variables  静态变量
 
“静止” 记忆被称作静态变量。在数据类型之前指定成分”静止” 被公开。
示例:
int somefunc()
{
static int flag=10;
….
return(flag);
}
静态变量被存放在永久记忆里,在函数退出后静态变量不会丢失。所有在同一板块内(除正
式变量作用外) ,可能作为静止变量定义。 静态变量可以由相对应的类型常数初始化。 与
局部变量不同。如果没有明确地初始化, 静态变量初始化以零。 静态变量在”init()” 函数之
前只可应用一次。
Global variables  全局变量
整体变量作为函数被定义在相同水平,即,不可以局部使用。
示例:
int GlobalFlag=10; // 整体变量
int start()
{
}
整体变量的范围是整个程序。 整体变量在所有程序内是被定义的。 如果它的值没有被定义,初始化值为零。 整体变量只对于相应的常数初始化。 整体变量只可以在 init()函数操作之前一次性初始化。
注解: 变量在整体变量的水平位上不能够与客户端 GlobalVariable…() 函数混淆。
Defining extern variables  外部定义变量
 
外部定义的可变量。 在数据类型公布之前指定外部变量。
示例:
extern double InputParameter1 = 1.0;
extern color InputParameter2 = red;
int init()
{
}
确定从外部程序输入的变量, 会直接显现输入数据窗口。数列本身不能作为外部变量。
Initialization of variables  初始化变量
 
任何情况定义可变物可以初始化。 如果它的原始值未被限定, 任何可变物初始化为零(0)。 整体变量和静态变量的初始化由相应的常数进行。
整体变量和静态变量只能一次性初始化。局部变量的初始化与相应的调动进行。
示例:
int n = 1;
double p = MarketInfo(Symbol(),MODE_POINT);
string s = “hello”;
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int a[4][4] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 };
数组元素值列表必须被附寄在括号内。初始化省去的值被考虑为零。 如果初始化的数组大小不被定义, 它将由编译器定义 。 多维数组由一个一维序列, 即序列初始化没有另外的括号。所有数列, 只能以常数初始化。
External functions definition  外部函数的定义
 
类型外在作用被定义在程序的其它组分必须明确地被描述。 缺乏这样定义也许导致错误在程序期间的编辑、联结, 或施行。当描述一个外在对象, 主题词进口必须被使用以在模块的参考。
示例:
#import “user32.dll”
int MessageBoxA(int hWnd ,string szText,string szCaption,int nType);
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import “lib.ex4”
double round(double value);
#import
进口可能被使用容易地描述作用叫从外在 DLLs 或编写 EX4 图书馆。
尖对可变物可能通过对进口的 dll 作用。串类型的数据 被通过作为尖对对应的记忆块(你应
该记住串数据的内部表示法包括二份: 记忆块长度和记忆阻拦尖) 。如果有需要通过数据内
部或双重型, 那么对应的型的一维一些应该参考通过作为参量。
示例:
#import “some_lib.dll”
void PassIntegerByref(int& OneInt[]);
#import
int start()
{
int array[1];
//…
PassIntegerByref(array);
Print(array[0]);
//…
}

</orderstotal();>

 
Functions  函数
 
函数是部分程序的一个名称,它可以在需要时从任何一个部分调用。 它是由定义分类返回值,名称,形式参量和合成运算符组成并执行的。通过的总数被限定在 64 个字符之内。
示例:
double // 被返回值的类型
linfunc (double x, double a, double b) // 函数名称和参量列表
{
// 合成运算符
return (a + b); // 返回值
}
“返回”运算符可以返回在这个运算符内表达式的值。如果需要,此表达式值可以转换为函数结果类型。函数没有返回的值必定是“省缺” 类型。
示例:
void errmesg(string s)
{
Print(“错误: “+s);
}
通过函数的参量可能存在由特定类型常数指定的默认值。
示例:
int somefunc(double a, double d=0.0001, int n=5, bool b=true, string s=”passed string”)
{
Print(“需求参量 a=”,a);
Print(“下列参量被传送: d=”,d,” n=”,n,” b=”,b,” s=”,s);
return (0);
}
如果此默认值指定一个参量,那么所有的参量也必须存在默认值。
错误范例:
int somefunc(double a, double d=0.0001, int n, bool b, string s=”passed string”)
{
}
Function call  函数调用
 
如果显示的文件没有描述, 它将考虑上下文的联系作为函数名称。
函数名称 (x1, x2,…, xn)
自变数(形式参量) 以值的形式通过。 计算每一个表达式 xl, . . . , xn 并将其值发送到函数。表达式计算命令值是被保证的。在执行系统测试数字和自变数类型期间会给出函数。 这种形式的函数调用被称作调用值。调用函数是一个通过函数返回的表达式的值。 描述函数类型必须相应类型返回的值。 全球范围内程序的任何一个部分函数是被公布或描述的, 即其他函数之外。在另外函数里,函数不能被公布或描述。
例如:
int start()
{
double some_array[4]={0.3, 1.4, 2.5, 3.6};
double a=linfunc(some_array, 10.5, 8);
//…
}
double linfunc(double x[], double a, double b)
{
return (a*x[0] + b);
}
函数的调用是默认参量,通过参量的列表是被限定的,但不是之前的第一默认参量。
例如:
void somefunc(double init,double sec=0.0001,int level=10); // function prototype
somefunc(); // 错误调用, 第一请求参量必须存在。
somefunc(3.14); // 正确调用
somefunc(3.14, 0.0002); // 正确调用
somefunc(3.14, 0.0002, 10); // 正确调用
当我们调用一个函数时,不可以忽略参量,存在默认值:
somefunc(3.14, , 10); // 错误调用。第二参量被忽略。
Special functions  特殊函数
 
在 MQL4 中存在三种预定义名称函数:
init() 在载入时调用,可以用此函数在开始自定义指标或者自动交易之前做初始化操作。start() 是基本函数。对于智能交易,在下一个价格变动进入之后被调用。对于客户指标,在指标添加到图表之后,客户端开始(如果指标添加到图表)并且下一个价格变动进入之后,函数被调用。对于脚本,在脚本被添加到图表之后立即执行并初始化。如果在模板中不存在start()函数,模板 (智能交易,脚本或客户指标) 不能开启。
deinit() 当数据变动时触发,对于自定义指标或者自动交易的编程主要依靠此函数进行预定义函数需要一些参量。不过,当这些参量被客户端调用时,外部没有参量提供。 start(),init()和 deinit()函数从模板的任何一点按照常规调用,等于其他函数。
不建议从 init()函数调用 start()函数或是执行交易业务,作为图表数据,市场开价格。模板的初始化会出现残缺。这时,init() 和 deinit() 函数必须尽可能结束运行。在调用 start()函数之前,尝试重新全面开启运行。
Variables  变量
 
可变量必须在公开之前使用。 可变量必须拥有特殊的辨认名。相关可变量的定义描述会显
示。
基本类型如下:
布尔数据 -布尔值的 true 和 false;
字串符数据 – 特殊字符串;
双精度数字 – 带有浮点双精度数字。
示例:
string MessageBox;
int Orders;
double SymbolPrice;
bool bLog;
附加类型:
颜色 为整数代表 RGB 颜色;
日期时间 为日期和时间, 起始时间从 1979 年 1 月上午 0.00 开始以秒数计算。
添加数据类型在输入参量的属性窗口方便查看。
示例:
datetime tBegin_Data = D’2004.01.01 00:00′;
color cModify_Color = C’0x44,0xB9,0xE6′;
数组
相同数列数据被标注序列。
int a[50]; // 50 整数的一维数组
double m[7][50]; // 7 个数组的二维数组
//每一个由 50 个整数组成。
唯一整数可以是 数组指数。 不允许四唯数列。数组元素开始编号为 0 。 一个一维列阵的
最后元素是 1 的数字比列阵大小。这就意味着, 请求数列的最后元素包括 50 个整数将出现
作为 a[49 ] 。 维度被标注从 0 到维度大小-1. 一个二维数组的最后元素从示例将出现作为m[6][49 ] 。
如 果 访 问 超 出 数 列 范 围 ,  执 行 系 统 将 发 生 错 误 可 能 生 成 错 误
ERR_ARRAY_INDEX_OUT_OF_RANGE,在 GetLastError()函数中可以得到。
Local variables  局部变量
 
在任意的地方内可变量的公开是局部的。局部变量在公开的部分里是被限定的。 局部变量可以由任意一个表示结果初始化。 每次函数的运行只可以初始化一个局部变量。局部变量储存在相应的存储器上。
示例:
int somefunc()
{
int ret_code=0;
….
return(ret_code);
}
Formal parameters  形式变量
 
通过函数的变量 是局部的。范围是在作用块内。在作用之内正式变量的名称必须不同于其
他外部定义变量和函数变量。 作用块内的正式变量值已经被赋予。
示例:
void func(int x[], double y, bool z)
{
if(y>0.0 && !z)
Print(x[0]);
}
正式参量可能由常数初始化。在这种情况下, 初始化的值作为缺省值被考虑。参量, 在旁边
(intialized) , 必须初始化。
示例:
void func(int x, double y = 0.0, bool z = true)
{
}
这样作用显现时, 初始化的参量可能被省去, 缺省值会代替它们。
示例:
func(123, 0.5);
MQL4 资料库功能在外部函数变量 模块之内无法有默认值初始化。
参量值通过。在任何情况下,变量里布局的修改将不会显示在功能板块内。 它是可以通过数列作为参量。但是, 为了数列可以作为变量,需要改变它的数列元素。它是还可能通过参量参考。在这种情况下, 修改的这样参量将被显示在对应的变量。 数组元素无法参考通过。参量可能只在一个模块参考通过, 数据库不提供。
示例:
void func(int& x, double& y, double& z[])
{
double calculated_tp;

for(int i=0; i<orderstotal(); i++)<=”” div=””>

{
if(i==ArraySize(z)) break;
if(OrderSelect(i)==false) break;
z[i]=OrderOpenPrice();
}
x=i;
y=calculated_tp;
}
数组可以通过参考通过, 全部改变会在数列来源内显示。 不同于简单的参量, 数组可以进
入数据库…
以缺省值参量通过无法初始化。
最大参量不可以超过 64 个。
Static variables  静态变量
 
“静止” 记忆被称作静态变量。在数据类型之前指定成分”静止” 被公开。
示例:
int somefunc()
{
static int flag=10;
….
return(flag);
}
静态变量被存放在永久记忆里,在函数退出后静态变量不会丢失。所有在同一板块内(除正
式变量作用外) ,可能作为静止变量定义。 静态变量可以由相对应的类型常数初始化。 与
局部变量不同。如果没有明确地初始化, 静态变量初始化以零。 静态变量在”init()” 函数之
前只可应用一次。
Global variables  全局变量
整体变量作为函数被定义在相同水平,即,不可以局部使用。
示例:
int GlobalFlag=10; // 整体变量
int start()
{
}
整体变量的范围是整个程序。 整体变量在所有程序内是被定义的。 如果它的值没有被定义,初始化值为零。 整体变量只对于相应的常数初始化。 整体变量只可以在 init()函数操作之前一次性初始化。
注解: 变量在整体变量的水平位上不能够与客户端 GlobalVariable…() 函数混淆。
Defining extern variables  外部定义变量
 
外部定义的可变量。 在数据类型公布之前指定外部变量。
示例:
extern double InputParameter1 = 1.0;
extern color InputParameter2 = red;
int init()
{
}
确定从外部程序输入的变量, 会直接显现输入数据窗口。数列本身不能作为外部变量。
Initialization of variables  初始化变量
 
任何情况定义可变物可以初始化。 如果它的原始值未被限定, 任何可变物初始化为零(0)。 整体变量和静态变量的初始化由相应的常数进行。
整体变量和静态变量只能一次性初始化。局部变量的初始化与相应的调动进行。
示例:
int n = 1;
double p = MarketInfo(Symbol(),MODE_POINT);
string s = “hello”;
double f[] = { 0.0, 0.236, 0.382, 0.5, 0.618, 1.0 };
int a[4][4] = { 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 };
数组元素值列表必须被附寄在括号内。初始化省去的值被考虑为零。 如果初始化的数组大小不被定义, 它将由编译器定义 。 多维数组由一个一维序列, 即序列初始化没有另外的括号。所有数列, 只能以常数初始化。
External functions definition  外部函数的定义
 
类型外在作用被定义在程序的其它组分必须明确地被描述。 缺乏这样定义也许导致错误在程序期间的编辑、联结, 或施行。当描述一个外在对象, 主题词进口必须被使用以在模块的参考。
示例:
#import “user32.dll”
int MessageBoxA(int hWnd ,string szText,string szCaption,int nType);
int SendMessageA(int hWnd,int Msg,int wParam,int lParam);
#import “lib.ex4”
double round(double value);
#import
进口可能被使用容易地描述作用叫从外在 DLLs 或编写 EX4 图书馆。
尖对可变物可能通过对进口的 dll 作用。串类型的数据 被通过作为尖对对应的记忆块(你应
该记住串数据的内部表示法包括二份: 记忆块长度和记忆阻拦尖) 。如果有需要通过数据内
部或双重型, 那么对应的型的一维一些应该参考通过作为参量。
示例:
#import “some_lib.dll”
void PassIntegerByref(int& OneInt[]);
#import
int start()
{
int array[1];
//…
PassIntegerByref(array);
Print(array[0]);
//…
}

</orderstotal();>

風險提示

MyFxtops邁投所列信息僅供參考,不構成投資建議,也不代表任何形式的推薦或者誘導行為。MyFxtops邁投非外匯經紀商,不接觸妳的任何資金。 MYFXTOPS不保證客戶盈利,不承擔任何責任。從事外彙和差價合約等金融產品的槓桿交易具有高風險,損失有可能超過本金,請量力而行,入市前需充分了解潛在的風險。過去的交易成績並不代表以後的交易成績。依據各地區法律法規,MyFxtops邁投不向中國大陸、美國、加拿大、朝鮮居民提供服務。

邁投公眾號

聯繫我們

客服QQ:981617007
Email: service@myfxtop.com

MyFxtops 邁投