程序结构
其中特殊函数被客户端调用执行,内建函数与用户自定义函数被程序调用执行。这意味着一个程序代码必须写在函数内,否则将不会被被执行。
Tick 是在某一时刻到来的、针对某一货币对的、市场新的报价事件。Ticks
是从远处服务器传到本机客户端的。
Control 控制是指程序内部的代码流程,及其与客户端宿主平台MT4的交互。
一、MQL4 程序由以下几大部分组成:
1.头部
2.特别函数 init()
3.特别函数 start()
4.特别函数 deinit()
5.用户自定义函数
二、可能的排列顺序:
禁止在一个函数中对另一个函数进行描述。
三、代码的执行顺序:
Header part:
1.关于程序的基本信息
2.全局变量的声明与初始化
Special function init (
):
1.全局变量初始化
2.绘图对象输出
3.信息显示
Special function start (
):
1.根据信息环境进行必要计算
2.交易请求打开、关闭和修改
Special function deinit (
):
删除没必要的绘图对象和全局变量
User defined function(
):
四、特殊函数的特性:
init(
):
1.EA中:
a.MT4启动并装入历史数据之后
b.更换货币对之后
c.更换K线图时间周期之后
d.程序重新编译之后
e.改变EA设置参数之后
f.变更用户账号之后
2.指标中:
a.MT4启动之后
b.更换货币对之后
c.更换K线图时间周期之后
d.程序重新编译之后
e.改变EA设置参数之后
3.脚本中:
置入主窗口之后
stat(
):
1.EA中:
新报价(tick)到来之后
在start(
)执行时,有新报价到来时,则其被忽略不进行处理。
当自动交易关闭状态时,start( )不能被调用执行。
当属性窗口打开时,start(
)不能被调用执行。
2.指标中:
a.新报价(tick)到来之后
b.置入主窗口之后
c.改变窗口大小之后
d.更换货币对之后
e.更换K线图时间周期之后
3.脚本中:
一次性调用执行,是在脚本由init()初始化之后。
deinit(
):
客户端调用它的原因是:MT4关闭、主窗关闭、更换货币对、改变K线周期、程序重新编译、改变输入参数、改变用户账号等。
函数deinit()执行限于2.5秒内完成,若超时则被系统强行终止。
1.EA中:
a.EA程序被关闭时
b.新的同类程序置入主窗时
2.指标中:
在新指标加入主窗时,不会调用deinit(
)。
3.脚本中:
a.脚本程序被关闭时
b.新的同类程序置入主窗时
五、函数描述与调用:
函数描述:
1.函数头:返回值的类型、函数名、形式参数列表
2.函数体:简单操作符、复合操作符、调用其他函数
函数调用:
函数名、传递参数列表
函数类型区别:
函数类型
|
函数描述
|
函数调用
|
特殊函数
|
适用的
|
不适用(*)
|
内建函数
|
不适用
|
适用的
|
用户自定义函数
|
适用的
|
适用的
|
(*)在技术上虽然特殊功能可以从一个程序,不建议这么做。
六、形式参数、传递参数和返回值:
形式参数:
1.形式参数数量不超过64个
2.只能是变量
3.可以通过相应的常数定义默认值
传递参数:
1.传递参数数量不超过64个
2.传递参数的数量、类型、顺序必须与调用函数中的形式参数相匹配
3.只有变量、表达式、常数可以作为参数传递
4.调用函数形式参数存在默认参数值的传递参数可以被跳过
5.可以指定一个空列表(括号必须存在)
返回值:
1.必须匹配函数给出的函数头类型
2.返回的表达式可以是变量、常数、函数调用
3.可以返回void类型(无括号)
七、案例分析:
int start()
{
int n;
int T=15;
for(int i=Func_yes_ret(T);i<=10;i++)
{
n=n+1;
Alert ("n=",n," i=",i);
}
return;
}
//--------------------------------------------------------------------
int Func_yes_ret (int Times_in)
{
datetime T_cur=TimeCurrent();
if(TimeHour(T_cur) > Times_in)
return(1);
return(5);
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。