保持敬畏之心
交易是一场持久战

​MQL4(5):什么是常量 (Constants)

我们已经了解了“变量”这个可以随时读写的“白板”,现在来认识它的兄弟“常量”,一块一旦刻上字就无法更改的“石碑”。

顾名思义,常量的值在程序运行过程中,是永远固定不变的。

为什么我们需要“刻石碑”?

在我们的交易策略中,有很多参数是“核心设定”或“基本规则”,我们不希望它们在程序运行的任何环节被意外修改。把这些值设为常量,能极大地提升代码的安全性、可读性和可维护性。

想象一下这些场景:

  • EA的身份证 (魔术号):每个EA都需要一个唯一的魔术号,来识别它自己下的订单。这个号码必须是固定的,绝不能变。
  • 交易参数:比如你策略固定的下单手数、止盈止损点数、滑点大小。
  • 核心风控规则:比如单笔交易的最大风险百分比、允许同时持有的最大单量。

如果把这些值设为变量,万一在代码的某个角落不小心写错了,把它们给修改了,后果不堪设想。而使用常量,就能从根本上杜绝这种风险。

常量的两种定义方法

在MQL4中,我们主要用两种方式来定义自己的常量。

1. 使用 #define (宏定义)

这是比较“老派”但非常常见的一种方式。它会在程序编译前,粗暴地把你定义的名字,全部替换成它对应的值。

// === EA核心参数设定 ===
#define LOT_SIZE   0.01     // 默认下单手数
#define SLIPPAGE   3        // 默认滑点
#define MAGIC_NUM  888      // EA魔术号,必须唯一

定义好之后,在代码里就可以直接使用这些大写的名字,非常直观。比如在下单函数里:

OrderSend(Symbol(), OP_BUY, LOT_SIZE, Ask, SLIPPAGE, 0, 0, "My EA", MAGIC_NUM, 0, clrGreen);

这样做的好处是,当你想修改手数或滑点时,只需要在文件顶部的#define区域修改一次,整个程序所有用到这些值的地方就全部生效了,再也不用大海捞针一样去代码里一个个找了。

2. 使用 const (常量修饰符)

这是更现代、更推荐的一种方式。它的本质是定义一个“只读”的变量。

const double riskPerTrade = 0.02;  // 每单风险为账户的2%
const int    maxTrades    = 5;       // 最大持仓单量

const定义的常量,一旦设定了初始值,就不能在程序的任何地方再对它进行赋值修改,否则编译器会直接报错。

学长建议在新写的代码里,我更推荐你使用const。因为它有明确的数据类型,语法更严格,可以帮助我们避免一些由#define的“无脑替换”特性可能引发的、难以察觉的BUG。

MQL4的官方词典:内置常量

我们并不需要从零开始定义所有东西。MQL4已经为我们内置了成百上千个标准常量,涵盖了交易的方方面面,我们只需要像查字典一样直接使用即可。

  • 操作类型:OP_BUY (买单), OP_SELL (卖单)
  • 图表周期:PERIOD_M1 (1分钟), PERIOD_H4 (4小时)
  • 图形对象:OBJ_TREND (趋势线), OBJ_HLINE (水平线)
  • 颜色:clrRed (红色), clrBlue (蓝色), clrGold (金色)

熟悉并使用这些内置常量,是写出规范、专业代码的基础。

小结:

简单来说,请记住这个核心区别:

  • 变量是“可以变的值”,用来存储像价格、指标值这样动态变化的数据,它让程序变得灵活、有逻辑。
  • 常量是“固定不变的规则”,用来设定像魔术号、手数、滑点这些核心参数,它让程序变得安全、清晰、易于维护。

养成在策略开发初期,就把所有固定参数定义为常量的习惯,是一个交易程序员专业素养的重要体现。它能让你的EA在未来面对各种修改和迭代时,依然保持清晰的结构和稳固的根基。

赞(0)
未经允许不得转载:图道交易 » ​MQL4(5):什么是常量 (Constants)
分享到

评论 抢沙发