保持敬畏之心
交易是一场持久战

Pine Script(67):汇率的延迟对回测结果的影响

#Pine Script入门教学

我们前面学习到,用currency参数可以模拟跨币种回测,非常方便。但一个敏感的问题随之而来:TradingView用的是昨天的汇率来换算,而我的券商用的是实时汇率,这会导致我的回测报告失真吗?这个差异到底有多大?值得我们担心吗?

今天学长就带你用一个实验,把这个问题彻底看清楚。

我们的实验设计很简单:

  1. 我们写一个策略,设定账户为欧元(currency=currency.EUR),然后去交易一个以美元计价的品种。
  2. 这个策略很特别,它会在每根K线上都稳定地赚或亏10美元。这样我们就能排除交易逻辑的干扰,专门观察这10美元在换算成欧元时发生的变化。
  3. 我们用三条不同颜色的线,来追踪这10美元换算成欧元后的样子:
    1. 蓝线:TradingView官方的换算结果。
    2. 红点:我们自己模拟的昨日汇率换算结果。
    3. 紫线:我们模拟的实时汇率换算结果(用1分钟数据代替)。

通过对比这三条线,我们就能直观地看到汇率延迟到底造成了多大的差异。

下面是完整代码:

//@version=6
strategy(title="示例 - TradingView中的货币换算",currency=currency.EUR)

// 设定每根固定有 10 USD 需要换成 EUR
tenUsd = 10.0

// 蓝线:TV官方汇率
tvUsdToEur = request.currency_rate(currency.USD, currency.EUR)
blue_tv_eur = tenUsd * tvUsdToEur
plot(blue_tv_eur, color=color.blue, linewidth=2, title="TV官方换算(10USD→EUR)")

// 红点:昨日日线汇率
dailyEURUSD_prev = request.security("EURUSD", "D", close[1], lookahead=barmerge.lookahead_off)
red_prev_eur = tenUsd / dailyEURUSD_prev
plot(red_prev_eur, color=color.new(color.red, 30), style=plot.style_circles, linewidth=3, title="昨日汇率(10USD→EUR)")

// 紫线:取当日最后1分钟
eurusd_minute = request.security("EURUSD", "1", close, lookahead=barmerge.lookahead_off)
purple_min_eur = tenUsd / eurusd_minute
plot(purple_min_eur, color=color.purple, linewidth=3, title="分钟汇率(10USD→EUR)")

当我们将脚本加载到图表上,结果一目了然:

从图上我们可以清晰地看到:蓝线和红点几乎完全重合,这证明了TV确实是使用了前一天的收盘价作为当天的换算汇率。紫线和蓝/红线非常接近,虽然紫线因为日内波动而上下起伏,但它和代表昨日汇率的蓝/红线之间的差异非常小。在汇率波动更剧烈的时候,差异可能会稍微变大,但整体上依然处于很小的范围内。

经过这个实验,我们可以得出一个清晰且让人放心的结论,对于绝大多数中长线策略,TradingView的汇率延迟所造成的差异小到可以忽略不计。因为从长期来看,今天汇率比昨天高,你可能占了便宜;明天汇率比昨天低,你可能吃了亏,这些微小的差异在成百上千笔交易中,会相互抵消。更重要的与其去纠结这百分之一都不到的汇率换算差异,你更应该把精力放在那些能让回测结果产生10%甚至50%偏差的巨坑上,比如:你是否合理设置了手续费和滑点?你的策略是否存在未来函数?抓大放小,这才是专业策略开发者应有的精力分配和关注点。

总结

TradingView在进行跨币种回测时,使用的是相关外汇对前一交易日的收盘价作为换算汇率,这与经纪商使用的实时汇率存在微小差异,但实验证明,这个差异对于大多数策略来说影响极小。相比于手续费、滑点等核心成本,汇率换算的微小差异不应成为你评估策略时的主要担忧。

赞(0)
未经允许不得转载:图道交易 » Pine Script(67):汇率的延迟对回测结果的影响
分享到

评论 抢沙发

登录

找回密码

注册