为了程序的安全性,优先选择
const
关键字修饰形参的权限范围形参过多时,需要经常改动的形参靠左,其他靠右
封装方法:
- 在
MQL5/Incude
目录下创建一个结尾.mqh
文件,比如SymbolInfo.mqh
- 将封装好的函数放到文件中,调用方法:
#include <SymbolInfo.mqh>
如果有子目录:#include <tools/SymbolInfo.mqh>
封装方法
Guapit/Symbols.mqh
//+------------------------------------------------------------------+
//| 交易品种信息函数库 |
//+------------------------------------------------------------------+
// 1. 创建交易品种信息结构体
struct SymbolInfo
{
double ask; // buy方向报价
double bid; // sell方向报价
double point; // 最小报价单位
int digits; // 小数点的位数
int spread; // 点差
ENUM_ORDER_TYPE_FILLING filling_mode; // 订单模式
int stops_level; // 止损价和报价之间最小的间距点数
int tp; // 最小止盈距离点数
double min_volume; // 最小下单手数
};
// 2. 获取指定交易品种的信息
bool getSymbolInfo(const string symbol, SymbolInfo & symbol_info)
{
bool is_exsit = SymbolSelect(symbol,true);
if(is_exsit)
{
symbol_info.ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
symbol_info.bid = SymbolInfoDouble(symbol, SYMBOL_BID);
symbol_info.point = SymbolInfoDouble(symbol, SYMBOL_POINT);
symbol_info.digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
symbol_info.spread = (int)SymbolInfoInteger(symbol, SYMBOL_SPREAD);
symbol_info.filling_mode =
(ENUM_ORDER_TYPE_FILLING)SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
symbol_info.stops_level = (int)SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL);
symbol_info.tp = (int)SymbolInfoInteger(symbol,SYMBOL_TRADE_FREEZE_LEVEL);
symbol_info.min_volume = SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
}
return is_exsit;
}