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

基于交易数组计算平均最佳开仓时间(Lodash&Moment)

可以实现需求

完全可以利用你预处理后的交易数据,计算出不同开仓时间的平均收益,进而找出最优和最差的开仓时间。下面是基于Lodash的具体实现方案:

实现步骤

  1. 按开仓时间分组:用_.groupBy将数据按time字段分组,把同一时间的交易PnL归集到一起
  2. 计算每组平均收益:遍历分组结果,计算每个时间对应的平均PnL(总和除以交易次数)
  3. 排序找出最优/最差:将计算好的平均收益数组按数值排序,取首尾分别得到最佳和最差开仓时间

代码实现

const _ = require('lodash');

// 你预处理后的交易数据
const processedTrades = [
    { "time": "19:04", "PnL": 20 },
    { "time": "13:45", "PnL": 30 },
    { "time": "08:12", "PnL": 10 },
    { "time": "16:39", "PnL": -15 },
    { "time": "11:27", "PnL": -5 },
    { "time": "11:27", "PnL": -5 },
    { "time": "13:17", "PnL": 25 },
    { "time": "17:27", "PnL": 60 }
];

// 1. 按时间分组
const groupedByTime = _.groupBy(processedTrades, 'time');

// 2. 计算每个时间的平均PnL
const avgPnLByTime = _.mapValues(groupedByTime, (trades) => {
    const totalPnL = _.sumBy(trades, 'PnL');
    const tradeCount = trades.length;
    return totalPnL / tradeCount;
});

// 3. 转换为数组并排序(从高到低)
const sortedAvgPnL = _.sortBy(Object.entries(avgPnLByTime), ([, avg]) => -avg);

// 获取最优和最差开仓时间
const bestTime = sortedAvgPnL[0];
const worstTime = sortedAvgPnL[sortedAvgPnL.length - 1];

console.log(`最佳开仓时间:${bestTime[0]},平均收益:${bestTime[1]}`);
console.log(`最差开仓时间:${worstTime[0]},平均收益:${worstTime[1]}`);

输出结果

运行上述代码后,会得到:

最佳开仓时间:17:27,平均收益:60
最差开仓时间:11:27,平均收益:-5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 06:21:37