写策略就像造车,strategy()
里的参数就是发动机、悬挂、刹车系统的出厂调校。调校得好,策略才能在回测中跑出接近真实世界的成绩,调校得差,回测再漂亮也是空中楼阁。
今天学长就分享一套我的标准,帮你从一开始就打造一个专业级的回测环境。
- title:这是策略的大名,也是唯一必填的参数。建议名字要简短且具有描述性,比如“黄金5分钟突破策略”。
- overlay:设为
true
,策略的绘图就会直接显示在主图K线上。如果你的策略像MACD一样需要在下方独立显示,就把它设为false
或直接不写。 - pyramiding:金字塔加仓。如果你需要加仓,就把这个值设得足够大,比如10或20。它是一个硬性上限,设小了会阻碍你代码里的加仓逻辑。
- default_qty_type / default_qty_value:默认仓位大小。如果你的策略逻辑里没有复杂的资金管理,用这两个参数来设定一个标准手笔非常方便。
- margin_long / margin_short:保证金。如果你想在无杠杆、纯现货的环境下,测试策略本身逻辑的优劣,请把这两个参数都设为100。
下面是区分专业回测和业余回测的分水岭:
- initial_capital:初始资金。别用默认的100万,设一个你实盘时真正会投入的金额,比如25000。
- currency:账户货币。建议设成你交易账户的结算货币,这样回测能自动考虑汇率影响,结果更精确。
- slippage:滑点。真实交易中,市价单和止损单的成交价往往不会那么理想。对于流动性好的品种(如EURUSD),设置1-2个ticks的滑点是起码的尊重。
- commission_type / commission_value:手续费。参照你经纪商的费率来设置。强烈建议所有回测都包含手续费! 不计成本的回测,会让你高估策略的盈利能力,甚至一个本来亏损的策略,看起来也能盈利。
- backtest_fill_limits_assumption:限价单成交模拟。设置1-2个点,意味着价格需要穿过你的挂单价1-2个点才能成交,这更贴近真实情况。
- max_lines_count / max_labels_count / max_boxes_count:这三个参数限制了策略能画多少线、标签和方框。默认都是50,对于复杂策略来说常常不够用。
下面是一个应用了上述推荐设置的strategy()
函数模板。你可以把它作为你所有新策略的起点,再根据具体情况微调。
//@version=6
strategy(title="我的策略",
overlay=true,
pyramiding=10,
default_qty_type=strategy.cash,
default_qty_value=7500,
margin_long=100,
margin_short=100,
initial_capital=25000,
currency=currency.EUR,
backtest_fill_limits_assumption=2,
slippage=1,
commission_type=strategy.commission.cash_per_order,
commission_value=2,
max_lines_count=500,
max_labels_count=500,
max_boxes_count=500)
总结
不存在一套能适用于所有情况的最佳设置,一个好的配置,永远是你根据自己的策略逻辑、交易的品种特性和真实的交易成本综合考量的结果。这份指南的目的,是给你一套专业的框架,让你告别那些过于乐观、脱离实际的回测,真正开始严肃地、科学地评估你的交易策略。