请求协助:在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
相关产品推荐
相关产品推荐

