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

求助:如何修改WeeklyProfit函数实现按交易品种统计每周盈亏

按交易品种拆分统计每周盈亏的实现方案

要实现按单个货币对拆分统计每周盈亏,核心是用键值对形式的数组组合跟踪每个品种的累计盈亏,替代原来的单一盈亏变量。以下是具体实现步骤和修改后的代码:

核心思路

  • 用两个平行数组模拟关联映射:一个存货币对名称,一个存对应品种的累计盈亏(包含利润、隔夜息、手续费)
  • 遍历历史订单时,先过滤本周内的订单,再按品种更新对应盈亏值
  • 最后遍历数组,拼接每个品种的盈亏结果

修改后的代码

string WeeklyProfitBySymbol()
{
    string result = "";
    int hstTotal = OrdersHistoryTotal();
    datetime weeklyStartTime = iTime(Symbol(), PERIOD_W1, 0); // 获取本周起始时间
    
    // 定义平行数组,存储品种名称和对应盈亏
    double symbolProfits[];
    string symbols[];
    int symbolCount = 0;

    for(int i = 0; i < hstTotal; i++)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        {
            // 仅统计本周内的订单
            if(OrderOpenTime() >= weeklyStartTime)
            {
                string currentSymbol = OrderSymbol();
                double orderTotal = OrderProfit() + OrderSwap() + OrderCommission();
                bool symbolExists = false;

                // 检查当前品种是否已在数组中,存在则累加盈亏
                for(int j = 0; j < symbolCount; j++)
                {
                    if(symbols[j] == currentSymbol)
                    {
                        symbolProfits[j] += orderTotal;
                        symbolExists = true;
                        break;
                    }
                }

                // 若为新品种,添加到数组中
                if(!symbolExists)
                {
                    ArrayResize(symbols, symbolCount + 1);
                    ArrayResize(symbolProfits, symbolCount + 1);
                    symbols[symbolCount] = currentSymbol;
                    symbolProfits[symbolCount] = orderTotal;
                    symbolCount++;
                }
            }
        }
    }

    // 格式化拼接结果字符串
    for(int k = 0; k < symbolCount; k++)
    {
        result += StringFormat("%s: %.2f %s\n", symbols[k], symbolProfits[k], AccountCurrency());
    }

    return result;
}

关键说明

  • MQL4原生无字典类型,用symbols和symbolProfits两个平行数组实现品种与盈亏的映射
  • 每次处理订单时先检查品种是否已存在,避免重复创建条目
  • 用StringFormat格式化输出,保留两位小数让结果更易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:25:33