如何计算交易连胜/连败及单笔最大盈亏百分比?
解决Pine Script单笔最大盈亏百分比统计问题
你的连胜连败统计逻辑存在判断时机错误,同时需要补充单笔交易盈亏百分比的统计逻辑。核心是利用Pine Script内置的strategy.closedtrades.profit_percent获取每笔平仓交易的盈亏百分比,在交易平仓后更新最大值。
以下是完整修正代码:
//@version=5 strategy("交易绩效统计", overlay=false) // 初始化连胜连败相关变量 var int WinningStreak = 0 var int LosingStreak = 0 var int MaximumWinningStreak = 0 var int MaximumLosingStreak = 0 // 初始化盈亏百分比相关变量 var float BiggestWinningTradePct = 0.0 var float BiggestLosingTradePct = 0.0 // 修正后:仅在交易平仓后更新连胜连败与盈亏数据 if strategy.position_size == 0 and strategy.closedtrades > 0 // 获取最近一笔平仓交易的盈亏百分比 lastTradePct = strategy.closedtrades.profit_percent(strategy.closedtrades - 1) if lastTradePct > 0 // 盈利交易:更新连胜、重置连败 WinningStreak := WinningStreak + 1 LosingStreak := 0 // 更新最大连胜记录 if WinningStreak > MaximumWinningStreak MaximumWinningStreak := WinningStreak // 更新单笔最大盈利百分比 if lastTradePct > BiggestWinningTradePct BiggestWinningTradePct := lastTradePct else if lastTradePct < 0 // 亏损交易:更新连败、重置连胜 LosingStreak := LosingStreak + 1 WinningStreak := 0 // 更新最大连败记录 if LosingStreak > MaximumLosingStreak MaximumLosingStreak := LosingStreak // 更新单笔最大亏损百分比(保留负数,需正数可改用math.abs()) if lastTradePct < BiggestLosingTradePct BiggestLosingTradePct := lastTradePct else if strategy.position_size != 0 // 持仓时不重置连胜连败计数 na else // 无持仓且无平仓记录时重置计数 WinningStreak := 0 LosingStreak := 0 // 设置输出变量(可在策略报告/输出面板查看) var int max_win_streak = 0 var int max_lose_streak = 0 var float max_win_pct = 0.0 var float max_lose_pct = 0.0 max_win_streak := MaximumWinningStreak max_lose_streak := MaximumLosingStreak max_win_pct := BiggestWinningTradePct max_lose_pct := BiggestLosingTradePct // 绘制统计结果 plot(MaximumWinningStreak, title="最大连胜次数", color=color.green) plot(MaximumLosingStreak, title="最大连败次数", color=color.red) plot(BiggestWinningTradePct, title="单笔最大盈利百分比", color=color.purple) plot(BiggestLosingTradePct, title="单笔最大亏损百分比", color=color.blue)
关键修正说明:
- 修正输赢判断时机:原代码在持仓时判断输赢是错误的,必须在交易平仓后,通过实际盈亏数据判定结果,所以用
strategy.position_size == 0 and strategy.closedtrades > 0触发更新。 - 获取盈亏百分比:
strategy.closedtrades.profit_percent(index)用于获取指定平仓交易的盈亏百分比,strategy.closedtrades - 1指向最近一笔完成的交易。 - 最大盈亏更新逻辑:盈利时比较并更新最大盈利百分比,亏损时比较并更新最大亏损百分比(若需要显示正数亏损,可对
lastTradePct使用math.abs()处理)。 - 输出变量设置:将统计结果赋值给独立变量,方便在策略报告或输出面板中查看数值。
内容的提问来源于stack exchange,提问作者TheLegendOfA
相关产品推荐
相关产品推荐

