You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQL4中如何正确计算账户的总盈亏?

MQL4账户总盈亏计算错误原因及正确方案

核心遗漏要点

你所有尝试的核心问题是只统计了交易价差盈亏,忽略了每笔订单的手续费和隔夜掉期利息,同时部分用法存在逻辑错误:

  • AccountInfoDouble(ACCOUNT_PROFIT) 仅统计未平仓持仓的浮动盈亏,空仓时返回0属于正常情况,该字段不适用历史累计盈亏统计。
  • OrderProfit() 仅返回交易的价差收益,每笔订单的扣除项(手续费OrderCommission()、隔夜掉期OrderSwap())均未纳入统计,这是你数值偏差的核心原因。
  • 出入金统计逻辑不全:仅统计入金未统计出金,且公式逻辑错误。
  • 未确认终端历史记录加载范围:MQL4默认仅加载当前设置时间范围内的历史订单,若未加载全量历史,OrdersHistoryTotal()返回值不全,计算结果也会偏差。你需要先在终端「交易历史」tab右键选择「所有历史记录」,保证历史订单加载完整。

正确实现代码

场景1:计算纯交易累计净盈亏(不含出入金,即你需要的实际交易总盈亏)

double totalTradeProfit = 0;
for(int i = 0; i < OrdersHistoryTotal(); i++){
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
        // 仅统计0-5类交易订单(买单、卖单、各类挂单)
        if(OrderType() <= OP_SELLLIMIT){
            // 价差盈亏+手续费+掉期,三者之和为该笔订单实际盈亏
            totalTradeProfit += OrderProfit() + OrderCommission() + OrderSwap();
        }
    }
}
Print("累计交易总盈亏:", totalTradeProfit);

场景2:验证账户当前余额与盈亏的对应关系

如果需要和账户余额校验,可使用如下逻辑:

double totalDeposit = 0; // 总入金
double totalWithdraw = 0; // 总出金
double totalTradeProfit = 0; // 交易总盈亏

for(int i = 0; i < OrdersHistoryTotal(); i++){
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)){
        if(OrderType() == 6){ // 出入金/转账类订单
            double amount = OrderProfit();
            if(amount > 0) totalDeposit += amount;
            else totalWithdraw += MathAbs(amount);
        }else{ // 交易类订单
            totalTradeProfit += OrderProfit() + OrderCommission() + OrderSwap();
        }
    }
}
// 账户当前余额 = 总入金 - 总出金 + 累计交易盈亏
double calculatedBalance = totalDeposit - totalWithdraw + totalTradeProfit;
// 总盈亏 = 当前余额 + 总出金 - 总入金
double totalAccountProfit = calculatedBalance + totalWithdraw - totalDeposit;

Print("计算得到的总盈亏:", totalAccountProfit);

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:36:02