手机版

MQL4基础:编译预处理

阅读 :
外_汇_邦 WaiHuiBang.com

  • 预定义常量
  • 编译控制
  • 文件包含
  • 函数导入

预处理程序是MQL4编译程序的一个特殊的组成部分,用于在程序被编译之前预先准备好程序源码。

预处理程序能增强程序源码的可读性。在MQL4程序中,通过包含指定的文件可以获得结构化源码,给常量取一个易于记忆的名字有助于增强源码的可读性。

预处理程序也允许MQL4程序定义特定的参数。

如果#号置于程序的第一行,那么该行就是预处理程序的控制指令。预处理程序指令以回车换行结束。

预定义常量

使用 #define 命令,我们可以在程序中定义符号名或符号常量代表特定的字符串。随后,编译程序会把所有符号名替换成相应的字符串。事实上,这些名称可以被任意的文本替换,并不局限于数字:

#define identifier value

常量符号名同样遵守变量名的命名规则,值可以是以下任意类型:

#define ABC          100#define PI           0.314#define COMPANY_NAME "myEAtrade Inc."
...
void ShowCopyright() { Print("版权所有 © 2001-2007, ",COMPANY_NAME); Print("http://www.myeatrade.com"); }

编译控制

每个MQL4程序允许指定额外的特定参数,这些参数用#property命名,它不需要用户明确地启动程序,就可帮助客户端提供合适的服务。要注意的是,这个功能还与技术指标的外部设定有关。

#property 识别值
常数类型描述
linkstring公司网站的相关连接
copyrightstring公司名称
stacksizeint堆栈大小
library 
indicator_chart_windowvoid在图表窗口显示指标
indicator_separate_windowvoid在独立显示窗口显示指标
indicator_buffersint计算指标的缓冲区个数,最大为8
indicator_minimumdouble独立显示的指标窗口下端缩放比例
indicator_maximumdouble独立显示的指标窗口上端缩放比例
indicator_colorNcolor线1到线8的显示颜色
indicator_widthNint线1到线8的显示宽度
indicator_styleNint线1到线8的显示样式
indicator_levelNdouble自定义指标的第N条水平线(N为1到8)
indicator_levelcolorcolor自定义指标的第N条水平线颜色(N为1到8)
indicator_levelwidthint自定义指标的第N条水平线宽度(N为1到8)
indicator_levelstyleint自定义指标的第N条水平线样式(N为1到8)
show_confirmvoid在脚本运行之前显示确认框
show_inputsvoid在脚本运行之前显示它的属性表;禁用show_confirm属性

示例:

#property link        "http://www.myeatrade.com"#property copyright   "myEAtrade Inc."#property library#property stacksize   1024

在所执行模块的设置中,编译程序将会保存这些已说明的值。

文件包含

#include 命令行可以放置在程序的任意部分,但是所有的“文件包含”通常都被统一放置在源代码的开头。调用格式:

#include <file_name>#include "file_name";

示例:

#include <WinUser32.mqh>#include "mylib.mqh"

预处理程序将用WinUser32.mgh文件内容替换这一行。尖括号表示WinUser32.mqh文件将会从默认目录调用(通常默认目录为terminal_ directory/experts/include)。不会搜索当前目录。

如果文件名用引号括起来,将在当前目录中搜索该文件(源码主文件所在位置)。不会搜索标准目录。

函数导入

函数可从MQL4编译过的模块(*.EX4文件)和操作系统文件模块(*.DLL文件)导入过来。模块名需要在#import指令中指定。因为编译程序能够以适当的方式生成被导入的函数调用和传递参数,函数的完整说明是必需的。函数说明要紧跟在 #import "module name” 命令后而,以新的#import命令(不带参数)结束导入函数说明块。

#import "file_name"    func1 define;    func2 define;    ...    funcN define;#import

导入函数必须有唯一的名称。相同名称的函数无法从不同的模块同时导入。导入的函数名称不能与那些内置函数冲突。

由于导入函数是在模块之外编译的,编译程序无法检查参数传递的正确性。这就是为什么,为了避免运行时错误,有必要精确地说明参数类型定义和参数顺序的原因。传递到导入函数(从EX 和从DLL模块)的这些参数不能通过默认值获得值。

示例:

#import "user32.dll"   int    MessageBoxA(int hWnd, string lpText, string lpCaption, int uType);
#import "stdlib.ex4" string ErrorDescription(int error_code); int RGB(int red_value, int green_value, int blue_value); bool CompareDoubles(double number1, double number2); string DoubleToStrMorePrecision(double number, int precision); string IntegerToHexString(int integer_number);
#import "Expert示例.dll" int GetIntValue(int); double GetDoubleValue(double); string GetStringValue(string); double GetArrayItemValue(double arr[], int, int); bool SetArrayItemValue(double& arr[], int,int, double); double GetRatesItemValue(double rates[][6], int, int, int); int SortStringArray(string& arr[], int); int ProcessStringArray(string& arr[], int);#import

对于在MQL4程序执行期间导入的函数,采用了所谓的“后期联编”。这就意味着只要导入的函数未被调用,相应的模块(EX4或DLL)就不会被加载。

不推荐使用全路径文件名Drive:/Directory/FileName.Ext加载模块。MQL4库会从terminal_dir/experts/libraries文件夹中载入进来。如果没有找到库,就会尝试从terminal_dir/experts文件夹中加载。

外_汇_邦 WaiHuiBang.com
本文标题:MQL4基础:编译预处理 - MT4平台MQL4编程学习
本文地址:https://www.waihuibang.com/fxschool/autotrading/mql4/49063.html

相关文章

  • 外汇EA的那些误区你信了吗?
    外汇EA的那些误区你信了吗?

    外汇EA交易工具相信做外汇的投资者都不陌生,甚至不少投资者如今正在使用中。它能按照您事先设定好的条件自动的买卖与交易,并且由于它是电脑自动下单,因此可以更加快速地下单和平仓。但是市场上对于外汇EA的说法却是分...

    MQL4编程学习
  • MQL4数组处理相关函数(一)

    用于数组处理的一组函数。数组的最大维数为四维。每一维索引编号为0至(数组大小 减 1)。例如,在50个元素的一维数组中,调用第一个元素用array[0],最后一个元素用array[49]。ArrayBsearch() &#8211; 数组搜索 Ar...

    MQL4编程学习
  • 90%的高收益外汇EA都是骗人的,为什么还有人信?
    90%的高收益外汇EA都是骗人的,为什么还有人信?

    刚入金融界的时候,就知道外汇市场90%的信息都是骗人的,这让当时刚毕业的我一直心存戒心。进入正规的金融公司后,我学到了很多,也见识了很多行业恶行,更见过很多奇葩的投资人。 许多外汇广告说得很夸张,明明风险高到可以...

    MQL4编程学习
  • 外汇VPS到底是个什么鬼?
    外汇VPS到底是个什么鬼?

    近年来,外汇VPS交易逐渐在零售外汇圈内流行起来。本文将对外汇VPS及其原理、优势进行简要介绍。外汇VPS(虚拟私人服务器)支持EA交易员进行自动交易,最大程度地缩减MT4客户终端和MT4服务器之间的延迟。通过使用安全位置的...

    MQL4编程学习
  • EA再好,这些事你还必须做…...
    EA再好,这些事你还必须做…...

    拥有一款不死的EA,躺在床上数钞票;从油盐酱醋到去马尔代夫的机票,随时都可以从交易账户中变现出来——这是我们这代交易人共同的梦想。当然,它仅仅是梦想。 正是因为有着这样一种梦想,激励着我们这批筚路蓝...

    MQL4编程学习
你可能感兴趣