计算手数(CalculateLot) 功能 旨在 根据风险管理原则自动计算交易手数。它允许交易者指定在交易中愿意承担的风险占账户余额的百分比,并据此确定最佳持仓量。
语法
double CalculateLot(double riskPercent, double stopLossPips);
参数
Параметр Тип Описание riskPercent double Процент от текущего баланса счета, которым трейдер готов рискнуть. Указывается в абсолютном значении (например, 2.0 = 2% от баланса). stopLossPips double Расстояние до уровня Stop Loss в пунктах. Для 5-значных котировок указывается количество стандартных пунктов (например, 1000 = 1000 пунктов = 100 пипсов).
返回值
函数返回归一化手数( 双倍),其中
-
符合交易量步长 ( VOLUME_STEP) 的四舍五入规则 ;
-
不超过允许的最大交易量 ( VOLUME_MAX);
-
不小于允许的最小交易量 ( VOLUME_MIN)。
如果计算值超出允许范围,函数将返回一个限制值(minLot 或 maxLot)。
操作算法
-
获取账户和符号参数
-
当前余额 ( ACCOUNT_BALANCE)
-
点值 ( SYMBOL_TRADE_TICK_VALUE)
-
手数变化的最小值、最大值和步长
-
-
以存款货币计算风险金额
riskAmount = баланс × (риск% / 100) -
计算手数
lotSize = riskAmount / (stopLossPips × tickValue)
-
归一化和验证
-
四舍五入到最接近的步长 ( VOLUME_STEP)
-
最小值和最大值验证
-
使用示例
示例 1.智能交易系统的基本使用
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { //--- 设置风险为余额的 1.5%,止损 500 点 double lot = CalculateLot(1.5, 500); //--- 检查批次计算是否正确 if(lot > 0.0) { //--- 获取当前价格 double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); //--- 计算水平 double sl = ask - 500 * _Point; double tp = ask + 1500 * _Point; //--- 开仓 trade.Buy(lot, _Symbol, ask, sl, tp); } }
例 2.在带有错误检查功能的脚本中使用
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { double riskPercent = 2.0; // 风险为余额的 2 double stopLossPips = 1000; // 止损 1000 点 double lot = CalculateLot(riskPercent, stopLossPips); //--- 输出计算信息 Print("=== 批量计算结果 ==="); Print("账户余额:", AccountInfoDouble(ACCOUNT_BALANCE)); Print("风险,%:", riskPercent); Print("风险金额:", AccountInfoDouble(ACCOUNT_BALANCE) * riskPercent / 100.0); Print("止损,点数:", stopLossPips); Print("滴答成本:", SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)); Print("计算批量:", lot); Print("================================"); if(lot <= 0.0) { Alert("错误:手数计算失败。检查风险和止损参数。); } }
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/71010
ZigZag Support and Resistance Detection
ZigZag SNR 检测使用 ZigZag 支点识别支撑位和阻力位。
To Close All Open Trades of Different Symbols
技术细节 使用带有 TRADE_ACTION_DEAL 的 MQL5 订单发送功能,以当前买入价/卖出价即时关闭市场。包括滑点容差(10 点)、适当的成交量匹配和神奇数字保存。通过仓位向后循环,防止执行过程中的指数移动。
