Appearance
合约信息类方法
类与对象
合约类定义在MT5CTP命名空间,需要显性调用,定义合约类的操作对象:
MQL5
// 类可理解为自定义类型,使用自定义类型定义了一个变量(对象) this_symbol
MT5CTP::CSymbolInfo this_symbol;
// 调用对象方法:选择合约
if(this_symbol.Select()) {
// do...
}MQL支持动态指针,但需要自己管理指针的生命周期,如果不是必须,不建议使用:
MQL5
// 类可理解为自定义类型,使用自定义类型定义了一个变量(对象) this_symbol
MT5CTP::CSymbolInfo *this_symbol= new MT5CTP::CSymbolInfo();
if(CheckPointer(this_symbol)==POINTER_DYNAMIC) {
// 调用对象方法:选择合约
if(this_symbol.Select()) {
// do...
}
// 销毁动态指针
delete(this_symbol);
}扩展类功能
如果类的方法无法满足应用场景,可以使用继承的方式扩展类功能,在新的类中定义新方法,实现新功能(注意继承中使用的命名空间)。
MQL5
// 定义名为'NewSymbol'的新类,继承自 MT5CTP::CSymbolInfo
class NewSymbol:public MT5CTP::CSymbolInfo {
// do...
}完整的例子
三步走完成输出图表合约数据到日志的脚本代码:
MQL5
#property copyright "Copyright 2026, MT5CTP项目组"
#property link "mt5ctp@qq.com"
#property version "1.00"
#property description "MT5CTP功能Demo|仅用于量化投资爱好者测试、研究"
#property description "基于MT5CTP类库[API 2.00 build 0030]"
//+------------------------------------------------------------------+
//| Include & Define |
//+------------------------------------------------------------------+
// 第一步:导入MT5CTP类库
#include <mt5ctp\SymbolInfo.mqh>
// 第二步:定义合约对象 _self_symbol,注意调用命名空间 MT5CTP
MT5CTP::CSymbolInfo _self_symbol;
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart() {
// 第三步:合约对象选择和检查图表合约
if(!_self_symbol.Select())
return;
// 使用合约对象提取合约数据,输出信息到客户端[工具箱]-[专家]日志
Print("合约代码:",_self_symbol.Symbol());
Print("合约名称:",_self_symbol.Name());
Print("交易所代码:",_self_symbol.ExchangeID());
Print("产品代码:",_self_symbol.ProductID());
Print("产品名称:",_self_symbol.ProductName());
Print("到期日:",_self_symbol.ExpireDate());
Print("交易日:",_self_symbol.TradingDay());
Print("业务日期:",_self_symbol.ActionDay());
Print("行情更新时间:",_self_symbol.UpdateTime());
Print("最小变动价位:",_self_symbol.PriceTick());
Print("涨停板价:",_self_symbol.UpperLimit());
Print("跌停板价:",_self_symbol.LowerLimit());
Print("申买价(bid):",_self_symbol.Bid());
Print("申卖价(ask):",_self_symbol.Ask());
Print("申买量:",_self_symbol.BidVolume());
Print("申卖量:",_self_symbol.AskVolume());
Print("当日均价:",_self_symbol.AvgPrice());
Print("昨持仓量:",_self_symbol.PreOpenInterest());
Print("今持仓量:",_self_symbol.OpenInterest());
Print("多头保证金率:",_self_symbol.LongMarginRatioByMoney());
Print("空头保证金率:",_self_symbol.ShortMarginRatioByMoney());
Print("开仓手续费:",_self_symbol.OpenRatioByVolume());
Print("开仓手续费率:",_self_symbol.OpenRatioByMoney());
Print("平仓手续费:",_self_symbol.CloseRatioByVolume());
Print("平仓手续费率:",_self_symbol.CloseRatioByMoney());
Print("平今仓手续费:",_self_symbol.CloseTodayRatioByVolume());
Print("平今手续费率:",_self_symbol.CloseTodayRatioByMoney());
Print("合约数量/乘数:",_self_symbol.ContractSize());
Print("是否行情订阅:",_self_symbol.IsSubMarket());
Print("是否指数合约:",_self_symbol.IsIndex());
Print("是否主力合约:",_self_symbol.IsMain());
Print("是否连续交易时间:",_self_symbol.SymbolExists());
Print("合约交易状态:",_self_symbol.StatusDescription());
Print("成交数量:",_self_symbol.Volume());
Print("成交金额:",_self_symbol.Turnover());
Print("小数点位数:",_self_symbol.Digits());
Print("最小报单量:",_self_symbol.MinLimitOrderVolume());
Print("最大报单量:",_self_symbol.MaxLimitOrderVolume());
Print("按小数点位数格式化数据:",_self_symbol.NormalizePrice(65536.789654123));
}
//+------------------------------------------------------------------+