预处理程序
预处理程序是一个特殊MQL4的子程序,在程序执行之前预先准备的程序源代码。
预处理程序会尽可能地读取源代码。代码的结构可能包括MQL4程序源代码的特殊文件。对于读取的代码尽可能地按照具体常数分配储存。
预处理程序允许MQL4程序参量指定。
如果#标志被使用在程序的第一线,这条线是预处理程序方针。预处理程序方向末端以换行字符结尾。
MQL4包括4种预处理程序:
Constantdeclaration
用#define定义常数可以在程序中指定货币对字串符并且定义货币对名称或货币对常数。稍候,编辑器会按照相应的字串符名称还原所有显示。事实上,这些名称可以由任意数组文本替换:
#defineidentifiervalue
此常数识别符符合变量名称的规则值可以是以下任意类型:
#defineABC100
#definePI0.314
#defineCOMPANY_NAME"MetaQuotesSoftwareCorp."
...
voidShowCopyright()
{
Print("版权所有?2001-2007,",COMPANY_NAME);
Print("http://www.metaquotes.net");
}
Controllingcompilation
每个MQL4程序允添加以#property名称特殊的参量来帮助客户端服务。这是一个内设指标。
#property识别值
常数 类型 描述 link string 公司网站的相关连接 copyright string 公司名称 stacksize int 栈式储存器大小 library ? 资料库;查看任何可出现的功能错误 indicator_chart_window void 在图表窗口显示指标 indicator_separate_window void 在指定窗口显示指标 indicator_buffers int 对于指标计算的数字,最大为8 indicator_minimum double 在指标窗口下端 indicator_maximum double 在指标窗口的上端 indicator_colorN color 在1和8之间显示线的颜色 indicator_widthN int 在1和8之间显示线的宽度 indicator_styleN int 在1和8之间显示线的风格 indicator_levelN double 在客户指标窗口1和8之间N的水平 indicator_levelcolor color 水平线颜色 indicator_levelwidth int 水平线宽度 indicator_levelstyle int 水平线风格 show_confirm void 在脚本运行之前显示确认 show_inputs void 在脚本运行之前显示它的属性和确认
示例:
#propertylink"http://www.metaquotes.net"
#propertycopyright"MetaQuotesSoftwareCorp."
#propertylibrary
#propertystacksize1024
在执行模板设定时,编译器将会写入值。
Includingoffiles#include命令可以放置到程序的任意部分,但是通常所有文件的源代码被统一放置。调用格式;
#include
#include"file_name";
示例:
#include
#include"mylib.mqh"
对于WinUser32.mqh.文件内容预处理程序还原线。三角括号表示WinUser32.mqh文件将会从默认目录调用(通常默认目录terminal_directory\experts\include)。不需要搜索当前目录。
如果载开盘价栏内文件名称未锁,搜索将在当前目录中执行(加载的源代码主文件)。不需要搜索标准目录。
Importingoffunctions
函数从MQL4编译模板(.ex4文件)和执行系统文件模板(.dll文件)通过。模板名称被指定在#import指令中。来自输入函数和通过参量的兵役数据需要带有完整的描述部分。函数描述会立即按照#import"模板"名称执行。新的#import命令完成引入输入函数描述部分。
#import"file_name"
func1define;
func2define;
...
funcNdefine;
#import
输入函数必须有自己的名称。相同名称的函数无法从不同的模块同时引入。引入的函数名不能与那些内部函数融合。
因为引入函数是在模块外面被编写,编译器无法检查通过参量的正确性。这就是为什么,避免运行错误,它是必要精确地公开命令的原因。在参量引入函数(从EX4和从DLL模块)后,没有任何值。
示例:
#import"user32.dll"
intMessageBoxA(inthWnd,stringlpText,stringlpCaption,intuType);
#import"stdlib.ex4"
stringErrorDescription(interror_code);
intRGB(intred_value,intgreen_value,intblue_value);
boolCompareDoubles(doublenumber1,doublenumber2);
stringDoubleToStrMorePrecision(doublenumber,intprecision);
stringIntegerToHexString(intinteger_number);
#import"Expert示例.dll"
intGetIntValue(int);
doubleGetDoubleValue(double);
stringGetStringValue(string);
doubleGetArrayItemValue(doublearr[],int,int);
boolSetArrayItemValue(double&arr[],int,int,double);
doubleGetRatesItemValue(doublerates[][6],int,int,int);
intSortStringArray(string&arr[],int);
intProcessStringArray(string&arr[],int);
#import
在mql4程序执行期间引入输入函数,需要使用稍后安装。这就意味着直到调用输入函数,相应模板(ex4或dll)将不会进行加载。
不建议使用Drive:\Directory\FileName.Ext为文件名安装。MQL4资料库会从terminal_dir\experts\libraries文件夹中卸下。如果没有发现资料库,则没有可能从terminal_dir\experts文件夹中卸下。
最后感谢大家,欢迎回帖批评指正。
|
|