如何在Pine Script中计算收盘价105%以设置TradingView开仓条件
Pine Script 开仓逻辑修正实现
原有代码核心问题
- 未定义SMA指标变量
sma1 - 使用
close[0]==point的精确匹配逻辑触发开仓不符合实际交易场景,价格极少刚好收在指定的计算价位 strategy.entry默认是市价单,没有通过限价参数指定你要求的105%/95%开仓价- 多空的cross判断逻辑不一致,做多判断了
close上穿,做空却判断了low下穿,规则不统一
修正后完整代码
//@version=4 strategy("SMA突破策略", overlay=true) // 自定义SMA参数,可自行调整周期 sma_period = input(20, title="SMA周期") sma1 = sma(close, sma_period) // 计算突破K线对应的开仓限价 var float long_entry_price = na var float short_entry_price = na // 条件1+2:突破SMA的K线满足阳/阴要求 breakthrough_long = crossover(close, sma1) and close > open breakthrough_short = crossunder(close, sma1) and close < open // 存储突破K线的收盘价计算开仓价 if breakthrough_long long_entry_price := close * 1.05 if breakthrough_short short_entry_price := close * 0.95 // 条件3:突破后的第二根K线满足阳/阴要求,同时满足价格触发限价单条件 condition_long = not na(long_entry_price) and close[1] > open[1] and high >= long_entry_price condition_short = not na(short_entry_price) and close[1] < open[1] and low <= short_entry_price // 开仓:指定limit参数按要求价位开仓,开仓后重置存储的开仓价 if condition_long strategy.entry("做多", strategy.long, 100, limit=long_entry_price) long_entry_price := na if condition_short strategy.entry("做空", strategy.short, 100, limit=short_entry_price) short_entry_price := na // 平仓设置,这里的profit/loss单位是点数,可根据你交易品种调整 strategy.exit("多单平仓", "做多", profit = 100, loss = 50) strategy.exit("空单平仓", "做空", profit = 100, loss = 50) // 可选:在K线上标记SMA和开仓价位 plot(sma1, color=color.blue, title="SMA") plotshape(condition_long, title="做多信号", location=location.belowbar, color=color.green, style=shape.labelup, text="多") plotshape(condition_short, title="做空信号", location=location.abovebar, color=color.red, style=shape.labeldown, text="空")
关键逻辑说明
- 用
var关键字定义的变量会保留历史值,用来存储突破K线计算出的开仓限价,避免后续K线刷新丢失数值 - 放弃精确收盘价匹配,改用
high >= 开仓价/low <= 开仓价判断价格触及目标位,符合实际交易的限价单成交规则 strategy.entry的limit参数直接指定开仓价位,完全满足你第四步的要求- 开仓完成后立刻重置存储的开仓价,避免重复触发同一次突破的开仓信号
- 原有平仓逻辑的
profit参数数值太小,默认单位是最小变动价位,你可以根据自己交易的品种(股票/加密货币/期货)自行调整数值
内容的提问来源于stack exchange,提问作者J.Drey
相关产品推荐
相关产品推荐

