在Pine Script里,initial_capital
参数的作用,就像是给你的策略模拟账户存入第一笔本金,这笔钱不是越多越好,也不是越少越好,而是越真实越好。
为什么它如此重要?因为它直接决定了你的回测报告是否有参考价值,用100万的本金赚1万,和用1万的本金赚1万,这完全是两个概念。一个真实、合理的初始资金,是专业级回测的起点。
我们通过strategy()
函数来设置initial_capital
,比如,你想用10,000的本金开始回测,代码就这么写:
//@version=6
strategy(title="我的策略", initial_capital=10000)
initial_capital
是可选参数,它的默认值是1000000.如果你不写这个参数,策略就会默认你有100万的启动资金。
学长建议永远不要满足于默认值,除非它正好就是你计划的投入金额,请务务必根据你的实际情况,设定一个有意义的初始资金。
你设定的initial_capital
会从以下几个方面深刻影响你的策略回测:
- TradingView用初始资金来计算策略的总资金(权益),而最大回撤等关键风险指标都是基于权益计算的。
- 如果你采用按权益百分比的方式下单,那么初始资金越高,单笔交易的仓位就越大。
- 回测报告里那些百分比指标(如净利润%)是以初始资金为基数计算的。初始资金越低,同样的绝对利润,换算成的百分比就越高,反之亦然。
很多新手容易被高初始资金下平滑的百分比收益所迷惑,我建议你始终使用一个贴近你真实情况的初始资金,这样回测报告里的百分比才具有真正的参考价值,能让你更清醒地评估策略的风险收益比。
初始资金的单位,由strategy()
函数里的currency
参数决定,如果你不设置currency
,单位就默认是图表品种的计价货币(比如EURUSD图表就是美元)。如果你想用欧元作为本金,可以这样写:
//@version=6
strategy(title="我的策略", initial_capital=10000, currency=currency.EUR)
学长避坑指南
这是新手最容易犯的致命错误!TradingView的策略测试器默认是个信用无限的土豪,只要你的下单指令是固定手数或固定金额,就算账户已经亏到倒贴(权益为负),它也照样能给你开仓。
要防止这种不切实际的回测行为,你必须主动进行风险控制,将默认下单量设置为权益的百分比。使用margin_long
和margin_short
参数设置保证金,要求开仓前必须有足够的权益,在下单前,用代码检查策略的资金(strategy.equity
)是否充足。
我们来看一个交易超级趋势指标的简单策略,当趋势转为看涨时做多,转为看跌时平仓。
//@version=6
strategy(title="超级趋势 - 初始资金示例", overlay=true,default_qty_value=100)
[_, stDirection] = ta.supertrend(2.0, 10)
if stDirection < 0 and stDirection[1] > 0
strategy.entry("Enter Long", strategy.long)
if stDirection > 0 and stDirection[1] < 0
strategy.close("Enter Long", comment="Exit Long")
首先我们用默认的初始资金运行,回测报告如下:
现在,我们只改动一个地方,在strategy()
函数中加入initial_capital=10000
,将初始资金降为1万。
strategy(title="超级趋势 - 初始资金示例", overlay=true,initial_capital=10000, default_qty_value=100)
保存代码后,策略重新加载,你会发现结果却发生了变化:
这个对比清晰地告诉你,选择不同的初始资金,会如何影响策略的表现以及你对策略的评判。
除了在代码里设置,你也可以在策略设置窗口的属性标签页中,手动修改初始资,记住,手动设置会覆盖代码里的值。
总结
initial_capital
定义了策略的起始本金,设定一个贴近你真实情况的初始资金,而不是满足于默认值。起始资金的多少,会直接影响你的仓位大小(当按权益百分比下单时)和回测报告中的各项百分比指标。最重要的是,initial_canal
本身不具备风控功能,你必须主动通过保证金、动态仓位管理或代码逻辑来控制风险,防止策略在亏损后还能开出不切实际的仓位。