Pine Script 策略全攻略:从回测到订单管理的完整指南

·

策略脚本简介

Pine Script® 的 strategy 专门用于在历史与实时行情上模拟交易,帮助量化爱好者快速完成回测与前瞻测试。
与 indicator 脚本类似,strategy 可以调用几乎全部技术指标,但额外拥有:

只要在脚本顶部写上:

strategy("测试策略", overlay=true)

系统便会在图表右侧自动生成「策略测试器」面板,方便对比不同参数的表现。


第一条策略:双均线交叉

下面这段最经典的范例,以 MA 交叉作为入场信号:

//@version=6
strategy("简易均线交叉", overlay = true,
         margin_long = 100, margin_short = 100)

lengthInput = input.int(14, "均线周期")
fastMA = ta.sma(close, lengthInput)
slowMA = ta.sma(close, lengthInput * 2)

if ta.crossover(fastMA, slowMA)
    strategy.entry("多", strategy.long)

if ta.crossunder(fastMA, slowMA)
    strategy.entry("空", strategy.short)

plot(fastMA, "快线", color.aqua)
plot(slowMA, "慢线", color.orange)

👉 想让这条策略立即跑出绩效?点我查看进阶调参思路。

关键代码解析

  1. strategy() 声明脚本类型。
  2. margin_long/short 设定「全额保证金」风格,等同实际账户需 100% 保证金才可开仓。
  3. strategy.entry():第一条同名订单会自动反向平仓,随后按方向开新仓,免去繁琐判断。

把策略挂到图表上

  1. 打开 Pine Editor,粘贴脚本 → Add to chart。
  2. 也可直接在「技术指标&策略」中输入内置策略名称。
  3. 成功后:

    • K 线图上出现三角形买卖标记
    • 右侧 策略测试器 刷新 Overview、Performance 等页面

策略测试器深度解读

Overview 概览

点击任一曲线节点,主图会自动滚动到对应 K 线。

Performance Summary

把长、短、全部三方交易拆成三列统计数据,方便一眼评判策略是否具有方向不对称优势。

List of Trades

倒序列出每笔成交,包含入场时间、价格、合约数、盈亏及累计回撤。鼠标悬停按「Scroll to bar」可瞬转图表。

Properties

折叠式面板,展示:


Broker 模拟机制

TradingView 使用「经纪模拟器」撮合订单,且默认仅用 OHLC
开盘若贴近高价,模拟器假设:开→高→低→收;反之同理。因此 同一根 K 线的止盈止损可能在默认设定下无法触发。

Bar Magnifier「高分辨率回测」

Premium 以上账户可开启 use_bar_magnifier=true,策略会引用更低级别数据计算 真实路径,显著减少漏单假象:

strategy("BAR 放大镜示例",
         overlay = true,
         use_bar_magnifier = true)

订单与成交

示例:每 20 根 K 线开多,下一根平仓。

//@version=6
strategy("每20根K线交易", overlay = true)

if bar_index % 20 == 0
    strategy.entry("多", strategy.long)

strategy.close_all()  // 每根K线都尝试全部平仓

由于 close_all() 只在 持有仓位 时生效,因此不会异常空平。


四大订单类型

类型触发条件适用场景
Market下一跳立即成交快速入场、平仓
Limit指定价 或更优价低吸高抛
Stop市价触及或突破指定价突破追单
Stop-Limit触发 Stop 后挂 Limit 单突破但防极端滑点

示例:800 跳止损多单

stopPrice = close + syminfo.mintick * 800
strategy.entry("追多", strategy.long, stop = stopPrice)

下单、平仓、撤单 API

  1. strategy.entry() —— 简化入场,可自动反向、遵守金字塔
  2. strategy.order() —— 自由度最高,无视金字塔、反向等属性
  3. strategy.exit() —— 给指定 ID 做止盈、止损、尾随止损
  4. strategy.close() close_all() —— 直接市价平仓
  5. strategy.cancel() cancel_all() —— 撤掉未成交挂单

常见问题与答疑

Q1:为什么有时 strategy.entry() 明明触发了却没开新仓?

A:可能触及「金字塔 (Pyramiding)」上限。在 strategy(pyramiding = N) 中把 N 提高即可。

Q2:如何让一个策略同时持有多个方向的仓位?

A:需 strategy.order() 结合独立 ID 自行维护仓位;strategy.entry() 侧重单方向。

Q3:回测显示盈利,但实盘滑点大怎么办?

A:将佣金、滑点填到 strategy(commission=..., slippage=...) 再跑一次。
👉 立即体验纯波动率策略的实战模拟

Q4:Trailing Stop 总前移怎么固定与 K 线最高距离?

A:使用 trail_offset 设定跳数即可:strategy.exit("x", trail_price=high, trail_offset=100)

Q5:多笔同 ID 入场合在一起后如何分别出场?

A:为每次 entry 用不同 ID;或用 strategy.exit("exit1", "buy1") 指定 from_entry

Q6:Bar Magnifier 在哪打开?

A:代码 use_bar_magnifier=true 或在「设置 → 属性 → 使用 Bar Magnifier」中勾选。


头寸与仓位规划

Pine 提供两级控制:

if low == ta.lowest(20)
    strategy.entry("低吸", strategy.long,
                   qty = close <= 100 ? 5 : 2)

保留全局默认并动态切换示例:

longQty = input.float(0, "手数(0 用默认)")
strategy.entry("多", strategy.long,
               qty = longQty == 0 ? na : longQty)

平仓顺序与 FIFO

默认「先进先出 (FIFO)」,即最早的那单先出场。若想任意平某笔入场,请改用:

strategy("任意平仓示范",
         close_entries_rule = "ANY")

这样配合 strategy.close("Buy1") 即可精准狙击某笔 ID。


总结

熟练掌握 Pine Script 策略,等于同时拥有了快速回测框架 + 完整订单生命周期管理能力。
先从均线交叉这类经典逻辑起步,再一步步叠加 金字塔、尾随止盈、Bar Magnifier,让你的策略在回测与实战中都站稳脚。祝你交易顺利!