我们来设想一个真实的场景:
你是一位身在欧洲的交易员,账户里存的是欧元,但你每天都在交易美国的纳斯达克指数(以美元USD计价)。那么问题来了:你账户里的10万欧元,今天到底能买多少价值的纳指期货?明天呢?这个购买力是固定的吗?
今天我们就来聊聊Pine策略如何通过initial_capital
和currency
这两个参数,精准地模拟这种跨币种交易的真实购买力变化。
首先我们回顾一下这两个工具:initial_capital
:设定策略的初始资金数额;currency
:设定策略的账户货币单位。一个最关键的概念是:initial_capital
的单位,永远由currency
参数决定。
根据currency
设置的不同,你的初始资金会呈现出三种不同的状态:
- 场景一:如果你不设置
currency
参数,那你的initial_capital
就只是一个“默认值”,简单但不严谨,无法进行跨市场策略的同标准比较。 - 场景二:当你的账户货币和你交易的品种货币相同时(比如用美元账户交易美股),不发生任何货币换算,你的购买力就是你的初始资金面值。
- 场景三:当你用欧元账户(
currency=currency.EUR
)去交易美元计价的品种时,TradingView会根据当时的汇率,计算出你的10万欧元,到底等同于多少美元的购买力。
TradingView的货币换算,使用的是相关外汇对前一个交易日的收盘价,这意味着在整个交易日内,换算汇率是固定的,每天更新一次。这和经纪商的实时汇率换算会有些许差异,对于长线策略影响不大,但你需要了解这个机制。
我们不用真实交易,只用plot()
函数把策略的初始资金购买力画出来,效果一目了然。
示例1:我们设定10万初始资金,但不指定货币。
//@version=6
strategy(title="没有货币转换的初始资金",
overlay=false, initial_capital=100000)
// 不设置货币,资金恒定不变
plot(strategy.initial_capital)
当把这个脚本应用到一个美元计价的图表上时,初始资金被视为10万美元,并且在整个回测期间,它是一条纹丝不动的直线:
示例2:我们模拟用一个10万欧元的账户,去交易美元资产。
//@version=6
strategy(title="有货币转换的初始资金", overlay=false,
currency=currency.EUR, initial_capital=100000)
// 获取昨日收盘价作为今天的汇率
eurUSDrate = request.security("EURUSD", "D", close[1])
// 绘制
plot(strategy.initial_capital * eurUSDrate)
我们做了两件事:在strategy()
函数中,将账户货币设为currency.EUR
。为了验证,我们手动获取了EUR/USD的每日汇率,然后将10万欧元的本金乘以该汇率,得到等值的美元购买力,并将其绘制出来:
你会发现两个关键变化:一、由于汇率影响,10万欧元的购买力,通常会大于10万美元;二、购买力曲线不再是一条直线, 它每天都在随着汇率的变动而上下浮动,这才是跨币种交易的真实世界!
总结
initial_capital
的单位由currency
决定,当你用一个特定货币的账户(例如欧元),去交易另一个货币计价的品种时(例如美元),TradingView会自动进行汇率换算,来决定你的真实购买力。由于汇率每天都在变,你的购买力也会随之每日波动,正确地设置currency
和initial_capital
,是进行严谨、专业的全球化市场策略回测不可或缺的一环。