基于交易数组计算平均最佳开仓时间(Lodash&Moment)
可以实现需求
完全可以利用你预处理后的交易数据,计算出不同开仓时间的平均收益,进而找出最优和最差的开仓时间。下面是基于Lodash的具体实现方案:
实现步骤
- 按开仓时间分组:用
_.groupBy将数据按time字段分组,把同一时间的交易PnL归集到一起 - 计算每组平均收益:遍历分组结果,计算每个时间对应的平均PnL(总和除以交易次数)
- 排序找出最优/最差:将计算好的平均收益数组按数值排序,取首尾分别得到最佳和最差开仓时间
代码实现
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
相关产品推荐
相关产品推荐

