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

请求协助:在Pinescript策略中统计特定时间区间内最长Losing Streak

在Pinescript策略中实现指定时间区间内最长亏损连亏统计功能

需要实现特定日期范围内所有交易的最长亏损连亏次数统计,当前代码仅能获取当前的亏损连亏次数,无法遍历所有已执行交易并返回最大值。当前代码如下:

// Determine current losing streak length
streakLen = 0
streakLen := if (newLoss)
    nz(streakLen[1]) + 1
else
    if (strategy.wintrades > strategy.wintrades[1]) or
         (strategy.eventrades > strategy.eventrades[1])
        0
    else
        nz(streakLen[1])

解决方案代码

以下是实现指定时间区间内最长亏损连亏统计的完整代码,核心是用var变量持久化最长连亏记录,并在每次交易结束时更新统计:

//@version=5
strategy("最长亏损连亏统计", overlay=true)

// 1. 定义统计的时间区间(示例:2023年全年)
startDate = timestamp(2023, 1, 1)
endDate = timestamp(2023, 12, 31)
inTimeRange = time >= startDate and time <= endDate

// 2. 初始化持久化变量:当前连亏长度、最长连亏长度
var int currentStreak = 0
var int maxLosingStreak = 0

// 3. 检测新结束的交易
newClosedTrade = strategy.closedtrades > strategy.closedtrades[1]

if newClosedTrade and inTimeRange
    // 获取最新结束交易的盈亏状态
    latestProfit = strategy.closedtrades.profit(strategy.closedtrades - 1)
    isLoss = latestProfit < 0
    isWinOrEven = latestProfit >= 0

    if isLoss
        // 亏损交易:连亏长度+1
        currentStreak := currentStreak + 1
        // 实时更新最长连亏(如果当前连亏超过历史最大值)
        if currentStreak > maxLosingStreak
            maxLosingStreak := currentStreak
    else
        // 盈利/平手交易:重置当前连亏长度
        currentStreak := 0

// 4. 输出结果(可在图表上显示或在数据窗口查看)
plot(maxLosingStreak, title="最长亏损连亏", color=color.red, linewidth=2)
plot(currentStreak, title="当前连亏", color=color.orange, linewidth=1)

关键逻辑说明

  • var变量:currentStreak和maxLosingStreak用var声明,确保在整个回测周期内只初始化一次,保留历史状态
  • 交易检测:通过strategy.closedtrades的变化判断是否有新交易结束,确保只在交易完成时更新统计
  • 时间区间过滤:inTimeRange变量控制仅统计指定日期范围内的交易,超出区间的交易不参与计算
  • 实时更新:每次亏损交易结束时,立即比较当前连亏长度与历史最大值,更新最长连亏记录

内容的提问来源于stack exchange,提问作者Ruslan Ali-zade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:10:29