微信扫一扫 分享朋友圈

已有 58 人浏览分享

开启左侧

MQL4基础:编译预处理

[复制链接]
58 0
MQL4基础:编译预处理
  • 预定义常量
  • 编译控制
  • 文件包含
  • 函数导入
    预处理程序是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命名,它不需要用户明确地启动程序,就可帮助客户端提供合适的服务。要注意的是,这个功能还与技术外汇MT4指标的外部设定有关。
    #property 识别值常数类型描述
    linkstring公司网站的相关连接
    copyrightstring公司名称
    stacksizeint堆栈大小
    library库
    indicator_chart_windowvoid在图表窗口显示外汇MT4指标
    indicator_separate_windowvoid在独立显示窗口显示外汇MT4指标
    indicator_buffersint计算外汇MT4指标的缓冲区个数,最大为8
    indicator_minimumdouble独立显示的外汇MT4指标窗口下端缩放比例
    indicator_maximumdouble独立显示的外汇MT4指标窗口上端缩放比例
    indicator_colorNcolor线1到线8的显示颜色
    indicator_widthNint线1到线8的显示宽度
    indicator_styleNint线1到线8的显示样式
    indicator_levelNdouble自定义外汇MT4指标的第N条水平线(N为1到8)
    indicator_levelcolorcolor自定义外汇MT4指标的第N条水平线颜色(N为1到8)
    indicator_levelwidthint自定义外汇MT4指标的第N条水平线宽度(N为1到8)
    indicator_levelstyleint自定义外汇MT4指标的第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 #include "file_name";示例:
    #include #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文件夹中加载。
    大家在看了小编以上对"MQL4基础:编译预处理"的介绍后应该都清楚了吧,希望对大家做单有所帮助。如果大家还想要下载更多有关"MQL4基础:编译预处理"的相关EA源码,敬请关注汇探网下载。我们会持续更新交易系统,EA源码。
  • 举报 使用道具

    回复
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    精彩推荐
    热门资讯
    网友晒图
    图文推荐
    • 联系我们
    • 邮箱:1912582076#qq.com(请把#改成@)
    • 电话:400-178-8526
    • QQ客服 1912582076
    • 工作时间:周一至周五(早上9点至下午5:30点)
    • 微信公众平台

    • 客服微信号

    QQ|外汇EA|炒外汇论坛|外汇ea|汇探网 |网站地图

    GMT+8, 2026-3-20 03:23 , Processed in 0.223196 second(s), 29 queries .

    Powered by 汇探网 免责申明:本平台仅提供 外汇ea, 外汇指标模板所有产品及展示信息均由第三方发布提供.|投资有风险,交易需谨慎.

    Copyright © 2014-2023, 汇探网-提供 外汇MT4指标,外汇EA下载,外汇交易系统,外汇开户赠金视频教程,外汇软件工具等.版权所有,复制必究.