Pine脚本:为何策略在奇数索引K线入场(设定条件为偶数K线)?
Pine脚本偶数K线入场指令却在奇数K线成交的原因
你在代码中指定当bar_index % 2 == 0(偶数索引K线)时执行strategy.entry开多单,但实际入场成交发生在奇数索引K线,核心原因是Pine脚本策略的订单默认执行逻辑:
当你在某一根K线(bar_index=N)触发strategy.entry等订单指令时,该K线此时尚未走完(还没有最终的收盘价),策略无法在当前K线完成成交。因此,所有未指定成交价格的订单,默认会在下一根K线(bar_index=N+1)的开盘价执行成交。
对应你的代码:
- 当
bar_index为偶数时,发出入场指令 - 指令会延迟到下一根K线(奇数索引)执行,所以你看到入场成交在奇数K线
你的代码
//@version=5 strategy("TEST STRATEGY 2", overlay=true) backtestStartDate = input.time(timestamp("01 Apr 2023 12:05:00 GMT+02:00"), title="Start Date", group="Backtest Time Period") backtestEndDate = input.time(timestamp("01 Apr 2023 12:15:00 GMT+02:00"), title="End Date", group="Backtest Time Period") inTradeWindow = time > backtestStartDate and time <= backtestEndDate if inTradeWindow if bar_index % 2 == 0 strategy.entry("My Long Entry", strategy.long) else strategy.close("My Short Entry") a = str.tostring(bar_index) label.new(bar_index, na, a, yloc = yloc.abovebar, size = size.normal,textcolor = color.white)
验证与解决思路
如果想要让订单在当前偶数K线成交,你需要明确指定成交价格,比如使用当前K线的开盘价、收盘价或者某个特定价位,通过strategy.entry的limit或stop参数来实现。例如:
// 在当前偶数K线的收盘价成交 strategy.entry("My Long Entry", strategy.long, limit=close)
这样订单会尝试在当前K线的收盘价成交,就不会延迟到下一根K线了。
内容的提问来源于stack exchange,提问作者ailauli69
相关产品推荐
相关产品推荐

