如何在TradingView的Pine Script中实现指定周几当日开仓当日平仓?
问题:如何在指定周几的日线K线开盘开仓、收盘平仓?
我是TradingView和Pine Script新手,想要编写策略在指定周几的K线开盘时开仓,同一根K线收盘时平仓,以此回测不同周几的表现。
最初尝试用小时周期回测,在当日特定时段开平仓,但发现该方式不合理——不同标的交易时段不同,且同一标的历史交易时段也可能变化。随后改为日线周期编写,但现有代码出现问题:
//@version=5 strategy("Моя стратегия", overlay=true) long_entry = dayofweek(time) == 2 // Monday long_exit = dayofweek(time) == 2 // Monday if (long_entry) strategy.entry("Long", strategy.long) if (long_exit) strategy.close("Long")
使用上述代码时,策略会在次日开仓、一周后平仓;若设置process_orders_on_close = true,则会在当日收盘时开仓,一周后平仓。
请问如何实现指定周几的K线开盘时开仓、同一根K线收盘时平仓?我需在同一根K线收盘时精准平仓以避免跳空。
解决方案
要实现日线周期下指定周几开盘开仓、收盘平仓,关键是利用Pine Script的K线状态变量精准控制订单触发时机,同时正确配置策略参数。
修正后的代码
//@version=5 strategy("指定周几日内平仓策略", overlay=true, process_orders_on_close=true) // 指定目标周几(2=周一,3=周二,以此类推) target_day = 2 // 开盘开仓条件:当前是目标周几,且处于K线开盘瞬间 long_entry = dayofweek(time) == target_day and barstate.isopen // 收盘平仓条件:当前是目标周几,且处于K线收盘瞬间 long_exit = dayofweek(time) == target_day and barstate.isclose // 执行开仓 if (long_entry) strategy.entry("Long", strategy.long) // 执行平仓 if (long_exit) strategy.close("Long")
关键说明
barstate.isopen/barstate.isclose:这两个内置变量分别标记当前K线的开盘、收盘瞬间,确保开平仓动作严格限制在同一根K线内完成。process_orders_on_close=true:必须开启该参数,才能让收盘时的平仓订单以当前K线收盘价执行,彻底规避持仓过夜的跳空风险。- 周几数值对应:
dayofweek(time)的返回值为:1=周日,2=周一,3=周二,4=周三,5=周四,6=周五,7=周六,修改target_day即可切换测试不同周几的策略表现。
内容的提问来源于stack exchange,提问作者Dishlen
相关产品推荐
相关产品推荐

