Skip to content

变量

在编程中,变量是存储和操作数据的核心载体。MQL5中的变量需先声明后使用,根据作用域可分为局部变量全局变量输入变量。以下从声明、赋值、作用域三方面详细解析:

一、变量的本质与基本操作

定义:变量是内存中存储数据的容器,需指定数据类型(如int/double/string/bool)和名称(标识符)。
两大核心操作

  1. 声明变量:告诉编译器“我需要一个存储区域”,语法:

    cpp
    数据类型 变量名;  // 仅声明(未赋值)  
    数据类型 变量名 = 初始值;  // 声明并初始化
    • 示例:
      cpp
      int age;          // 声明整型变量(未赋值)  
      double price = 1.0750;  // 声明双精度变量并赋值  
      string symbol = "EURUSD";  // 声明字符串并赋值
  2. 赋值操作:将数据存入变量,语法:

    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面板修改或代码内修改可配置策略参数(如均线周期)