r - quantmod 货币 (FX) 数据的准确时间戳

我们可能会使用 quantmod 包从 Oanda 和 Yahoo finance 收集日常数据:

getFX("USD/JPY",from="2007-01-01", to = Sys.Date())
getSymbols("EUR=X",src="yahoo",from="2002-01-01",auto.assign=F)

仔细检查数据后,您可能会注意到这些来源的值存在显着差异。然后我想知道每个来源当天的时间戳究竟是什么时间?看起来不是格林威治标准时间午夜。

如果你有线索,我将不胜感激。谢谢。

最佳答案

外汇是一个场外交易市场,因此没有随时设定汇率的中央交易所,但套利考虑意味着所有主要参与者(银行、对冲基金、真实货币)在任何特定时间都以大致相同的汇率定价流动市场时间(大约是美国东部标准时间周日下午 5 点(美国/纽约)至周五下午 5 点)。因此,即使对于相同的时间戳,不同的来源也可能提供略有不同的定价。考虑到这一点,以下是 Oanda 和 Yahoo 最近对 EUR/USD 的一些汇率:

library(quantmod)
getFX("EUR/USD",from="2007-01-01", to = Sys.Date())
ya2 <- getSymbols("EUR=X",src="yahoo",from="2002-01-01",auto.assign=F)

# Yahoo reports the unconventional pricing of USDEUR = 1 / EURUSD, so lets get in the conventional form EUR/USD:
ya2[, c(1, 4, 6)] <- 1 / coredata(ya2)[, c(1, 4, 6)]
ya2[, c(2, 3)] <- 1 / coredata(ya2)[, c(3, 2)]

tail(ya2, 5)
# > tail(ya2, 5)
# EUR=X.Open EUR=X.High EUR=X.Low EUR=X.Close EUR=X.Volume EUR=X.Adjusted
# 2016-12-20   1.040474   1.041992  1.035518    1.040583            0       1.040583
# 2016-12-21   1.039393   1.045151  1.038529    1.039047            0       1.039047
# 2016-12-22   1.042753   1.049759  1.042753    1.042862            0       1.042862
# 2016-12-23   1.043950   1.046792  1.042970    1.043765            0       1.043765
# 2016-12-26   1.045588   1.047011  1.044600    1.045478            0       1.045478
colnames(EURUSD) <- "Oanda"
compare <- merge(ya2, EURUSD)
indexFormat(compare) <- "%Y-%m-%d, %a"

tail(round(compare, 4), 15)
# EUR.X.Open EUR.X.High EUR.X.Low EUR.X.Close EUR.X.Volume EUR.X.Adjusted  Oanda
# 2016-12-13, Tue     1.0643     1.0653    1.0607      1.0642            0         1.0642 1.0629
# 2016-12-14, Wed     1.0630     1.0667    1.0615      1.0629            0         1.0629 1.0632
# 2016-12-15, Thu     1.0515     1.0525    1.0404      1.0514            0         1.0514 1.0468
# 2016-12-16, Fri     1.0418     1.0472    1.0404      1.0419            0         1.0419 1.0435
# 2016-12-17, Sat         NA         NA        NA          NA           NA             NA 1.0451
# 2016-12-18, Sun         NA         NA        NA          NA           NA             NA 1.0451
# 2016-12-19, Mon     1.0448     1.0482    1.0413      1.0450            0         1.0450 1.0446
# 2016-12-20, Tue     1.0405     1.0420    1.0355      1.0406            0         1.0406 1.0391
# 2016-12-21, Wed     1.0394     1.0452    1.0385      1.0390            0         1.0390 1.0413
# 2016-12-22, Thu     1.0428     1.0498    1.0428      1.0429            0         1.0429 1.0443
# 2016-12-23, Fri     1.0440     1.0468    1.0430      1.0438            0         1.0438 1.0445
# 2016-12-24, Sat         NA         NA        NA          NA           NA             NA 1.0455
# 2016-12-25, Sun         NA         NA        NA          NA           NA             NA 1.0455
# 2016-12-26, Mon     1.0456     1.0470    1.0446      1.0455            0         1.0455 1.0455
# 2016-12-27, Tue         NA         NA        NA          NA           NA             NA 1.0449

雅虎数据:

  • 首先,我们看到 yahoo 返回 OHLC 数据。我可以告诉您,yahoo 提供的收盘价 (EUR.X.Close) 对应于 UTC 午夜左右。我已经根据其他可靠(专有)的外汇报价数据定价来源对此进行了检查。

  • 此外,您可以清楚地看到开盘价 (EUR.X.Open) 与前一个柱线后的收盘价不同,因此我们可以得出结论,开盘价设置为在任何给定交易日 UTC 午夜结束的 24 小时内的某个任意时间窗口(高点和低点也将在此期间设置)。这只是雅虎创建栏的惯例,没有“对”或“错”之分,只是他们选择如何传播数据。

  • 实际上,外汇交易全天候 24/5,因此雅虎数据中存在差距。

Oanda 数据:

  • 请注意,Oanda 返回每一天的价格,包括周末和公共(public)假期,并且只返回一列值。 Oanda 返回时间序列中每一天的加权平均价格。 (它不会在美国东部标准时间下午 5 点或 UTC 午夜返回关闭数据)。为什么这会有用呢?好吧,因为许多人希望使用每日外汇数据汇率来评估不同货币等的商业交易,而 Oanda 被认为是具有可靠定价数据的可信赖名称 (https://www.oanda.com/fx-for-business/)

每天美国东部标准时间下午 5 点的流动性非常差,因为这是在外汇市场支付展期利息的时间,因此这个时间通常被用作外汇交易日的结束时间。创建每日外汇数据的合理方法是假设第一个工作日从美国东部标准时间周日下午 5 点开始,到美国东部标准时间周一下午 5 点结束,第二个工作日从美国东部标准时间周一下午 5 点开始,到美国东部标准时间周二下午 5 点结束,依此类推。这每周有 5 个甚至 24 小时的交易柱.

关于相关主题,显然上述两种来源均不可用于回溯测试日间外汇策略。如果您碰巧正在寻找每日或更高频率的免费外汇数据,一些选项包括:

  1. 来自 http://www.truefx.com/?page=downloads 的免费聚合外汇报价数据
  2. Interactive Brokers 设立一个模拟交易账户。您可以获得长达一年的 OHLC 每日滚动历史记录,以及 5 秒、30 秒、1 分钟柱状图的较短时间范围内的数据(至少我上次检查是在不久前)。
  3. DIY:在信誉良好的经纪人处开立账户并开始自己存储流式报价

https://stackoverflow.com/questions/41275039/

相关文章:

performance - numpy数组子维度上的python操作

numpy - 什么是 numpy pypi 包命名约定

scala - 如何递归获取 Scala map 中包含的每个列表的最后一个元素?

ipad - 片段着色器未读取顶点着色器 'v_gradient' 的输出

r - 目标函数中有 a_i x_i^2 项的二次规划

xamarin.ios - 如何将 -FIRAnalyticsDebugEnabled 传递给 Xa

r - 如何计算 r 中数据框中的特定子集并将计算保存在另一个列表中

spring - 如何设置 Google Cloud 以使用 AngularJS 客户端和 Java

angularjs - 运行功能和位置路径问题

apache-spark - 从 spark RDD 中删除空字符串