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

如何计算交易连胜/连败及单笔最大盈亏百分比?

解决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)

关键修正说明:

  1. 修正输赢判断时机:原代码在持仓时判断输赢是错误的,必须在交易平仓后,通过实际盈亏数据判定结果,所以用strategy.position_size == 0 and strategy.closedtrades > 0触发更新。
  2. 获取盈亏百分比:strategy.closedtrades.profit_percent(index)用于获取指定平仓交易的盈亏百分比,strategy.closedtrades - 1指向最近一笔完成的交易。
  3. 最大盈亏更新逻辑:盈利时比较并更新最大盈利百分比,亏损时比较并更新最大亏损百分比(若需要显示正数亏损,可对lastTradePct使用math.abs()处理)。
  4. 输出变量设置:将统计结果赋值给独立变量,方便在策略报告或输出面板中查看数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:07:35