策略脚本简介
Pine Script® 的 strategy 专门用于在历史与实时行情上模拟交易,帮助量化爱好者快速完成回测与前瞻测试。
与 indicator 脚本类似,strategy 可以调用几乎全部技术指标,但额外拥有:
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)关键代码解析
strategy()声明脚本类型。margin_long/short设定「全额保证金」风格,等同实际账户需 100% 保证金才可开仓。strategy.entry():第一条同名订单会自动反向平仓,随后按方向开新仓,免去繁琐判断。
把策略挂到图表上
- 打开 Pine Editor,粘贴脚本 → Add to chart。
- 也可直接在「技术指标&策略」中输入内置策略名称。
成功后:
- K 线图上出现三角形买卖标记
- 右侧 策略测试器 刷新 Overview、Performance 等页面
策略测试器深度解读
Overview 概览
- 绿色线:Equity(策略权益)
- 灰色线:Buy & Hold(全仓买入并持有)
- 红色柱:Drawdown(回撤深度)
点击任一曲线节点,主图会自动滚动到对应 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)订单与成交
- Order:脚本向模拟器发出的买卖指令
- Trade:订单被撮合后产生的成交记录
示例:每 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
strategy.entry()—— 简化入场,可自动反向、遵守金字塔strategy.order()—— 自由度最高,无视金字塔、反向等属性strategy.exit()—— 给指定 ID 做止盈、止损、尾随止损strategy.close()close_all()—— 直接市价平仓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 提供两级控制:
- 全局默认值:
default_qty_type = strategy.cash,default_qty_value = 5000 - 单笔覆盖:在
strategy.entry()内写qty = 3
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,让你的策略在回测与实战中都站稳脚。祝你交易顺利!