基于午间价格的交易策略问题:无法引用午间价格及画线
问题分析与代码修正
原代码的核心问题是错误地将绘图用的line对象直接与价格进行交叉判断,line是Pine Script中的绘图元素,不能作为数值参与价格比较。需要单独存储午间12点的价格值,再基于该数值实现交易逻辑与绘图。
修正后的代码
//@version=5 strategy("午间价格线策略", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000) // 午间时间设置(12:00) noonHour = 12 noonMinute = 0 // 标记12:00的bar isNoonBar = (hour(time) == noonHour) and (minute(time) == noonMinute) // 存储每日午间价格(用var确保只初始化一次,每日更新) var float noonPrice = na if isNoonBar noonPrice := high // 这里用high,和原逻辑一致,可根据需求改为close/open/low // 绘制午间价格线 var line noonLine = na if isNoonBar // 如果已有旧线,先删除避免重复 if not na(noonLine) line.delete(noonLine) // 创建新的向右延伸的价格线 noonLine := line.new(bar_index, noonPrice, bar_index + 1, noonPrice, extend=extend.right, color=color.red, width=2) // 交易时间限制:12:31之后到收盘(这里用纽约时区) allowedTradeTime() => time(timeframe.period, session="1231-1500", timezone="America/New_York") != na // 交易条件:价格突破午间价格线 entryCondition = ta.crossover(close, noonPrice) and allowedTradeTime() exitCondition = ta.crossunder(close, noonPrice) // 执行交易 if entryCondition strategy.entry("开多", strategy.long, profit=40) // profit参数是点数,需确保与品种适配 if exitCondition strategy.close("开多") // 直接平仓更简洁,也可保留strategy.exit逻辑
关键修改说明
- 存储午间价格:用
var float noonPrice保存每日12:00 bar的high值,var关键字确保变量不会在每根bar重置,仅在每日12点更新。 - 修正绘图逻辑:每次12点先删除旧的价格线,再创建新线,避免画面中出现多条重复线;绘图基于
noonPrice数值,而非直接操作line对象。 - 修复交易条件:用
noonPrice(数值)与close做交叉判断,替代原代码中错误的line对象比较。 - 优化平仓逻辑:用
strategy.close直接平仓,比strategy.exit更简洁,若需设置止损可自行添加参数。
内容的提问来源于stack exchange,提问作者GuyInFLA
相关产品推荐
相关产品推荐

