如何修改Pine Script代码为盈利持仓延长超时平仓时间?
修改后的Pine Script代码实现盈利持仓超时延长功能
要实现盈利持仓超时后延长一次超时的需求,我们需要新增状态记录来跟踪每个持仓是否已经使用过延长机会,具体修改如下:
//@version=5 strategy("Timeout with Profit Extension", overlay=true) // 存储每个持仓的延长状态:entry_id -> 是否已延长过 var table extendedPositions = table.new(position.top_right, 1, 0) closePosition(timeoutS, extendTimeoutS)=>( if strategy.opentrades > 0 for i = 0 to strategy.opentrades-1 entryId = strategy.opentrades.entry_id(i) entryTime = strategy.opentrades.entry_time(i) // 计算持仓当前的盈亏状态 isProfitable = strategy.opentrades.profit(i) > 0 // 检查该持仓是否已经延长过超时 hasExtended = table.haskey(extendedPositions, entryId) // 计算当前应该用的超时时间:未延长用原超时,已延长用延长后的超时 currentTimeout = hasExtended ? extendTimeoutS : timeoutS elapsedTime = time - entryTime if elapsedTime >= currentTimeout * 1000 if isProfitable and not hasExtended // 盈利且未延长过,标记该持仓为已延长 table.set(extendedPositions, entryId, true) strategy.comment(entryId, str.format("Extended timeout for {0} by {1}s", entryId, extendTimeoutS)) else // 非盈利或已延长过,执行平仓 qty = strategy.opentrades.size(i) strategy.close(entryId, comment = str.format("Close {0}-{2} by timeout {1}s", entryId, currentTimeout, i), qty = qty) // 平仓后移除延长记录 table.remove(extendedPositions, entryId) ) // 调用函数:原超时7200秒,延长超时同样设置为7200秒(可按需调整) closePosition(7200, 7200)
关键修改说明:
- 使用
var table持久化存储每个持仓的延长状态,确保图表刷新或换周期时记录不丢失 - 新增
extendTimeoutS参数,可单独指定延长的超时时长(示例中与原超时一致,可按需修改) - 通过
strategy.opentrades.profit(i) > 0判断持仓是否盈利,作为延长超时的前提条件 - 仅未使用过延长机会的盈利持仓会触发超时延长,延长后标记状态,下次超时直接平仓
- 持仓平仓后移除对应延长记录,避免无效内存占用
内容的提问来源于stack exchange,提问作者saeed
相关产品推荐
相关产品推荐

