在TradingView里,strategy()
函数是每个策略脚本的心脏,每一个策略都必须调用它,否则脚本就只是个普通的指标,无法执行回测。
更重要的是,一些决定策略回测真实性的高级功能,比如滑点、手续费、保证金等,并没有手动设置的入口,只能通过strategy()
函数在代码层面进行配置。可以说要让你的回测尽可能贴近实战,就必须先搞定strategy()
。
strategy()
函数只有一个必填参数:title
,也就是给你的策略起个名字。
所以一个最简单的策略声明就是这样:
strategy(title="我的策略")
这段代码会给策略命名,这个名字会显示在图表和下方的策略测试器窗口中。
虽然strategy()
函数可以放在代码的任何位置,但一定要把它放在版本声明//@version=6
的下一行,这让任何读你代码的人都能第一眼就看到策略的核心配置。
//@version=6
strategy(title="我的策略")
// 交易逻辑、下单指令
一个专业的策略远不止起个名字这么简单,我们需要配置各种参数,来模拟真实世界的交易环境。
- 示例1:订单与绘图
//@version=6
strategy(title="我的策略", process_orders_on_close=true,
max_labels_count=100, max_lines_count=250)
这里process_orders_on_close=true
是一个非常关键的设置,它让策略在当前K线收盘时就立刻处理订单成交,而不是等到下一根K线的开盘价,这更符合很多交易者的操作习惯。max_labels_count
和max_lines_count
则增加了策略在图上能画的标签和线条数量。
- 示例2:交易成本与初始资金
//@version=6
strategy(title="我的策略", backtest_fill_limits_assumption=2,
slippage=2, margin_long=10, margin_short=10, initial_capital=100000)
这个例子就非常贴近实战了,initial_capital
设定了10万的初始资金、slippage=2
为市价单和止损单设置了2个点的滑点、margin_long
和margin_short
将保证金比例都设为10%。backtest_fill_limits_assumption=2
则模拟了限价单需要价格超过2个点才能成交,让回测更保守、更真实。
很多新手写策略,从不设置手续费和滑点,看到漂亮的回测曲线就沾沾自喜,一旦实盘,结果往往惨不忍睹。记住不考虑交易成本的回测,都是自欺欺人。
- 示例3:仓位管理与订单设置
//@version=6
strategy(title="我的策略", overlay=true, pyramiding=10,
default_qty_type=strategy.cash, default_qty_value=2000)
这个例子展示了仓位管理的设置,overlay=true
让策略的绘图直接叠加在主图上,pyramiding=10
是加仓的关键,它允许在同一方向上最多持有10笔订单,default_qty_type
和default_qty_value
则设定了默认的下单方式:每次开仓动用2000美元的仓位(这个和mt4的余额类似但也有一些差异,平时大家提到的仓位是手数)。
strategy()
参数详解
strategy()
的参数非常多,但幸运的是,你不需要全部记住。下面是完整的参数列表,我会帮你解读其中最重要的部分。
总结
- 每个TradingView策略都必须有且仅有一次
strategy()
函数调用。 title
是唯一必填的参数。- 为了让回测结果不失真,
initial_capital
,slippage
,commission_type
,commission_value
这几个模拟真实交易环境的参数,是你每次写策略时都应该优先考虑配置的。 - 虽然可以在图表界面上手动修改策略参数,但把所有核心设置都写在
strategy()
函数里,是更专业、更便于分享和复现的做法。