TradingView突破昨日高低点交易策略编写求助
TradingView策略修正:单日突破昨日高低点开仓
需求说明
近几周一直在本站获取帮助,感谢平台和活跃成员。现需实现以下TradingView交易策略:
- 当前交易日K线高点突破昨日最高点时,开空单
- 当前交易日K线低点跌破昨日最低点时,开多单
- 单日仅触发一次入场信号,离场逻辑将自行设置止盈止损
原参考代码运行不符合预期,请求修正。
修正后的完整代码
strategy(title="突破昨日高低点开仓策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, commission_type=strategy.commission.percent, commission_value=0.1) // 判断新交易日开始 isNewSession = ta.change(time("D")) != 0 // 保存昨日高低点的变量 var float yesterdayHigh = na var float yesterdayLow = na // 每日开盘时更新昨日高低点 if isNewSession yesterdayHigh := high[1] yesterdayLow := low[1] // 标记当日是否已触发过开仓信号 var bool longTriggeredToday = false var bool shortTriggeredToday = false // 每个新交易日重置触发标记 if isNewSession longTriggeredToday := false shortTriggeredToday := false // 多单入场条件:今日低点跌破昨日低点 + 当日未触发过 entryLong = low < yesterdayLow and not longTriggeredToday // 空单入场条件:今日高点突破昨日高点 + 当日未触发过 entryShort = high > yesterdayHigh and not shortTriggeredToday // 执行开仓并标记已触发 if entryLong strategy.entry("多单", strategy.long) longTriggeredToday := true if entryShort strategy.entry("空单", strategy.short) shortTriggeredToday := true // -------------------------- // 测试用离场逻辑(用户可自行替换为止盈止损) // -------------------------- barSinceLong = ta.barssince(strategy.position_size > 0) barSinceShort = ta.barssince(strategy.position_size < 0) if barSinceLong > 10 strategy.close("多单") if barSinceShort > 10 strategy.close("空单")
核心修正点
- 简化交易日判断:用
ta.change(time("D"))直接识别新交易日,无需自定义时段,完美匹配1天交易日的需求 - 精准保存历史高低点:每日开盘时将前一交易日的高低点存入独立变量,避免盘中实时更新导致的逻辑错误
- 单日信号过滤机制:通过布尔变量标记当日是否已触发开仓,彻底避免单日重复开仓
- 修正价格比较逻辑:移除原代码中错误的绘图对象引用,直接使用价格变量进行突破判断
- 优化代码可读性:调整变量命名,逻辑分层清晰,便于后续修改扩展
原代码问题分析
- 错误引用绘图对象:原代码用
sessionBox[1]判断突破,sessionBox是绘图用的矩形对象,不能用于价格数值比较 - 历史值保存逻辑错误:
sessionHighPrice在盘中会持续更新,无法固定保存昨日的最高点 - 缺少单日信号限制:未设置触发标记,可能导致同一交易日内多次触发开仓信号
- 入场时机错误:空单条件加入
not inSession,会导致信号在盘外触发,不符合正常交易逻辑
内容的提问来源于stack exchange,提问作者honeybadger21
相关产品推荐
相关产品推荐

