Pinescript存储K线高低值逻辑异常无交易触发问题求助
核心错误排查
1. 状态变量未持久化存储
你定义的candlehigh、candlelow没有加var关键字,Pine Script每根K线执行时都会重新初始化所有非var变量,意味着你上一根K线记录的阴线高低值会在新K线加载时被重置为0.0,自然无法匹配后续突破条件。
2. 逻辑分支冲突
- 两个相同触发条件
enable == true and close < candlelow的分支重复定义,优先级低的分支永远不会执行 - 平仓逻辑被放在
enable == true的判断下,而你开仓后已经把enable设为false,开仓后的平仓判断永远不会触发
3. 更新记录的条件不符合需求
你当前只要收盘价低于记录低点就更新高低值,需求要求的是出现新的阴线且收盘价低于原低点才更新,逻辑匹配错误
4. 缺少开仓后的跟踪止损逻辑
需求里开仓后要跟踪阳线收盘价抬升同步更新止损点的逻辑完全没有实现,即使开仓也无法触发平仓
修正后完整代码
//@version=4 strategy("9gag", pyramiding = 1, overlay=true) // 加var关键字持久化存储,避免每根K线重置 var float record_high = na var float record_low = na var bool in_position = false var float stop_loss = na // 开仓前逻辑:跟踪阴线记录 if not in_position // 首次出现阴线 或 新阴线收盘价低于原记录低点,更新记录 if close < open if na(record_high) or close < record_low record_high := high record_low := low // 突破记录高点开多 if close > record_high and not na(record_high) strategy.entry("long", strategy.long, 1.0) in_position := true stop_loss := record_low // 初始止损为原记录低点 // 开仓后逻辑:跟踪阳线抬升止损 if in_position // 阳线收盘价抬升,更新止损为当前阳线低点,可根据需求替换为收盘价 if close > open and close > close[1] stop_loss := math.max(stop_loss, low) // 收盘价低于止损平仓 if close < stop_loss strategy.close("long") in_position := false // 重置开仓前记录,等待新阴线 record_high := na record_low := na
关键修正说明
- 所有需要跨K线保留的状态变量都加了
var关键字,确保值不会被意外重置 - 拆分了开仓前、开仓后两个独立逻辑分支,避免状态冲突
- 调整记录更新规则,仅当新阴线出现且收盘价低于原记录低点时才更新高低值
- 补充了开仓后的跟踪止损逻辑,阳线抬升时同步上移止损,跌破止损触发平仓
内容的提问来源于stack exchange,提问作者HappyTurtle
相关产品推荐
相关产品推荐

