变量
在编程中,变量是存储和操作数据的核心载体。MQL5中的变量需先声明后使用,根据作用域可分为局部变量、全局变量和输入变量。以下从声明、赋值、作用域三方面详细解析:
一、变量的本质与基本操作
定义:变量是内存中存储数据的容器,需指定数据类型(如int
/double
/string
/bool
)和名称(标识符)。
两大核心操作:
声明变量:告诉编译器“我需要一个存储区域”,语法:
cpp数据类型 变量名; // 仅声明(未赋值) 数据类型 变量名 = 初始值; // 声明并初始化
- 示例:cpp
int age; // 声明整型变量(未赋值) double price = 1.0750; // 声明双精度变量并赋值 string symbol = "EURUSD"; // 声明字符串并赋值
- 示例:
赋值操作:将数据存入变量,语法:
cpp变量名 = 新值; // 覆盖原有值
- 示例:cpp
age = 18; // 给已声明的age变量赋值 price = 1.0760; // 修改price的值
- 示例:
注意:
- 未赋值的变量可能存储随机值,需初始化后再使用。
- 赋值时需匹配数据类型(如
int
变量不能直接赋字符串值)。
二、作用域:变量的“可见范围”
变量的作用域决定了它在代码中可被访问的区域,MQL5中分为三类:
1. 局部变量
- 定义:在函数(如
OnInit()
/OnTick()
)或代码块(花括号{}
)内声明的变量。 - 作用域:仅在声明它的函数/代码块内有效,外部无法访问。
- 示例:cpp
void OnTick() { int localVar = 10; // 局部变量(仅在OnTick中可见) Print(" localVar = ", localVar); } // 此处访问localVar会报错(作用域外)
2. 全局变量
- 定义:在所有函数外部声明的变量,作用域覆盖整个程序。
- 作用域:可在任意函数(
OnInit()
/OnTick()
/OnDeinit()
)中访问和修改。 - 示例:cpp
double globalBalance; // 全局变量(声明在所有函数外) int OnInit() { globalBalance = AccountInfoDouble(ACCOUNT_BALANCE); // 赋值 return INIT_SUCCEEDED; } void OnTick() { Print(" 账户余额:", globalBalance); // 跨函数访问 }
- 优势:避免重复计算,跨函数共享数据(如账户余额、策略参数)。
3. 输入变量
- 定义:用
input
关键字声明的特殊全局变量,用于从MT5界面接收用户参数。 - 作用域:全局可见,且值可通过MT5的EA参数面板动态修改。
- 语法:cpp
input double StopLoss = 50.0; // 止损(默认值50.0,用户可修改) input bool UseTrailingStop = true; // 是否启用追踪止损(默认true)
- 应用场景:
- EA的可配置参数(如止损、止盈、指标周期)。
- 编译后在MT5中拖曳EA到图表时,会弹出参数设置面板:
三、实战对比与最佳实践
类型 | 声明位置 | 可见范围 | 修改方式 | 典型场景 |
---|---|---|---|---|
局部变量 | 函数/代码块内 | 仅当前函数/代码块 | 函数内赋值 | 临时计算 |
全局变量 | 所有函数外部 | 整个程序 | 任意函数内修改 | 跨函数共享数据(如账户信息) |
输入变量 | 所有函数外部(带input ) | 整个程序+MT5面板 | MT5面板修改或代码内修改 | 可配置策略参数(如均线周期) |