1 简介

binary.com 面试试题 I - GARCH模型中的ARIMA(p,d,q)参数最优化添加了季节性和比较模型精准性。目前还测试下archm=TRUE是否会更精准,详情请参阅[问答] 请问怎样用R语言产生arch, arch-m, garch, garch-m的随机数?

suppressPackageStartupMessages(require('BBmisc'))

## 读取程序包
pkg <- c('lubridate', 'plyr', 'dplyr', 'magrittr', 'stringr', 'rugarch', 'forecast', 'quantmod', 'memoise', 'microbenchmark', 'knitr', 'kableExtra', 'formattable')
suppressAll(lib(pkg))

funs <- c('task_progress.R') %>% paste0('function/', .)
l_ply(funs, source)
rm(pkg, funs)

2 数据

首先读取Binary.com Interview Q1 (Extention)的汇市数据。

cr_code <- c('AUDUSD=X', 'EURUSD=X', 'GBPUSD=X', 'CHF=X', 'CAD=X', 
             'CNY=X', 'JPY=X')

#'@ names(cr_code) <- c('AUDUSD', 'EURUSD', 'GBPUSD', 'USDCHF', 'USDCAD', 
#'@                     'USDCNY', 'USDJPY')

names(cr_code) <- c('USDAUD', 'USDEUR', 'USDGBP', 'USDCHF', 'USDCAD', 'USDCNY', 'USDJPY')

price_type <- c('Op', 'Hi', 'Lo', 'Cl')

## 读取雅虎数据。
mbase <- sapply(names(cr_code), function(x) readRDS(paste0('./data/', x, '.rds')) %>% na.omit)

数据简介报告。

sapply(mbase, summary) %>% 
  kable %>% 
  kable_styling(bootstrap_options = c('striped', 'hover', 'condensed', 'responsive')) %>%
  scroll_box(width = '100%', height = '400px')
USDAUD USDEUR USDGBP USDCHF USDCAD USDCNY USDJPY
Min. :2012-01-02 Min. :2012-01-02 Min. :2012-01-02 Min. :2012-01-02 Min. :2012-01-02 Min. :2012-01-02 Min. :2012-01-02
1st Qu.:2013-05-31 1st Qu.:2013-05-31 1st Qu.:2013-05-30 1st Qu.:2013-06-03 1st Qu.:2013-05-30 1st Qu.:2013-05-29 1st Qu.:2013-05-29
Median :2014-10-31 Median :2014-10-31 Median :2014-10-31 Median :2014-11-03 Median :2014-10-30 Median :2014-10-30 Median :2014-10-30
Mean :2014-10-31 Mean :2014-10-31 Mean :2014-10-30 Mean :2014-11-01 Mean :2014-10-30 Mean :2014-10-30 Mean :2014-10-30
3rd Qu.:2016-03-30 3rd Qu.:2016-03-30 3rd Qu.:2016-03-30 3rd Qu.:2016-03-31 3rd Qu.:2016-03-29 3rd Qu.:2016-03-30 3rd Qu.:2016-03-30
Max. :2017-08-30 Max. :2017-08-30 Max. :2017-08-30 Max. :2017-08-30 Max. :2017-08-30 Max. :2017-08-30 Max. :2017-08-30
Min. :0.925 Min. :0.7180 Min. :0.5830 Min. :0.8540 Min. :0.968 Min. :6.031 Min. : 76.18
1st Qu.:1.037 1st Qu.:0.7580 1st Qu.:0.6250 1st Qu.:0.9220 1st Qu.:1.029 1st Qu.:6.189 1st Qu.: 97.86
Median :1.148 Median :0.8080 Median :0.6460 Median :0.9540 Median :1.127 Median :6.284 Median :103.91
Mean :1.176 Mean :0.8285 Mean :0.6702 Mean :0.9504 Mean :1.167 Mean :6.365 Mean :103.71
3rd Qu.:1.322 3rd Qu.:0.8980 3rd Qu.:0.6950 3rd Qu.:0.9780 3rd Qu.:1.308 3rd Qu.:6.524 3rd Qu.:114.27
Max. :1.458 Max. :0.9620 Max. :0.8310 Max. :1.0300 Max. :1.458 Max. :7.478 Max. :125.60
Min. :0.927 Min. :0.7190 Min. :0.5830 Min. :0.8710 Min. :0.971 Min. :6.040 Min. : 76.20
1st Qu.:1.042 1st Qu.:0.7610 1st Qu.:0.6260 1st Qu.:0.9250 1st Qu.:1.032 1st Qu.:6.195 1st Qu.: 98.29
Median :1.153 Median :0.8130 Median :0.6490 Median :0.9570 Median :1.131 Median :6.295 Median :104.19
Mean :1.181 Mean :0.8318 Mean :0.6732 Mean :0.9539 Mean :1.171 Mean :6.375 Mean :104.07
3rd Qu.:1.327 3rd Qu.:0.9020 3rd Qu.:0.6990 3rd Qu.:0.9810 3rd Qu.:1.313 3rd Qu.:6.529 3rd Qu.:114.72
Max. :1.464 Max. :1.3150 Max. :1.5690 Max. :1.0330 Max. :1.469 Max. :7.481 Max. :125.82
Min. :0.921 Min. :0.7150 Min. :0.5820 Min. :0.7330 Min. :0.963 Min. :2.201 Min. : 76.05
1st Qu.:1.031 1st Qu.:0.7560 1st Qu.:0.6230 1st Qu.:0.9180 1st Qu.:1.026 1st Qu.:6.185 1st Qu.: 97.46
Median :1.142 Median :0.8050 Median :0.6440 Median :0.9500 Median :1.123 Median :6.270 Median :103.54
Mean :1.171 Mean :0.8256 Mean :0.6681 Mean :0.9469 Mean :1.164 Mean :6.355 Mean :103.32
3rd Qu.:1.316 3rd Qu.:0.8940 3rd Qu.:0.6920 3rd Qu.:0.9730 3rd Qu.:1.303 3rd Qu.:6.515 3rd Qu.:113.74
Max. :1.447 Max. :0.9600 Max. :0.8270 Max. :1.0280 Max. :1.449 Max. :6.945 Max. :124.97
Min. :0.9253 Min. :0.7178 Min. :0.5827 Min. :0.8544 Min. :0.9683 Min. :6.031 Min. : 76.18
1st Qu.:1.0369 1st Qu.:0.7582 1st Qu.:0.6247 1st Qu.:0.9216 1st Qu.:1.0286 1st Qu.:6.190 1st Qu.: 97.85
Median :1.1478 Median :0.8081 Median :0.6463 Median :0.9538 Median :1.1263 Median :6.285 Median :103.93
Mean :1.1759 Mean :0.8285 Mean :0.6702 Mean :0.9504 Mean :1.1673 Mean :6.365 Mean :103.71
3rd Qu.:1.3216 3rd Qu.:0.8981 3rd Qu.:0.6952 3rd Qu.:0.9775 3rd Qu.:1.3076 3rd Qu.:6.524 3rd Qu.:114.24
Max. :1.4575 Max. :0.9624 Max. :0.8306 Max. :1.0302 Max. :1.4578 Max. :6.960 Max. :125.63
Min. :0 Min. :0 Min. :0 Min. :0 Min. :0 Min. :0 Min. :0
1st Qu.:0 1st Qu.:0 1st Qu.:0 1st Qu.:0 1st Qu.:0 1st Qu.:0 1st Qu.:0
Median :0 Median :0 Median :0 Median :0 Median :0 Median :0 Median :0
Mean :0 Mean :0 Mean :0 Mean :0 Mean :0 Mean :0 Mean :0
3rd Qu.:0 3rd Qu.:0 3rd Qu.:0 3rd Qu.:0 3rd Qu.:0 3rd Qu.:0 3rd Qu.:0
Max. :0 Max. :0 Max. :0 Max. :0 Max. :0 Max. :0 Max. :0
Min. :0.9253 Min. :0.7178 Min. :0.5827 Min. :0.8544 Min. :0.9683 Min. :6.031 Min. : 76.18
1st Qu.:1.0369 1st Qu.:0.7582 1st Qu.:0.6247 1st Qu.:0.9216 1st Qu.:1.0286 1st Qu.:6.190 1st Qu.: 97.85
Median :1.1478 Median :0.8081 Median :0.6463 Median :0.9538 Median :1.1263 Median :6.285 Median :103.93
Mean :1.1759 Mean :0.8285 Mean :0.6702 Mean :0.9504 Mean :1.1673 Mean :6.365 Mean :103.71
3rd Qu.:1.3216 3rd Qu.:0.8981 3rd Qu.:0.6952 3rd Qu.:0.9775 3rd Qu.:1.3076 3rd Qu.:6.524 3rd Qu.:114.24
Max. :1.4575 Max. :0.9624 Max. :0.8306 Max. :1.0302 Max. :1.4578 Max. :6.960 Max. :125.63

桌面2.1:数据简介。

3 统计建模

3.1 ARCH in Mean

opt_arma <- function(mbase){
  #ARMA Modeling minimum AIC value of `p,d,q`
  fit <- auto.arima(mbase)
  arimaorder(fit)
  }

再来就设置mean.model模型中的参数为archm = TRUE

calc_fx <- memoise(function(mbase, currency = 'JPY=X', ahead = 1, price = 'Cl') {
  
  source('function/filterFX.R')
  source('function/opt_arma.R')
  
  mbase = suppressWarnings(filterFX(mbase, currency = currency, price = price))
  armaOrder = opt_arma(mbase)
  
  spec = ugarchspec(
    variance.model = list(
      model = 'gjrGARCH', garchOrder = c(1, 1), 
      submodel = NULL, external.regressors = NULL, 
      variance.targeting = FALSE), 
    mean.model = list(
      armaOrder = armaOrder[c(1, 3)], 
      include.mean = TRUE, archm = TRUE, 
      archpow = 1, arfima = TRUE, 
      external.regressors = NULL, 
      archex = FALSE), 
    fixed.pars = list(arfima = armaOrder[2]), 
    distribution.model = 'snorm')
  
  fit = ugarchfit(spec, mbase, solver = 'hybrid')
  
  fc = ugarchforecast(fit, n.ahead = ahead)
  res = tail(attributes(fc)$forecast$seriesFor, 1)
  colnames(res) = names(mbase)
  latestPrice = tail(mbase, 1)

  latestPrice <- xts(latestPrice)

  return(list(latestPrice = latestPrice, forecastPrice = res, 
             AIC = infocriteria(fit)))
  })

4 模拟数据

4.1 回测数据

以下僕运行数据测试后事先储存,然后直接读取。首先过滤timeID时间参数,然后才模拟预测汇价。

timeID <- llply(mbase, function(x) as.character(index(x))) %>% 
  unlist %>% unique %>% as.Date %>% sort
timeID <- c(timeID, xts::last(timeID) + days(1))
timeID0 <- ymd('2013-01-01')
timeID <- timeID[timeID >= timeID0]

模拟calc_fx()函数预测汇价数据。

## ------------- 模拟calc_fx()预测汇价 ----------------------
pred3 <- list()

for (dt in timeID) {
  
  for (i in seq(cr_code)) {
    
    smp <- mbase[[names(cr_code)[i]]]
    dtr <- xts::last(index(smp[index(smp) < dt]), 1)
    smp <- smp[paste0(dtr %m-% years(1), '/', dtr)]
    
    pred3[[i]] <- ldply(price_type, function(y) {
      df = calc_fx(smp, currency = cr_code[i], price = y)
      df = data.frame(Date = index(df[[1]][1]), 
                      Type = paste0(names(df[[1]]), '.', y), 
                      df[[1]], df[[2]], t(df[[3]]))
      names(df)[4] %<>% str_replace_all('1', 'T+1')
      df
    })
    
    if (!dir.exists(paste0('data/fx/', names(pred3[[i]])[3]))) 
      dir.create(paste0('data/fx/', names(pred3[[i]])[3]))
    
    saveRDS(pred3[[i]], paste0(
      'data/fx/', names(pred3[[i]])[3], '/pred3.', 
      unique(pred3[[i]]$Date), '.rds'))
    
    cat(paste0(
      'data/fx/', names(pred3[[i]])[3], '/pred3.', 
      unique(pred3[[i]]$Date), '.rds saved!\n'))
    
    }; rm(i)
  }

4.2 查询进度

查询模拟测试进度的函数task_progress()如下。

## ------------- 查询缺失文件 ----------------------
## 查询缺失文件。
dts <- sapply(mbase, function(x) {
  y = index(x)
  y[y >= timeID0]
  })

#'@ sapply(mbase, function(x) as.character(index(x)) %>% as.Date %>% sort)

fls <- sapply(names(cr_code), function(x) {
   fls <- list.files(paste0('./data/fx/', x), pattern = '^pred3') %>% 
     str_extract_all('[0-9]{4}-[0-9]{2}-[0-9]{2}') %>% 
     unlist %>% as.Date %>% sort
   dts[[x]][!dts[[x]] %in% fls] %>% sort
   })

#'@ timeID <- sapply(fls, function(x) timeID[!timeID %in% x] %>% sort)

#'@ timeID <- llply(fls, function(x) timeID[!timeID %in% x] %>% sort) %>% unlist %>% as.Date %>% sort
#'@ names(timeID) <- NULL
#'@ timeID %<>% unique
## ------------- 模拟calc_fx()预测汇价 ----------------------
pred3 <- list()

for (i in seq(cr_code)) {
  
  timeIDi <- fls[[names(cr_code)[i]]]
  for (dt in timeIDi) {
    
    smp <- mbase[[names(cr_code)[i]]]
    dtr <- xts::last(index(smp[index(smp) < dt]), 1)
    smp <- smp[paste0(dtr %m-% years(1), '/', dtr)]
    
    pred3[[i]] <- ldply(price_type, function(y) {
      df = calc_fx(smp, currency = cr_code[i], price = y)
      df = data.frame(Date = index(df[[1]][1]), 
                      Type = paste0(names(df[[1]]), '.', y), 
                      df[[1]], df[[2]], t(df[[3]]))
      names(df)[4] %<>% str_replace_all('1', 'T+1')
      df
    })
    
    if (!dir.exists(paste0('data/fx/', names(pred3[[i]])[3]))) 
      dir.create(paste0('data/fx/', names(pred3[[i]])[3]))
    
    saveRDS(pred3[[i]], paste0(
      'data/fx/', names(pred3[[i]])[3], '/pred3.', 
      unique(pred3[[i]]$Date), '.rds'))
    
    cat(paste0(
      'data/fx/', names(pred3[[i]])[3], '/pred3.', 
      unique(pred3[[i]]$Date), '.rds saved!\n'))
    
    }
  }; rm(i)

模拟完毕后,再来就查看数据结果。

## calc_fx()模拟数据误差率
task_progress(.pattern = '^pred3', .loops = FALSE)
## Current Tokyo Time : 2018-10-17 14:15:15 
## ^pred3 
## 
##      .id    x    n progress
## 1 USDAUD 1088 1215   89.55%
## 2 USDEUR 1033 1215   85.02%
## 3 USDGBP 1037 1216   85.28%
## 4 USDCHF 1072 1215   88.23%
## 5 USDCAD 1033 1214   85.09%
## 6 USDCNY 1019 1215   83.87%
## 7 USDJPY  929 1215   76.46%
## 
## ================ 84.79% ================

以上结果显示,模拟后的数据的误差率非常渺小1。以下筛选pred1pred2pred3同样日期的有效数据。

##数据1
fx1 <- llply(names(cr_code), function(x) {
    fls <- list.files(paste0('data/fx/', x), pattern = '^pred1')
    dfm <- ldply(fls, function(y) {
        readRDS(paste0('data/fx/', x, '/', y))
    }) %>% data.frame(Cat = 'pred1', .) %>% tbl_df
    names(dfm)[4:5] <- c('Price', 'Price.T1')
    dfm
 })
names(fx1) <- names(cr_code)

##数据2
fx2 <- llply(names(cr_code), function(x) {
    fls <- list.files(paste0('data/fx/', x), pattern = '^pred2')
    dfm <- ldply(fls, function(y) {
        readRDS(paste0('data/fx/', x, '/', y))
    }) %>% data.frame(Cat = 'pred2', .) %>% tbl_df
    names(dfm)[4:5] <- c('Price', 'Price.T1')
    dfm
 })
names(fx2) <- names(cr_code)

##数据3
fx3 <- llply(names(cr_code), function(x) {
    fls <- list.files(paste0('data/fx/', x), pattern = '^pred3')
    dfm <- ldply(fls, function(y) {
        readRDS(paste0('data/fx/', x, '/', y))
    }) %>% data.frame(Cat = 'pred3', .) %>% tbl_df
    names(dfm)[4:5] <- c('Price', 'Price.T1')
    dfm
 })
names(fx3) <- names(cr_code)

#合并,并且整理数据。
fx1 %<>% ldply %>% tbl_df
fx2 %<>% ldply %>% tbl_df
fx3 %<>% ldply %>% tbl_df
fx <- suppressAll(bind_rows(fx1, fx2, fx3) %>% arrange(Date) %>% 
  mutate(.id = factor(.id), Cat = factor(Cat)) %>% 
  ddply(.(Cat, Type), function(x) {
    x %>% mutate(Price.T1 = lag(Price.T1, 1))
  }) %>% tbl_df %>% 
    dplyr::filter(Date >= ymd('2013-01-01') & Date <= ymd('2017-08-30')))

rm(fx1, fx2, fx3)
## filter all predictive error where sd >= 20%.
notID <- fx %>% mutate(diff = abs(Price.T1/Price), se = ifelse(diff <= 0.8 | diff >= 1.25, 1, 0)) %>% dplyr::filter(se == 1)
ntimeID <- notID %>% .$Date %>% unique
notID %>% 
  kable(caption = 'Error data') %>% 
  kable_styling(bootstrap_options = c('striped', 'hover', 'condensed', 'responsive')) %>%
  scroll_box(width = '100%', height = '400px')
Error data
.id Cat Date Type Price Price.T1 Akaike Bayes Shibata Hannan.Quinn diff se
USDCHF pred1 2015-07-28 USDCHF.Op 0.96200 -1.674244e+03 -6.8550360 -6.6916003 -6.8589917 -6.7893476 1.740378e+03 1
USDCHF pred1 2015-01-15 USDCHF.Lo 0.73300 1.016502e+00 -5.7998611 -5.7181433 -5.8008790 -5.7670169 1.386770e+00 1
USDCNY pred1 2014-07-10 USDCNY.Lo 2.20100 6.186397e+00 -2.7132659 -2.6313229 -2.7142915 -2.6803275 2.810721e+00 1
USDCNY pred1 2014-07-14 USDCNY.Lo 6.19600 1.294872e+00 -3.1503936 -3.0138219 -3.1531877 -3.0954962 2.089852e-01 1
USDJPY pred1 2013-06-27 USDJPY.Op 98.46800 7.839498e+01 4.7132866 4.7950044 4.7122687 4.7461308 7.961468e-01 1
USDJPY pred1 2013-06-30 USDJPY.Op 99.41100 7.839644e+01 4.7356084 4.8175514 4.7345828 4.7685468 7.886093e-01 1
USDJPY pred1 2013-07-01 USDJPY.Op 99.65400 7.839575e+01 4.7442829 4.8260007 4.7432649 4.7771270 7.866794e-01 1
USDJPY pred1 2013-07-02 USDJPY.Op 100.75900 7.839261e+01 1.7915659 1.9277623 1.7887926 1.8463062 7.780210e-01 1
USDJPY pred1 2013-07-08 USDJPY.Op 100.84200 7.838671e+01 4.8397137 4.9214315 4.8386958 4.8725579 7.773220e-01 1
USDJPY pred1 2013-07-09 USDJPY.Op 101.15100 7.838619e+01 4.8622946 4.9440124 4.8612766 4.8951387 7.749423e-01 1
USDJPY pred1 2013-07-10 USDJPY.Op 98.55200 7.838294e+01 4.8830765 4.9647943 4.8820585 4.9159206 7.953460e-01 1
USDJPY pred1 2013-07-11 USDJPY.Op 99.04400 7.838286e+01 6.2292809 6.3109987 6.2282630 6.2621251 7.913943e-01 1
USDJPY pred1 2013-06-27 USDJPY.Cl 98.47600 7.837708e+01 4.7137633 4.7954811 4.7127453 4.7466074 7.959003e-01 1
USDJPY pred1 2013-06-30 USDJPY.Cl 99.38000 7.838315e+01 1.7831265 1.9196981 1.7803324 1.8380238 7.887216e-01 1
USDJPY pred1 2013-07-08 USDJPY.Cl 100.85000 7.837327e+01 4.8404863 4.9222042 4.8394684 4.8733305 7.771272e-01 1
USDJPY pred1 2013-07-09 USDJPY.Cl 101.15300 7.837277e+01 4.8630598 4.9447776 4.8620419 4.8959040 7.747944e-01 1
USDJPY pred1 2013-07-10 USDJPY.Cl 98.55100 7.836954e+01 1.8879646 2.0241610 1.8851913 1.9427049 7.952181e-01 1
USDJPY pred1 2013-07-14 USDJPY.Cl 99.19700 7.836681e+01 5.8363249 5.9182679 5.8352993 5.8692633 7.900119e-01 1
USDCHF pred2 2015-01-15 USDCHF.Lo 0.73300 1.015055e+00 -7.9840623 -7.9023445 -7.9850802 -7.9512181 1.384795e+00 1
USDCHF pred2 2015-01-19 USDCHF.Lo 0.85700 1.187461e+00 -6.7992062 -6.7036061 -6.8005954 -6.7607781 1.385603e+00 1
USDCHF pred2 2015-01-20 USDCHF.Lo 0.86900 5.503465e-01 -7.9199131 -7.8245756 -7.9212918 -7.8815949 6.333102e-01 1
USDCNY pred2 2014-07-10 USDCNY.Lo 2.20100 6.185327e+00 -4.7024502 -4.6068501 -4.7038394 -4.6640221 2.810235e+00 1
USDCNY pred2 2014-07-13 USDCNY.Lo 6.19400 2.894085e+00 -7.0835967 -6.9740372 -7.0854159 -7.0395523 4.672400e-01 1
USDAUD pred3 2013-05-26 USDAUD.Op 1.03800 2.149825e+08 -7.7910736 -7.6541243 -7.7938887 -7.7360182 2.071122e+08 1
USDAUD pred3 2013-06-19 USDAUD.Hi 1.09100 -2.849556e+92 -7.8462592 -7.6823732 -7.8502445 -7.7803824 2.611875e+92 1
USDEUR pred3 2016-06-21 USDEUR.Op 0.88900 -2.200873e+86 -7.5804181 -7.4169825 -7.5843739 -7.5147298 2.475673e+86 1
USDEUR pred3 2016-06-23 USDEUR.Op 0.88300 -1.560483e+60 -7.5164378 -7.4211004 -7.5178166 -7.4781196 1.767252e+60 1
USDEUR pred3 2016-08-22 USDEUR.Op 0.88400 5.314573e+81 -7.6184189 -7.4545329 -7.6224041 -7.5525420 6.011960e+81 1
USDEUR pred3 2013-05-01 USDEUR.Hi 0.76700 6.561433e+87 -8.3548021 -8.2318876 -8.3570762 -8.3053944 8.554672e+87 1
USDEUR pred3 2014-09-14 USDEUR.Lo 0.77100 9.628148e+10 -9.2971615 -9.1876021 -9.2989807 -9.2531172 1.248787e+11 1
USDEUR pred3 2014-09-07 USDEUR.Cl 0.77200 4.397289e+66 -9.1685158 -9.0452614 -9.1708071 -9.1189659 5.695970e+66 1
USDEUR pred3 2016-08-21 USDEUR.Cl 0.88510 -1.467838e+61 -7.6011727 -7.4368335 -7.6051877 -7.5351061 1.658387e+61 1
USDEUR pred3 2017-08-15 USDEUR.Cl 0.85170 1.175697e+130 -7.9843501 -7.8477785 -7.9871442 -7.9294528 1.380413e+130 1
USDGBP pred3 2014-01-28 USDGBP.Op 0.60300 6.371246e+96 -8.7015868 -8.5513580 -8.7049515 -8.6411997 1.056591e+97 1
USDGBP pred3 2014-02-04 USDGBP.Op 0.61300 -2.147650e+73 -8.7024014 -8.5521725 -8.7057660 -8.6420142 3.503507e+73 1
USDGBP pred3 2013-02-18 USDGBP.Hi 0.64800 8.111759e+90 -9.2937837 -9.1435549 -9.2971484 -9.2333966 1.251815e+91 1
USDGBP pred3 2014-12-17 USDGBP.Hi 0.63900 1.758558e+101 -9.5824091 -9.4734520 -9.5842012 -9.5386169 2.752047e+101 1
USDGBP pred3 2014-06-03 USDGBP.Lo 0.59600 4.417575e+121 -9.3046283 -9.1680567 -9.3074224 -9.2497310 7.412038e+121 1
USDGBP pred3 2015-02-10 USDGBP.Lo 0.65600 -4.717264e+51 648.3458551 648.4956711 648.3425153 648.4060694 7.190951e+51 1
USDGBP pred3 2013-01-02 USDGBP.Cl 0.61550 4.106476e+120 -9.1841693 -9.0890929 -9.1855377 -9.1459604 6.671772e+120 1
USDCHF pred3 2015-01-19 USDCHF.Lo 0.85700 1.073049e+00 -7.9311942 -7.8219368 -7.9329997 -7.8872762 1.252100e+00 1
USDCAD pred3 2014-03-03 USDCAD.Op 1.10600 -2.544890e+129 -8.1669079 -8.0710434 -8.1683075 -8.1283691 2.300986e+129 1
USDCAD pred3 2014-04-24 USDCAD.Op 1.10200 -3.773474e+136 -8.0934038 -7.9978037 -8.0947930 -8.0549757 3.424205e+136 1
USDCAD pred3 2016-05-02 USDCAD.Op 1.25300 -9.813572e+66 178.5857162 178.8042308 178.5787630 178.6735520 7.832060e+66 1
USDCAD pred3 2016-05-03 USDCAD.Op 1.27000 -1.119022e+52 -6.9061880 -6.7699917 -6.9089613 -6.8514477 8.811193e+51 1
USDCAD pred3 2017-04-11 USDCAD.Hi 1.33400 -2.485373e+77 -7.2164382 -7.0530026 -7.2203939 -7.1507498 1.863098e+77 1
USDCAD pred3 2016-09-18 USDCAD.Lo 1.31400 -4.556215e+124 -6.9687274 -6.8591679 -6.9705466 -6.9246830 3.467439e+124 1
USDCAD pred3 2017-03-10 USDCAD.Cl 1.35068 1.007990e+99 -7.1626518 -6.9992162 -7.1666075 -7.0969634 7.462831e+98 1
USDCNY pred3 2014-07-16 USDCNY.Op 6.19400 -2.161076e+130 -7.7428458 -7.6199313 -7.7451200 -7.6934382 3.488983e+129 1
USDCNY pred3 2014-08-28 USDCNY.Op 6.13300 4.637545e+41 -7.6174117 -7.4944972 -7.6196859 -7.5680041 7.561626e+40 1
USDCNY pred3 2013-07-28 USDCNY.Hi 6.13100 6.130398e+53 -6.1170230 -5.9941085 -6.1192971 -6.0676154 9.999018e+52 1
USDCNY pred3 2015-12-08 USDCNY.Hi 6.40800 -1.408030e+108 -6.5687395 -6.4185107 -6.5721042 -6.5083524 2.197300e+107 1
USDCNY pred3 2014-07-10 USDCNY.Lo 2.20100 6.184813e+00 -4.7116519 -4.6023945 -4.7134574 -4.6677339 2.810002e+00 1
USDCNY pred3 2014-07-13 USDCNY.Lo 6.19400 2.922895e+00 -7.0759875 -6.9527331 -7.0782788 -7.0264376 4.718914e-01 1
USDCNY pred3 2013-03-20 USDCNY.Cl 6.21380 -4.395002e+125 -6.6128037 -6.4766073 -6.6155770 -6.5580634 7.072969e+124 1
USDCNY pred3 2013-03-25 USDCNY.Cl 6.17220 -3.942912e+117 -6.5141681 -6.4049108 -6.5159737 -6.4702502 6.388179e+116 1
USDJPY pred3 2014-07-06 USDJPY.Op 102.10700 1.168959e+70 1.4865118 1.6234611 1.4836967 1.5415672 1.144838e+68 1
USDJPY pred3 2014-12-17 USDJPY.Hi 117.49700 -9.546942e+140 1.1218412 1.2307983 1.1200491 1.1656334 8.125265e+138 1
USDJPY pred3 2013-02-06 USDJPY.Lo 93.30800 -3.423249e+39 0.7655411 0.9013645 0.7627884 0.8201253 3.668763e+37 1
USDJPY pred3 2013-03-13 USDJPY.Lo 95.48000 5.100789e+105 332.7194061 332.9100810 332.7140723 332.7960425 5.342260e+103 1
USDJPY pred3 2013-03-19 USDJPY.Lo 94.77000 4.589526e+81 1.8334754 2.0241503 1.8281416 1.9101118 4.842805e+79 1
USDJPY pred3 2014-06-23 USDJPY.Lo 101.81000 -2.563847e+64 584.4345597 584.5847886 584.4311950 584.4949468 2.518266e+62 1
USDJPY pred3 2014-07-06 USDJPY.Cl 102.11000 -3.808324e+02 1.4441756 1.5811249 1.4413605 1.4992310 3.729629e+00 1

僕尝试运行好几次,USDCHF都是获得同样的结果。然后将默认的snorm分布更换为norm就没有出现错误。至于USDCNY原始数据有误就不是统计模型的问题了。

## timeID which contains 3 prediction models.
utimeID <- fx %>% 
  ddply(.(Date), summarize, 
        n = n()) %>% 
  dplyr::filter(n == 84) %>% 
  tbl_df %>% .$Date

fx %<>% dplyr::filter(Date %in% utimeID, !Date %in% ntimeID)

4.3 精准度

现在就比较下双方的MSE值与AIC值。

acc <- ddply(fx, .(Cat, Type), summarise, 
             MSE = mean((Price.T1 - Price)^2, na.rm = TRUE), 
             n = length(Price), 
             Akaike.MSE = (-2*MSE)/n+2*4/n, 
             Akaike = mean(Akaike, na.rm = TRUE), 
             Bayes = mean(Bayes, na.rm = TRUE), 
             Shibata = mean(Shibata, na.rm = TRUE), 
             Hannan.Quinn = mean(Hannan.Quinn, na.rm = TRUE)) %>% 
  tbl_df %>% mutate(MSE = round(MSE, 6)) %>% 
  arrange(Type)

acc %>% 
  kable(caption = 'Group Table Summary') %>% 
  kable_styling(bootstrap_options = c('striped', 'hover', 'condensed', 'responsive')) %>% 
  group_rows('USD/AUD Open', 1, 3, label_row_css = 'background-color: #e68a00; color: #fff;') %>%
  group_rows('USD/AUD High', 4, 6, label_row_css = 'background-color: #e68a00; color: #fff;') %>%
  group_rows('USD/AUD Low', 7, 9, label_row_css = 'background-color: #e68a00; color: #fff;') %>%
  group_rows('USD/AUD Close', 10, 12, label_row_css = 'background-color: #e68a00; color: #fff;') %>%
  group_rows('USD/EUR Open', 13, 15, label_row_css = 'background-color: #6666ff; color: #fff;') %>%
  group_rows('USD/EUR High', 16, 18, label_row_css = 'background-color: #6666ff; color: #fff;') %>%
  group_rows('USD/EUR Low', 19, 21, label_row_css = 'background-color:#6666ff; color: #fff;') %>%
  group_rows('USD/EUR Close', 22, 24, label_row_css = 'background-color: #6666ff; color: #fff;') %>%
  group_rows('USD/GBP Open', 25, 27, label_row_css = 'background-color: #339966; color: #fff;') %>%
  group_rows('USD/GBP High', 28, 30, label_row_css = 'background-color: #339966; color: #fff;') %>%
  group_rows('USD/GBP Low', 31, 33, label_row_css = 'background-color: #339966; color: #fff;') %>%
  group_rows('USD/GBP Close', 34, 36, label_row_css = 'background-color: #339966; color: #fff;') %>%
  group_rows('USD/CHF Open', 37, 39, label_row_css = 'background-color: #808000; color: #fff;') %>%
  group_rows('USD/CHF High', 40, 42, label_row_css = 'background-color: #808000; color: #fff;') %>%
  group_rows('USD/CHF Low', 43, 45, label_row_css = 'background-color: #808000; color: #fff;') %>%
  group_rows('USD/CHF Close', 46, 48, label_row_css = 'background-color: #808000; color: #fff;') %>%
  group_rows('USD/CAD Open', 49, 51, label_row_css = 'background-color: #666; color: #fff;') %>%
  group_rows('USD/CAD High', 52, 54, label_row_css = 'background-color: #666; color: #fff;') %>%
  group_rows('USD/CAD Low', 55, 57, label_row_css = 'background-color: #666; color: #fff;') %>%
  group_rows('USD/CAD Close', 58, 60, label_row_css = 'background-color: #666; color: #fff;') %>%
  group_rows('USD/CNY Open', 61, 63, label_row_css = 'background-color: #e60000; color: #fff;') %>%
  group_rows('USD/CNY High', 64, 66, label_row_css = 'background-color: #e60000; color: #fff;') %>%
  group_rows('USD/CNY Low', 67, 69, label_row_css = 'background-color: #e60000; color: #fff;') %>%
  group_rows('USD/CNY Close', 70, 72, label_row_css = 'background-color: #e60000; color: #fff;') %>%
  group_rows('USD/JPY Open', 73, 75, label_row_css = 'background-color: #ff3377; color: #fff;') %>%
  group_rows('USD/JPY High', 76, 78, label_row_css = 'background-color: #ff3377; color: #fff;') %>%
  group_rows('USD/JPY Low', 79, 81, label_row_css = 'background-color: #ff3377; color: #fff;') %>%
  group_rows('USD/JPY Close', 82, 84, label_row_css = 'background-color: #ff3377; color: #fff;') %>%
  scroll_box(width = '100%', height = '400px')
Group Table Summary
Cat Type MSE n Akaike.MSE Akaike Bayes Shibata Hannan.Quinn
USD/AUD Open
pred1 USDAUD.Op 0.001485 694 0.0115231 -6.1003165 -5.9788352 -6.102787 -6.0514862
pred2 USDAUD.Op 0.000067 694 0.0115272 -6.8926533 -6.8017675 -6.893939 -6.8561213
pred3 USDAUD.Op 0.000069 694 0.0115272 -6.8224982 -6.7179646 -6.824181 -6.7804804
USD/AUD High
pred1 USDAUD.Hi 0.001669 694 0.0115226 -6.2583349 -6.1291102 -6.261126 -6.2063925
pred2 USDAUD.Hi 0.000055 694 0.0115272 -7.0515969 -6.9619065 -7.052856 -7.0155454
pred3 USDAUD.Hi 0.000057 694 0.0115272 -5.6866132 -5.5832749 -5.688265 -5.6450758
USD/AUD Low
pred1 USDAUD.Lo 0.000966 694 0.0115246 -6.5677746 -6.4385346 -6.570489 -6.5158258
pred2 USDAUD.Lo 0.000053 694 0.0115272 -7.0612497 -6.9695477 -7.062567 -7.0243895
pred3 USDAUD.Lo 0.000057 694 0.0115272 -7.0154288 -6.9100791 -7.017146 -6.9730828
USD/AUD Close
pred1 USDAUD.Cl 0.001873 694 0.0115220 -6.0162413 -5.8954588 -6.018686 -5.9676921
pred2 USDAUD.Cl 0.000066 694 0.0115272 -6.8988588 -6.8077969 -6.900150 -6.8622561
pred3 USDAUD.Cl 0.000069 694 0.0115272 -6.8937281 -6.7890184 -6.895418 -6.8516395
USD/EUR Open
pred1 USDEUR.Op 0.000368 694 0.0115263 -7.3338283 -7.2020527 -7.336711 -7.2808603
pred2 USDEUR.Op 0.000023 694 0.0115273 -7.9057246 -7.8131176 -7.907062 -7.8685006
pred3 USDEUR.Op 0.000026 694 0.0115273 -3.2266234 -3.1203687 -3.228365 -3.1839136
USD/EUR High
pred1 USDEUR.Hi 0.000358 694 0.0115263 -7.1208509 -6.9949044 -7.123513 -7.0702255
pred2 USDEUR.Hi 0.000018 694 0.0115273 -8.1106028 -8.0198277 -8.111883 -8.0741152
pred3 USDEUR.Hi 0.000020 694 0.0115273 -7.7134003 -7.6089775 -7.715078 -7.6714269
USD/EUR Low
pred1 USDEUR.Lo 0.000072 694 0.0115272 -7.8257307 -7.6860585 -7.828812 -7.7695884
pred2 USDEUR.Lo 0.000020 694 0.0115273 -8.0539791 -7.9609034 -8.055346 -8.0165668
pred3 USDEUR.Lo 0.000026 694 0.0115273 -6.3308221 -6.2240987 -6.332594 -6.2879240
USD/EUR Close
pred1 USDEUR.Cl 0.000557 694 0.0115258 -7.3564598 -7.2230143 -7.359408 -7.3028206
pred2 USDEUR.Cl 0.000023 694 0.0115273 -7.9039691 -7.8117162 -7.905298 -7.8668874
pred3 USDEUR.Cl 0.000026 694 0.0115273 -5.7336380 -5.6277373 -5.735370 -5.6910705
USD/GBP Open
pred1 USDGBP.Op 0.000106 694 0.0115271 -8.0967421 -7.9545923 -8.099954 -8.0396069
pred2 USDGBP.Op 0.000020 694 0.0115273 -8.4221013 -8.3242304 -8.423632 -8.3827635
pred3 USDGBP.Op 0.000020 694 0.0115273 -4.2024020 -4.0908996 -4.204356 -4.1575853
USD/GBP High
pred1 USDGBP.Hi 0.000477 694 0.0115260 -7.1519345 -7.0420252 -7.153957 -7.1077584
pred2 USDGBP.Hi 0.000014 694 0.0115273 -8.5515114 -8.4560209 -8.552946 -8.5131304
pred3 USDGBP.Hi 0.000016 694 0.0115273 -6.8351756 -6.7260536 -6.837025 -6.7913156
USD/GBP Low
pred1 USDGBP.Lo 0.000321 694 0.0115265 -7.6996366 -7.5775927 -7.702089 -7.6505829
pred2 USDGBP.Lo 0.000015 694 0.0115273 -8.6241601 -8.5288847 -8.625575 -8.5858656
pred3 USDGBP.Lo 0.000017 694 0.0115273 -6.6693291 -6.5604223 -6.671157 -6.6255556
USD/GBP Close
pred1 USDGBP.Cl 0.000134 694 0.0115270 -7.8141090 -7.6833530 -7.816888 -7.7615534
pred2 USDGBP.Cl 0.000020 694 0.0115273 -8.4297825 -8.3355701 -8.431201 -8.3919153
pred3 USDGBP.Cl 0.000020 694 0.0115273 -5.3457457 -5.2379019 -5.347573 -5.3023995
USD/CHF Open
pred1 USDCHF.Op 0.000099 694 0.0115271 -7.2484023 -7.1009514 -7.251811 -7.1891335
pred2 USDCHF.Op 0.000026 694 0.0115273 -7.5298151 -7.4369056 -7.531181 -7.4924694
pred3 USDCHF.Op 0.000027 694 0.0115273 -7.5027593 -7.3962012 -7.504530 -7.4599274
USD/CHF High
pred1 USDCHF.Hi 0.000199 694 0.0115268 -7.2548707 -7.1099220 -7.258261 -7.1966071
pred2 USDCHF.Hi 0.000020 694 0.0115273 -7.6867609 -7.5900954 -7.688222 -7.6479054
pred3 USDCHF.Hi 0.000021 694 0.0115273 -4.9413177 -4.8310035 -4.943199 -4.8969760
USD/CHF Low
pred1 USDCHF.Lo 0.000348 694 0.0115264 -6.8005222 -6.6817579 -6.802844 -6.7527840
pred2 USDCHF.Lo 0.000028 694 0.0115273 -7.6184651 -7.5252301 -7.619825 -7.5809887
pred3 USDCHF.Lo 0.000031 694 0.0115273 -7.5757600 -7.4688764 -7.577526 -7.5327974
USD/CHF Close
pred1 USDCHF.Cl 0.000124 694 0.0115270 -7.2419650 -7.0947266 -7.245386 -7.1827816
pred2 USDCHF.Cl 0.000026 694 0.0115273 -7.5324416 -7.4378755 -7.533853 -7.4944299
pred3 USDCHF.Cl 0.000026 694 0.0115273 -3.9698805 -3.8616657 -3.971703 -3.9263826
USD/CAD Open
pred1 USDCAD.Op 0.001082 694 0.0115243 -7.1202839 -6.9760318 -7.123615 -7.0623004
pred2 USDCAD.Op 0.000036 694 0.0115273 -7.5436211 -7.4514271 -7.544977 -7.5065628
pred3 USDCAD.Op 0.000039 694 0.0115273 -5.2476659 -5.1418206 -5.249424 -5.2051203
USD/CAD High
pred1 USDCAD.Hi 0.000275 694 0.0115266 -7.4051971 -7.2539700 -7.408840 -7.3444104
pred2 USDCAD.Hi 0.000035 694 0.0115273 -7.6777426 -7.5748559 -7.679406 -7.6363864
pred3 USDCAD.Hi 0.000038 694 0.0115273 -3.4295198 -3.3129817 -3.431626 -3.3826763
USD/CAD Low
pred1 USDCAD.Lo 0.001172 694 0.0115240 -7.0520764 -6.9033640 -7.055645 -6.9922998
pred2 USDCAD.Lo 0.000031 694 0.0115273 -7.6038382 -7.5119686 -7.605169 -7.5669105
pred3 USDCAD.Lo 0.000035 694 0.0115273 -4.6765398 -4.5710188 -4.678272 -4.6341247
USD/CAD Close
pred1 USDCAD.Cl 0.000856 694 0.0115249 -7.1394047 -6.9954283 -7.142724 -7.0815321
pred2 USDCAD.Cl 0.000035 694 0.0115273 -7.5537405 -7.4609575 -7.555111 -7.5164454
pred3 USDCAD.Cl 0.000038 694 0.0115273 -3.8975181 -3.7910838 -3.899293 -3.8547357
USD/CNY Open
pred1 USDCNY.Op 0.004577 694 0.0115142 -5.3262782 -5.1937738 -5.329081 -5.2730186
pred2 USDCNY.Op 0.001280 694 0.0115237 -6.0712923 -5.9714101 -6.072831 -6.0311446
pred3 USDCNY.Op 0.001739 694 0.0115224 -3.2805050 -3.1669812 -3.282475 -3.2348741
USD/CNY High
pred1 USDCNY.Hi 0.006446 694 0.0115088 -5.5772166 -5.4386976 -5.580196 -5.5215391
pred2 USDCNY.Hi 0.001228 694 0.0115238 -5.8947789 -5.7889571 -5.896519 -5.8522438
pred3 USDCNY.Hi 0.000823 694 0.0115250 0.4844599 0.6039232 0.482266 0.5324782
USD/CNY Low
pred1 USDCNY.Lo 0.013831 694 0.0114875 -5.4334053 -5.3005227 -5.436308 -5.3799933
pred2 USDCNY.Lo 0.000449 694 0.0115261 -6.3281187 -6.2292034 -6.329637 -6.2883598
pred3 USDCNY.Lo 0.001241 694 0.0115238 -5.3583923 -5.2458355 -5.360339 -5.3131502
USD/CNY Close
pred1 USDCNY.Cl 0.002978 694 0.0115188 -5.6155852 -5.4788612 -5.618581 -5.5606296
pred2 USDCNY.Cl 0.000185 694 0.0115268 -6.3803468 -6.2751058 -6.382064 -6.3380453
pred3 USDCNY.Cl 0.000223 694 0.0115267 -2.6275465 -2.5086639 -2.629716 -2.5797618
USD/JPY Open
pred1 USDJPY.Op 0.849792 694 0.0090784 2.0366510 2.2006171 2.032538 2.1025568
pred2 USDJPY.Op 0.463180 694 0.0101926 2.0178465 2.1131252 2.016404 2.0561437
pred3 USDJPY.Op 0.596356 694 0.0098088 3.2665740 3.3754942 3.264718 3.3103544
USD/JPY High
pred1 USDJPY.Hi 5.072197 694 -0.0030899 2.3205292 2.4541433 2.317666 2.3742353
pred2 USDJPY.Hi 0.350109 694 0.0105184 1.7719840 1.8733588 1.770359 1.8127315
pred3 USDJPY.Hi 0.557077 694 0.0099220 5.4397869 5.5548033 5.437725 5.4860177
USD/JPY Low
pred1 USDJPY.Lo 2.765424 694 0.0035579 2.3864636 2.5342943 2.382975 2.4458839
pred2 USDJPY.Lo 0.461756 694 0.0101967 1.9675156 2.0588424 1.966205 2.0042243
pred3 USDJPY.Lo 0.695329 694 0.0095235 4.2116218 4.3165901 4.209913 4.2538137
USD/JPY Close
pred1 USDJPY.Cl 0.604835 694 0.0097843 2.0399015 2.2052227 2.035726 2.1063520
pred2 USDJPY.Cl 0.468307 694 0.0101778 2.0249439 2.1205556 2.023491 2.0633749
pred3 USDJPY.Cl 0.598571 694 0.0098024 2.9466791 3.0559323 2.944812 2.9905933
acc <- ddply(fx, .(Cat, .id), summarise, 
             MSE = mean((Price.T1 - Price)^2, na.rm = TRUE), 
             n = length(Price), 
             Akaike.MSE = (-2*MSE)/n+2*4/n, 
             Akaike = mean(Akaike, na.rm = TRUE), 
             Bayes = mean(Bayes, na.rm = TRUE), 
             Shibata = mean(Shibata, na.rm = TRUE), 
             Hannan.Quinn = mean(Hannan.Quinn, na.rm = TRUE)) %>% 
  tbl_df %>% mutate(MSE = round(MSE, 6)) %>% 
  arrange(.id)

acc %>% 
  kable(caption = 'Group Table Summary') %>% 
  kable_styling(bootstrap_options = c('striped', 'hover', 'condensed', 'responsive')) %>%
  group_rows('USD/AUD', 1, 3, label_row_css = 'background-color: #003399; color: #fff;') %>%
  group_rows('USD/CAD', 4, 6, label_row_css = 'background-color: #003399; color: #fff;') %>%
  group_rows('USD/CHF', 7, 9, label_row_css = 'background-color: #003399; color: #fff;') %>%
  group_rows('USD/CNY', 10, 12, label_row_css = 'background-color: #003399; color: #fff;') %>%
  group_rows('USD/EUR', 13, 15, label_row_css = 'background-color: #003399; color: #fff;') %>%
  group_rows('USD/GBP', 16, 18, label_row_css = 'background-color: #003399; color: #fff;') %>%
  group_rows('USD/JPY', 19, 21, label_row_css = 'background-color: #003399; color: #fff;') %>% 
  scroll_box(width = '100%', height = '400px')
Group Table Summary
Cat .id MSE n Akaike.MSE Akaike Bayes Shibata Hannan.Quinn
USD/AUD
pred1 USDAUD 0.001498 2776 0.0028808 -6.235667 -6.110485 -6.238272 -6.185349
pred2 USDAUD 0.000060 2776 0.0028818 -6.976090 -6.885255 -6.977378 -6.939578
pred3 USDAUD 0.000063 2776 0.0028818 -6.604567 -6.500084 -6.606253 -6.562570
USD/CAD
pred1 USDCAD 0.000846 2776 0.0028812 -7.179240 -7.032198 -7.182706 -7.120136
pred2 USDCAD 0.000034 2776 0.0028818 -7.594736 -7.499802 -7.596166 -7.556576
pred3 USDCAD 0.000038 2776 0.0028818 -4.312811 -4.204226 -4.314654 -4.269164
USD/CHF
pred1 USDCHF 0.000193 2776 0.0028817 -7.136440 -6.996840 -7.139576 -7.080327
pred2 USDCHF 0.000025 2776 0.0028818 -7.591871 -7.497527 -7.593270 -7.553948
pred3 USDCHF 0.000026 2776 0.0028818 -5.997429 -5.889437 -5.999239 -5.954021
USD/CNY
pred1 USDCNY 0.006958 2776 0.0028768 -5.488121 -5.352964 -5.491042 -5.433795
pred2 USDCNY 0.000786 2776 0.0028813 -6.168634 -6.066169 -6.170263 -6.127448
pred3 USDCNY 0.001034 2776 0.0028811 -2.695496 -2.579389 -2.697566 -2.648827
USD/EUR
pred1 USDEUR 0.000339 2776 0.0028816 -7.409217 -7.276508 -7.412111 -7.355874
pred2 USDEUR 0.000021 2776 0.0028818 -7.993569 -7.901391 -7.994898 -7.956518
pred3 USDEUR 0.000024 2776 0.0028818 -5.751121 -5.645295 -5.752852 -5.708584
USD/GBP
pred1 USDGBP 0.000260 2776 0.0028817 -7.690606 -7.564391 -7.693222 -7.639875
pred2 USDGBP 0.000017 2776 0.0028818 -8.506889 -8.411176 -8.508339 -8.468419
pred3 USDGBP 0.000018 2776 0.0028818 -5.763163 -5.653819 -5.765028 -5.719214
USD/JPY
pred1 USDJPY 2.323062 2776 0.0012082 2.195886 2.348569 2.192226 2.257257
pred2 USDJPY 0.435838 2776 0.0025678 1.945572 2.041470 1.944115 1.984119
pred3 USDJPY 0.613356 2776 0.0024399 3.966165 4.075705 3.964292 4.010195
acc <- ddply(fx, .(Cat), summarise, 
             MSE = mean((Price.T1 - Price)^2, na.rm = TRUE), 
             n = length(Price), 
             Akaike.MSE = (-2*MSE)/n+2*4/n, 
             Akaike = mean(Akaike, na.rm = TRUE), 
             Bayes = mean(Bayes, na.rm = TRUE), 
             Shibata = mean(Shibata, na.rm = TRUE), 
             Hannan.Quinn = mean(Hannan.Quinn, na.rm = TRUE)) %>% 
  tbl_df %>% mutate(MSE = round(MSE, 6))

acc %>% 
  kable(caption = 'Group Table Summary') %>% 
  kable_styling(bootstrap_options = c('striped', 'hover', 'condensed', 'responsive'))
Group Table Summary
Cat MSE n Akaike.MSE Akaike Bayes Shibata Hannan.Quinn
pred1 0.333308 19432 0.0003774 -5.563344 -5.426402 -5.566386 -5.508300
pred2 0.062397 19432 0.0004053 -6.126602 -6.031407 -6.128028 -6.088338
pred3 0.088525 19432 0.0004026 -3.879775 -3.770935 -3.881614 -3.836026

5 结论

结果证明pred2archm=FALSE最为精准。目前正在编写着Q1App2自动交易应用。“商场如战场”,除了模式最优化以外,程序运作上分秒必争… microbenchmark测试效率,之前编写了个DataCollection应用采集实时数据以方便之后的高频率交易自动化建模2。欲知更多详情,请参阅Real Time FXCM

6 附录

6.1 文件与系统资讯

以下乃此文献资讯:

  • 文件建立日期:2018-10-14
  • 文件最新更新日期:2018-10-17
  • R version 3.5.1 (2018-07-02)
  • R语言版本:3.5.1
  • rmarkdown 程序包版本:1.10
  • 文件版本:1.0.1
  • 作者简历:®γσ, Eng Lian Hu
  • GitHub:源代码
  • 其它系统资讯:
Additional session information:
Category session_info Category Sys.info
version R version 3.5.1 (2018-07-02) sysname Windows
system x86_64, mingw32 release 10 x64
ui RTerm version build 17134
language en nodename RSTUDIO-SCIBROK
collate Japanese_Japan.932 machine x86-64
tz Asia/Tokyo login scibr
date 2018-10-17 user scibr
Current time 2018-10-17 14:15:33 JST effective_user scibr

  1. 一些数据模拟时,出现不知名错误。

  2. 不过数据量多就会当机,得继续提升才行。