Pine Script策略问题:如何在K线内部而非收盘价开多单
问题分析与解决方案
你的代码存在两个核心问题,导致无法在K线内部触发开仓:
1. ta.crossover 参数逻辑错误
ta.crossover(a, b) 用于检测a从下向上穿过b,但你传入的第一个参数是固定值15343,第二个是K线的low。由于15343是常量,它的前值和当前值完全相同,永远无法满足“从下向上穿过”的条件。即便你想检测low上穿15343,low是K线的最低价(仅在K线收盘后确定),也无法在K线内部的tick级触发。
2. strategy.entry 参数误用
你设置的stop=5是将止损价设为5,而非入场触发价,这会导致开仓逻辑混乱。
修正后的代码
要在K线内部(tick级)触发开仓,需要用当前tick的最新价(close在tick级模式下代表最新价)来判断,并确保calc_on_every_tick=true生效:
//@version=5 strategy(title = 'Simple Strategy', shorttitle = 'Simple Strategy', overlay = true, calc_on_every_tick = true) // 检测当前tick最新价上穿15343 is_long_trigger = ta.crossover(close, 15343) if (is_long_trigger) // 市价开多,可根据需求添加止损/止盈 strategy.entry(id = "Long", direction = strategy.long, qty = 1, comment = str.tostring(close))
补充说明
calc_on_every_tick=true确实会让脚本在每个tick实时计算,但必须配合tick级的价格条件(比如用close而非bar级的low/high)才能在K线内部触发动作。- 如果需要在价格触及15343时挂单开仓,可改用
limit或stop参数指定入场价,例如:if (ta.close < 15343) // 挂限价单,价格到15343时开多 strategy.entry(id = "Long", direction = strategy.long, qty = 1, limit = 15343)
内容的提问来源于stack exchange,提问作者user2883072
相关产品推荐
相关产品推荐

