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

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

什么是常量

常量顾名思义,是指在程序执行过程中其值始终保持不变的数据。例如,数字 5 是一个整型常量;字符 'A' 是一个字符常量;而 2009.01.01 00:00:00 是一个表示 2009 年 1 月 1 日零点的 datetime 日期时间常量。

MQL4语言内置了种类繁多的标准常量,应用于价格数据、图表周期、颜色、交易操作等多个方面。例如,PERIOD_H1 是表示 H1 (小时) 图表周期的常量,OP_BUY 代表执行买入市价单操作,而 Red 则是代表红色的颜色常量。

您还可以使用 #define 预处理器指令来定义自己的常量。要查阅 MQL4中所有可用的标准常量及其含义,请参考 MQL 参考文档中的“标准常量 (Standard Constants)”章节。

变量就像一个“白板”,你可以随时写擦写改。常量就像一块“刻着字的石头”,一旦写上去,谁也不能改,用来保存那些固定死了的设定参数、类型、标识、编号、标签等。

常量的常见写法:

1. 用 #define 宏定义常量

#define LOT_SIZE  0.01
#define SLIPPAGE  3
#define MAGIC_NUM 888

这些值在整个程序里都能用,而且永远不会变。比如用 OrderSend() 时直接用常量:

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

2. 用 const 定义不可更改的变量(也是常量)

const double riskPerTrade = 0.01;
const int maxTrades = 3;

这些变量一旦设置,就不能在后续更改它们的值。

MQL4中常用的常量示例

类型 举例 用途
操作类型常量 OP_BUY, OP_SELL 表示买单 / 卖单类型
图形常量 OBJ_LABEL, OBJ_TREND 创建图表上的图形或标签
时间常量 PERIOD_M1, TIME_DATE 指定时间周期,或时间信息
错误常量 ERR_NO_ERROR, ERR_TRADE_TIMEOUT 用于错误检查
颜色常量 clrRed, clrBlue 设置图表颜色、箭头颜色等

变量 vs 常量

属性 变量(Variable) 常量(Constant)
定义 一个可以存储并改变数值的命名空间 一个只能被定义一次、值不可更改的命名空间
关键词 使用数据类型如 intdouble 使用 #defineconst
值是否可变 可以随时更改 一旦设定就不能更改
作用时长 运行时动态分配与改变 编译前已经固定,不可变
是否可重复赋值 可以多次赋值 只能初始化一次
生命周期 程序运行期间有效 编译时就已固定值,运行中不可再变更
应用场景 储存价格、计算结果、交易状态、递增值等 储存手数、滑点、魔术号、图表样式等固定值
可读性 可能需要通过命名来加强可读性 常量通常用大写字母,能一眼识别是固定设定
代码安全性 可能在其他地方被修改,易引发逻辑错误 不可被修改,更安全更稳定
易维护性 值分散各处,维护不如常量 集中写在顶部,修改方便,一处修改全局生效
示例写法 int count = 0;
double price = Ask;
#define SLIPPAGE 3
const double RISK = 0.01;
编译器优化 变量可被多次修改,优化空间小 常量在编译阶段可直接替换为实际值,提高性能
推荐命名风格 小写开头,如 orderCountavgPrice 大写字母+下划线,如 MAX_TRADESMAGIC_NUMBER
易混淆点 程序复杂时,变量值来源不清晰,调试困难 常量值固定,程序逻辑清晰
关键字冲突风险 较低,变量名冲突时报错 使用 #define 可能造成宏替换冲突
系统内置支持 变量由用户自定义为主 MQL4 系统内置了上千个常量(如 OP_BUY, clrRed, MODE_EMA, OBJ_LABEL

现实生活的类比来帮助理解

类比内容 变量 常量
白板 vs 石碑 白板上的字可以随时擦写 石碑刻字,一旦刻上去不能更改
文件 vs 印章 文件内容可修改 印章内容固定
水杯 vs 保温杯标签 水杯里的水可以换 保温杯上贴的标签是不会改的
游戏进度 玩家当前等级、血量(变量) 游戏默认最大等级、每关BOSS血量(常量)

变量/常量示例对比

变量示例
double price = Ask;
int openOrders = 0;
bool isTradeAllowed = true;

这些值可以随程序运行不断变化


常量示例(#define
#define LOT_SIZE   0.01
#define SLIPPAGE   3
#define MAGIC_NUM  888

这些是程序设定的“死规则”,在编译时已决定,不可变!


常量示例(const
const double RISK_PERCENT = 0.02;
const int MAX_TRADES = 5;

这些也不能在程序运行中更改,属于编译期固定值。

小结:

常量是“固定不变的规则”,变量是“可以变的值”。
常量让代码安全、清晰、易维护;变量让代码灵活、可控、具备逻辑。

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