基于Pine Script测试隔夜收益:ETF定时入场离场方案问询
Pine Script 日线框架下实现精准隔夜交易(EST16:00进场/次日09:30离场)
需求说明
- 交易目标:测试指数ETF的隔夜收益,需在EST时间16:00(美股收盘时)进场买入,次日EST时间09:30(美股开盘时)平仓离场
- 框架限制:因TradingView低时间框架(如30分钟)回测数据仅能追溯至2022年,需基于日线时间框架实现策略
问题现象
当前编写的代码存在以下执行偏差:
- 勾选策略设置中的
on bars close选项时,以open为平仓条件的指令会延迟至次日收盘才执行 - 不勾选该选项时,入场交易会延迟至次日开盘才执行,且平仓也同步延迟至次日开盘
原代码问题分析
原代码的核心问题在于:
- 未添加持仓状态判断,导致
entry_condition=close和close_condition=open会在每个bar重复触发信号,引发交易逻辑混乱 - 未明确指定订单的执行价格和时机,受
on bars close设置影响,无法精准匹配目标时间点
修正后的代码
// © kindChile34275 //@version=5 strategy('隔夜收益测试策略', overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, margin_long=100, commission_type=strategy.commission.percent, commission_value=0.01) // 判断当前是否持有多头仓位 is_long = strategy.position_size > 0 // 入场条件:无持仓时,在当日收盘(EST16:00)进场 entry_condition = not is_long if entry_condition // 市价单在bar收盘时执行,对应EST16:00的时间点 strategy.entry("Long", strategy.long, comment="进场") // 平仓条件:持有多头仓位时,在次日开盘(EST09:30)平仓 close_condition = is_long if close_condition // 指定以开盘价限价平仓,确保在次日09:30执行 strategy.close("Long", limit=open, comment="离场")
代码说明
- 持仓状态控制:通过
is_long变量判断当前持仓情况,避免重复开仓、平仓 - 精准入场:仅在无持仓时触发入场信号,使用市价单结合日线bar的收盘时间(EST16:00)完成进场,无论是否勾选
on bars close,都能匹配目标时间点 - 精准平仓:在持有仓位时触发平仓信号,用
limit=open指定以次日开盘价执行平仓,确保订单在次日EST09:30的开盘时刻生效,彻底解决延迟平仓问题
内容的提问来源于stack exchange,提问作者Jerry Roach
相关产品推荐
相关产品推荐

