1
1
---
2
- title : " [Deriv.com](https://github.com/englianhu/binary.com-interview-question) - Interday High Frequency Trading Models Comparison <span style='color:#4E79A7'>**Review** "
3
- subtitle : " Compare few time series models with Performance "
4
- author : " [®γσ, Lian Hu](https://englianhu.github.io/) <img src='www/quantitative trader 1.jpg' width='13'> <img src='www/RYU .jpg' width='15'> <img src='www/ENG.jpg' width='24'> ® <img src='www/xueba1.jpg' width='14'> "
2
+ title : " [Deriv.com](https://github.com/englianhu/binary.com-interview-question) - Intraday High Frequency Trading Models Comparison <span style='color:#4E79A7'>"
3
+ subtitle : " Introduce [`tidyverts`](https://github.com/tidyverts) for HFT "
4
+ author : " [®γσ, Lian Hu ξηg ](https://englianhu.github.io/) <img src='www/quantitative trader 1.jpg' width='13'> <img src='www/xueba4 .jpg' width='11'>® "
5
5
date : " `r lubridate::today('Asia/Tokyo')`"
6
6
output :
7
7
html_document :
@@ -20,81 +20,11 @@ output:
20
20
<span style =' color :green ' >** Theme Song** </span >
21
21
<br >
22
22
23
- <audio src =" music/Mika - Elle me dit (happy song to be millionaire ).mp3 " controls ></audio >
23
+ <audio controls loop autoplay src =" music/F4 - Can't Help Falling In Love With You (chorus ).mp3 " controls ></audio >
24
24
<br >
25
25
26
26
------
27
27
28
- <span style =' color :blue ' >** F** </span ><span style =' color :white ' >** R** </span ><span style =' color :red ' >** A** </span > : <span style =' color :white ' >Elle me dit</span >
29
-
30
- <span style =' color :red ' >** C** </span ><span style =' color :yellow ' >** H** </span ><span style =' color :red ' >** N** </span > : <span style =' color :white ' >她对我说</span >
31
-
32
- <span style =' color :blue ' >** E** </span ><span style =' color :red ' >** N** </span ><span style =' color :blue ' >** G** </span > : <span style =' color :white ' >She told me</span >
33
-
34
- <span style =' color :white ' >** J** </span ><span style =' color :red ' >** P** </span ><span style =' color :white ' >** N** </span > : <span style =' color :white ' >彼女は私に言う</span >
35
-
36
- ------
37
-
38
- <span style =' color :blue ' >** F** </span ><span style =' color :white ' >** R** </span ><span style =' color :red ' >** A** </span > : <span style =' color :white ' >écris une chanson contente</span >
39
-
40
- <span style =' color :red ' >** C** </span ><span style =' color :yellow ' >** H** </span ><span style =' color :red ' >** N** </span > : <span style =' color :white ' >写一首欢快的歌</span >
41
-
42
- <span style =' color :blue ' >** E** </span ><span style =' color :red ' >** N** </span ><span style =' color :blue ' >** G** </span > : <span style =' color :white ' >Write a happy song</span >
43
-
44
- <span style =' color :white ' >** J** </span ><span style =' color :red ' >** P** </span ><span style =' color :white ' >** N** </span > : <span style =' color :white ' >幸せな歌を書く</span >
45
-
46
- ------
47
-
48
- <span style =' color :blue ' >** F** </span ><span style =' color :white ' >** R** </span ><span style =' color :red ' >** A** </span > : <span style =' color :white ' >Pas une chanson déprimante</span >
49
-
50
- <span style =' color :red ' >** C** </span ><span style =' color :yellow ' >** H** </span ><span style =' color :red ' >** N** </span > : <span style =' color :white ' >而不是悲伤的歌</span >
51
-
52
- <span style =' color :blue ' >** E** </span ><span style =' color :red ' >** N** </span ><span style =' color :blue ' >** G** </span > : <span style =' color :white ' >Not a depressing song</span >
53
-
54
- <span style =' color :white ' >** J** </span ><span style =' color :red ' >** P** </span ><span style =' color :white ' >** N** </span > : <span style =' color :white ' >気のめいるような歌ではない</span >
55
-
56
- ------
57
-
58
- <span style =' color :blue ' >** F** </span ><span style =' color :white ' >** R** </span ><span style =' color :red ' >** A** </span > : <span style =' color :white ' >Une chanson que tout le monde aime</span >
59
-
60
- <span style =' color :red ' >** C** </span ><span style =' color :yellow ' >** H** </span ><span style =' color :red ' >** N** </span > : <span style =' color :white ' >一首让所有人都喜欢的歌</span >
61
-
62
- <span style =' color :blue ' >** E** </span ><span style =' color :red ' >** N** </span ><span style =' color :blue ' >** G** </span > : <span style =' color :white ' >A song that everyone loves</span >
63
-
64
- <span style =' color :white ' >** J** </span ><span style =' color :red ' >** P** </span ><span style =' color :white ' >** N** </span > : <span style =' color :white ' >みんなが大好きな曲</span >
65
-
66
- ------
67
-
68
- <span style =' color :blue ' >** F** </span ><span style =' color :white ' >** R** </span ><span style =' color :red ' >** A** </span > : <span style =' color :white ' >Elle me dit</span >
69
-
70
- <span style =' color :red ' >** C** </span ><span style =' color :yellow ' >** H** </span ><span style =' color :red ' >** N** </span > : <span style =' color :white ' >她对我说</span >
71
-
72
- <span style =' color :blue ' >** E** </span ><span style =' color :red ' >** N** </span ><span style =' color :blue ' >** G** </span > : <span style =' color :white ' >She told me</span >
73
-
74
- <span style =' color :white ' >** J** </span ><span style =' color :red ' >** P** </span ><span style =' color :white ' >** N** </span > : <span style =' color :white ' >彼女は私に言う</span >
75
-
76
- ------
77
-
78
- <span style =' color :blue ' >** F** </span ><span style =' color :white ' >** R** </span ><span style =' color :red ' >** A** </span > : <span style =' color :azure ' >Tu deviendras milliardaire</span >
79
-
80
- <span style =' color :red ' >** C** </span ><span style =' color :yellow ' >** H** </span ><span style =' color :red ' >** N** </span > : <span style =' color :white ' >你将成为亿万富翁</span >
81
-
82
- <span style =' color :blue ' >** E** </span ><span style =' color :red ' >** N** </span ><span style =' color :blue ' >** G** </span > : <span style =' color :white ' >You will become a millionaire</span >
83
-
84
- <span style =' color :white ' >** J** </span ><span style =' color :red ' >** P** </span ><span style =' color :white ' >** N** </span > : <span style =' color :white ' >あなたは億万長者になります</span >
85
-
86
- ------
87
-
88
- <span style =' color :blue ' >** F** </span ><span style =' color :white ' >** R** </span ><span style =' color :red ' >** A** </span > : <span style =' color :white ' >Tu auras de quoi être fier</span >
89
-
90
- <span style =' color :red ' >** C** </span ><span style =' color :yellow ' >** H** </span ><span style =' color :red ' >** N** </span > : <span style =' color :white ' >你将为此感到骄傲</span >
91
-
92
- <span style =' color :blue ' >** E** </span ><span style =' color :red ' >** N** </span ><span style =' color :blue ' >** G** </span > : <span style =' color :white ' >You will be proud</span >
93
-
94
- <span style =' color :white ' >** J** </span ><span style =' color :red ' >** P** </span ><span style =' color :white ' >** N** </span > : <span style =' color :white ' >あなたは誇りに思うでしょう</span >
95
-
96
- ------
97
-
98
28
# Setting
99
29
100
30
## SCSS Setup
@@ -390,28 +320,59 @@ frb <- 1
390
320
i <- 1
391
321
```
392
322
323
+ ### Model 1
324
+
393
325
``` {r, error=TRUE, results='asis'}
394
326
train1A <- ts1_ddsmp |>
395
- {\(.) filter(., date < timeID[i]) |>
396
- tail(vrb)}( )
327
+ filter(as_date(index) <= timeID[i]) |>
328
+ tail(vrb)
397
329
398
330
fit1A <- train1A |>
399
331
model(
400
332
ets = ETS(close ~ error('M') + trend('N') + season('N')),
401
- ets_bc = ETS(box_cox(close, 0.3) ~ error('A') + trend('N') + season('N')),
402
- arima = ARIMA(close),
333
+ ets_bc = ETS(box_cox(close, 0.3) ~ error('A') + trend('N') + season('N')),
334
+ arima = ARIMA(close ~ 0 + pdq(0, 1, 0) + PDQ(0, 1, 0)),
335
+ theta = THETA(close),
336
+ theta_mul = THETA(close ~ season(method = 'multiplicative')),
403
337
rw = RW(close),
404
338
rw_df = RW(close ~ drift()),
405
339
naive = NAIVE(close),
406
- snaive = SNAIVE(close))
340
+ snaive = SNAIVE(close),
341
+ prophet = prophet(close ~ season(period = 4, order = 2,
342
+ type = 'multiplicative')))
343
+
344
+ fit1A |>
345
+ accuracy()
346
+ ```
347
+
348
+ ``` {r, error=TRUE, results='asis'}
349
+ train_test <- ts1_ddsmp |>
350
+ filter(index >= train1A$index[1])
351
+
352
+ test <- train_test |>
353
+ filter(index > train1A$index[length(train1A$index)])
354
+
355
+ train_test |>
356
+ features(hr_1m, feat_acf)
407
357
408
358
fc1A <- fit1A |>
409
- {\(.) forecast(.$close, h = frb)}( )
359
+ forecast(h = frb)
410
360
411
361
fc1A |>
412
- accuracy(ts1_ddsmp)
362
+ accuracy(train_test)
363
+ ```
364
+
365
+ ``` {r, error=TRUE, results='asis'}
366
+ fit1A |>
367
+ forecast(h = 365) %>%
368
+ autoplot(train_test[1:1565,], level = NULL) +
369
+ labs(y = 'USD/JPY',
370
+ title = "Forecasts price") +
371
+ guides(colour = guide_legend(title = 'Forecast'))
413
372
```
414
373
374
+ ### Model 2
375
+
415
376
``` {r, error=TRUE, results='asis'}
416
377
train1B <- ddsmp |>
417
378
{\(.) filter(., date < timeID[i]) |>
@@ -421,20 +382,24 @@ train1B <- ddsmp |>
421
382
fit1B <- train1B |>
422
383
model(
423
384
ets = ETS(close ~ error('M') + trend('N') + season('N')),
424
- ets_bc = ETS(box_cox(close, 0.3) ~ error('A') + trend('N') + season('N')),
425
- arima = ARIMA(close),
385
+ ets_bc = ETS(box_cox(close, 0.3) ~ error('A') + trend('N') + season('N')),
386
+ arima = ARIMA(close ~ 0 + pdq(0, 1, 0) + PDQ(0, 1, 0)),
387
+ theta = THETA(close),
388
+ theta_mul = THETA(close ~ season(method = 'multiplicative')),
426
389
rw = RW(close),
427
390
rw_df = RW(close ~ drift()),
428
391
naive = NAIVE(close),
429
392
snaive = SNAIVE(close))
430
393
431
394
fc1B <- fit1B |>
432
- {\(.) forecast(.$close, h = frb)}( )
395
+ forecast(h = frb)
433
396
434
397
fc1B |>
435
398
accuracy(ts1_ddsmp)
436
399
```
437
400
401
+ ### Model 3
402
+
438
403
``` {r, error=TRUE, results='asis'}
439
404
train1C <- ts2_ddsmp |>
440
405
{\(.) filter(., date < timeID[i]) |>
@@ -444,19 +409,22 @@ fit1C <- train1C |>
444
409
model(
445
410
ets = ETS(close ~ error('M') + trend('N') + season('N')),
446
411
ets_bc = ETS(box_cox(close, 0.3) ~ error('A') + trend('N') + season('N')),
447
- arima = ARIMA(close),
412
+ arima = ARIMA(close ~ 0 + pdq(0, 1, 0) + PDQ(0, 1, 0)),
413
+ theta = THETA(close),
448
414
rw = RW(close),
449
415
rw_df = RW(close ~ drift()),
450
416
naive = NAIVE(close),
451
417
snaive = SNAIVE(close))
452
418
453
419
fc1C <- fit1C |>
454
- {\(.) forecast(.$close, h = frb)}( )
420
+ forecast(h = frb)
455
421
456
422
fc1C |>
457
423
accuracy(ts2_ddsmp)
458
424
```
459
425
426
+ ### Model 4
427
+
460
428
``` {r, error=TRUE, results='asis'}
461
429
train1D <- ts2_ddsmp |>
462
430
{\(.) filter(., date < timeID[i]) |>
@@ -467,14 +435,15 @@ fit1D <- train1D |>
467
435
model(
468
436
ets = ETS(close ~ error('M') + trend('N') + season('N')),
469
437
ets_bc = ETS(box_cox(close, 0.3) ~ error('A') + trend('N') + season('N')),
470
- arima = ARIMA(close),
438
+ arima = ARIMA(close ~ 0 + pdq(0, 1, 0) + PDQ(0, 1, 0)),
439
+ theta = THETA(close),
471
440
rw = RW(close),
472
441
rw_df = RW(close ~ drift()),
473
442
naive = NAIVE(close),
474
443
snaive = SNAIVE(close))
475
444
476
445
fc1D <- fit1D |>
477
- {\(.) forecast(.$close, h = frb)}( )
446
+ forecast(h = frb)
478
447
479
448
fc1D |>
480
449
accuracy(ts2_ddsmp)
@@ -518,7 +487,8 @@ fc <- fit |>
518
487
forecast(h = frb)
519
488
520
489
## accuracy
521
- fc |> fabletools::accuracy(train_test)
490
+ fc |>
491
+ accuracy(train_test)
522
492
```
523
493
524
494
## ` timetk::tk_ts() `
0 commit comments