你的交易账户是欧元区的,但你主要交易纳斯达克指数和美国股票,那么你最终关心的,不是策略赚了多少美元,而是这些美元换算成欧元后,对你的账户净值到底有多大贡献。
Pine策略里的currency
参数,就是帮你自动完成这个关键换算的财务总管,它能让你的回测报告,完全以你指定的账户货币来呈现,从而真实地模拟跨市场交易的最终损益。
我们通过strategy()
函数来配置currency
。比如,要让策略以一个欧元账户进行回测,代码就这么写:
//@version=6
strategy(title="我的策略", currency=currency.EUR)
currency
是可选参数,如果你不设置它,策略将默认使用图表交易品种自身的计价货币,并且不进行任何汇率换算。
TradingView支持多种主流货币和加密货币进行回测。你需要使用下表中对应的常量值来设定。
避坑指南:这里的货币不是随便写的,必须是上表中官方支持的,如果你写了一个冷门货币代码,脚本会直接报错。
一旦你设定了账户货币,TradingView会自动以该货币来计算和呈现策略的方方面面,包括策略测试器中的所有绩效报告(净利润、回撤等)、初始资金 (initial_capital
)、策略的总权益 (strategy.equity
)、默认下单量(当使用固定现金价值或权益百分比模式时)、手续费等。
当账户货币和交易品种的计价货币不同时,TradingView会在后台自动进行汇率换算,确保结果的准确性。
我们来看一个EMA的简单策略,当连续三根K线收于均线上方时做多,反之做空。
策略代码:
//@version=6
strategy(title="货币示例", overlay=true, default_qty_value=100)
emaValue = ta.ema(ta.ema(close, 25), 3)
plot(emaValue, color=color.teal, linewidth=2, title="平滑的 EMA")
// 连续三根K线站上EMA,做多
if close > emaValue and close[1] > emaValue[1] and close[2] > emaValue[2]
strategy.entry("Enter Long", strategy.long)
// 连续三根K线跌破EMA,做空
if close < emaValue and close[1] < emaValue[1] and close[2] < emaValue[2]
strategy.entry("Enter Short", strategy.short)
我们将这个策略应用在以美元计价的图表上,由于没有设置currency
,所有回测结果都以美元呈现:
现在,我们模拟一个欧洲交易元,他的账户是欧元区的,我们只需在strategy()
函数中加入currency=currency.EUR
:
strategy(title="货币示例", overlay=true, default_qty_value=100,
currency=currency.EUR)
保存代码后,策略的交易信号、开平仓位置完全没有改变,但策略测试器中的所有绩效报告,现在都自动换算成了欧元:
现在这份报告才真正反映了该策略对于一个欧元账户的真实影响。你也可以在策略设置窗口的“属性”标签页中,通过“基准货币”选项来手动更改策略的货币。手动设置会覆盖代码中的设定。学长建议无论你交易的品种是否与你的账户货币相同,都在strategy()
函数里明确指定你的账户货币。这是一种专业的、有前瞻性的编码习惯,可以避免你日后将策略应用到其他市场的品种时,忘记调整而导致回测结果失真。
总结
currency
参数是所有进行跨市场、跨币种交易的策略开发者必须掌握的工具。- 它能让你的回测报告“本地化”,真实反映策略对你本币账户的最终损益。
- 养成在代码中明确指定
currency
的习惯,能让你的策略更严谨、更具通用性。