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

Pine Script计算多单开平仓间动态长度最低low报错求解

Pine Script 动态计算多头头寸持仓区间最低值修正方案

错误根源

  • ta.lowest属于序列计算类函数,Pine要求这类函数必须在每根K线的全局作用域执行,不能放在if分支、三元运算符等条件触发的作用域内,否则会触发计算一致性报错
  • max_bars_back报错是因为动态长度的ta.lowest放在条件分支内时,Pine无法提前推断函数需要的最大回溯K线数量,导致运行时内存分配异常

修正后可运行代码

var maeLong         = 0.0
var maxMaeLong      = 0.0
var sinceTrade      = 0

// 全局范围计算动态长度的最低low,每根K线都执行,满足ta.lowest的调用要求
lowest_in_trade = ta.lowest(low, sinceTrade)

// 持仓周期计数逻辑
if strategy.position_size != 0
    sinceTrade  := sinceTrade + 1
else
    sinceTrade  := 0

// 多头平仓触发时计算MAE
if strategy.closedtrades[0] > strategy.closedtrades[1] and strategy.position_size[1] > 0
    // 平仓时sinceTrade已被重置为0,取上一根K线的持仓周期、对应区间最低值
    trade_duration = sinceTrade[1]
    if trade_duration > 0
        entry_price = open[trade_duration]
        trade_low = lowest_in_trade[1]
        maeLong := (entry_price - trade_low) / entry_price
        maxMaeLong := math.max(maxMaeLong, maeLong)

关键修改说明

  • 将ta.lowest的调用移到全局作用域,每根K线都执行,完全匹配Pine的函数调用规则
  • 平仓计算时统一取上一根K线的计算结果,避免持仓周期被平仓逻辑重置后取值错误
  • 新增持仓周期大于0的边界判断,避免除以0或者无效回溯的问题
  • 用内置math.max替代三元运算符,代码更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:57:04