You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script如何实现价格穿越SMA时按SMA价格精准开仓

问题根源

你写的代码有三个核心错误,直接导致了价格、时点偏差和漏单:

  • 均线绘图加了offset=1,会把整条MA线往右挪1根K线的位置,你图上看到的穿越点和代码实际计算的MA位置根本对不上,属于视觉误导。
  • ta.cross(close, moving_average)只有等整根K线走完、收盘价定下来才会触发,这时候你再挂限价单,订单实际是下根K线才进队列,既错过了穿越的时间点,要是下根K线直接跳空离MA很远,碰不到你挂的限价自然就不会成交,就是你说的漏开仓。
  • 没收盘的K线的close是跟着实时tick变动的,用这个值算出来的MA也是来回飘的,你拿浮动的价格当限价单委托价,自然不可能精准成交在你想要的固定MA位置。
可直接运行的正确代码
//@version=5
strategy(
    title="SMA穿越精准开仓策略", 
    overlay=true, 
    initial_capital=10000, 
    precision=5, 
    pyramiding=9999999999, 
    calc_on_every_tick=true
)

// 参数配置
sma_len = input.int(20, title="SMA周期", minval=1)
// 取上一根K线收盘后就完全固定的SMA值作为委托基准,不会随当前tick波动
fixed_ma = ta.sma(close[1], sma_len)
// 实时SMA仅用于绘图,不做交易判断
plot_ma = ta.sma(close, sma_len)
plot(plot_ma, color=color.new(color.blue, 0), title="SMA", linewidth=2)

// 穿越条件:前一根K线收盘价在MA一侧,当前K线价格触及MA价位即判定为穿越
prev_close = close[1]
cross_over = prev_close < fixed_ma and high >= fixed_ma  // 上穿做多条件
cross_under = prev_close > fixed_ma and low <= fixed_ma // 下穿做空条件

// 上穿时挂限价多单,委托价就是固定MA值,当前K线内有效
if cross_over
    strategy.entry("多单", strategy.long, limit=fixed_ma)

// 需要下穿开空就把下面两行的注释去掉
// if cross_under
//     strategy.entry("空单", strategy.short, limit=fixed_ma)
逻辑说明
  • 委托用的MA价格是上一根K线收盘后就定死的值,不会跟着当前K线的实时价格来回跳,保证成交价格完全等于对应位置的SMA价格。
  • 不再等K线收盘才判断穿越,开启tick级计算后,只要实时价格碰到MA价位就会立刻成交,时点完全匹配穿越发生的时刻,不会延迟到下一根K线。
  • 去掉了MA绘图的偏移参数,图上看到的均线位置和策略实际计算的位置完全一致,不会出现视觉错位。
  • 代码里加了SMA周期的可调参数,你可以直接在策略设置里改周期,不用改代码。默认只开上穿做多的逻辑,需要双向交易放开空单部分的注释就行。

内容的提问来源于stack exchange,提问作者RemRois

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:54:23