коэффициент шаровой прокатки в R - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь написать небольшой скрипт, чтобы вычислить коэффициент скользящей резкости для временных рядов. Вот мой полный сценарий: roll_sharpe Он - моя попытка кодирования коэффициента Шарпа:

#xdf$roll_sharpe <-  stats::filter(xdf$roll_mean, xdf$roll_sd, f_exp, c(0,rep (1/(2^3)(2:23), 22)), sides = 1)

Я хотел бы начать с файла, подобного этому: tip.csv

И получите выходной файл, подобный этому: output.csv

Я использую R ver 3.6.2 в системе win10. Tnx всем участникам.

Eugenio

1 Ответ

0 голосов
/ 22 января 2020

Сначала прочитайте данные. Для краткости это первые 150 столбцов ваших данных.

(для дальнейшего использования, пожалуйста, используйте ?dput, чтобы вставить образец ваших данных в ваш вопрос)

d <- structure(list(V1 = c("1998-01-20", "1998-01-21", "1998-01-22", 
                      "1998-01-23", "1998-01-26", "1998-01-27", "1998-01-28", "1998-01-29", 
                      "1998-01-30", "1998-02-02", "1998-02-03", "1998-02-04", "1998-02-05", 
                      "1998-02-06", "1998-02-09", "1998-02-10", "1998-02-11", "1998-02-12", 
                      "1998-02-13", "1998-02-17", "1998-02-18", "1998-02-19", "1998-02-20", 
                      "1998-02-23", "1998-02-24", "1998-02-25", "1998-02-26", "1998-02-27", 
                      "1998-03-02", "1998-03-03", "1998-03-04", "1998-03-05", "1998-03-06", 
                      "1998-03-09", "1998-03-10", "1998-03-11", "1998-03-12", "1998-03-13", 
                      "1998-03-16", "1998-03-17", "1998-03-18", "1998-03-19", "1998-03-20", 
                      "1998-03-23", "1998-03-24", "1998-03-25", "1998-03-26", "1998-03-27", 
                      "1998-03-30", "1998-03-31", "1998-04-01", "1998-04-02", "1998-04-03", 
                      "1998-04-06", "1998-04-07", "1998-04-08", "1998-04-09", "1998-04-13", 
                      "1998-04-14", "1998-04-15", "1998-04-16", "1998-04-17", "1998-04-20", 
                      "1998-04-21", "1998-04-22", "1998-04-23", "1998-04-24", "1998-04-27", 
                      "1998-04-28", "1998-04-29", "1998-04-30", "1998-05-01", "1998-05-04", 
                      "1998-05-05", "1998-05-06", "1998-05-07", "1998-05-08", "1998-05-11", 
                      "1998-05-12", "1998-05-13", "1998-05-14", "1998-05-15", "1998-05-18", 
                      "1998-05-19", "1998-05-20", "1998-05-21", "1998-05-22", "1998-05-26", 
                      "1998-05-27", "1998-05-28", "1998-05-29", "1998-06-01", "1998-06-02", 
                      "1998-06-03", "1998-06-04", "1998-06-05", "1998-06-08", "1998-06-09", 
                      "1998-06-10", "1998-06-11", "1998-06-12", "1998-06-15", "1998-06-16", 
                      "1998-06-17", "1998-06-18", "1998-06-19", "1998-06-22", "1998-06-23", 
                      "1998-06-24", "1998-06-25", "1998-06-26", "1998-06-29", "1998-06-30", 
                      "1998-07-01", "1998-07-02", "1998-07-06", "1998-07-07", "1998-07-08", 
                      "1998-07-09", "1998-07-10", "1998-07-13", "1998-07-14", "1998-07-15", 
                      "1998-07-16", "1998-07-17", "1998-07-20", "1998-07-21", "1998-07-22", 
                      "1998-07-23", "1998-07-24", "1998-07-27", "1998-07-28", "1998-07-29", 
                      "1998-07-30", "1998-07-31", "1998-08-03", "1998-08-04", "1998-08-05", 
                      "1998-08-06", "1998-08-07", "1998-08-10", "1998-08-11", "1998-08-12", 
                      "1998-08-13", "1998-08-14", "1998-08-17", "1998-08-18", "1998-08-19", 
                      "1998-08-20"), V2 = c(49.2316, 48.6256, 48.2196, 48.1009, 48.2945, 
                                            48.863, 49.4315, 49.6064, 49.4939, 50.6121, 51.0119, 50.7371, 
                                            50.7433, 51.293, 51.0869, 51.949, 51.949, 52.2801, 52.2488, 52.5112, 
                                            52.8673, 52.3675, 52.6486, 52.6299, 52.4737, 52.9047, 53.1983, 
                                            53.467, 53.5482, 53.7918, 53.4295, 52.961, 53.7418, 53.6481, 
                                            54.1729, 54.3478, 54.2791, 53.823, 54.6414, 54.8288, 54.96, 55.1161, 
                                            55.6971, 55.2723, 55.872, 55.5222, 55.366, 55.1411, 55.0724, 
                                            55.0911, 55.5597, 56.3218, 56.278, 56.4592, 56.1531, 55.7721, 
                                            56.4592, 56.4342, 57.1214, 57.4837, 56.884, 57.4931, 57.2423, 
                                            57.6248, 57.5809, 57.2486, 56.7721, 55.957, 55.7877, 56.0636, 
                                            56.979, 57.468, 57.5621, 57.3552, 56.6028, 56.258, 57.0166, 57.0041, 
                                            57.631, 57.8379, 57.5621, 56.9877, 56.8183, 56.8371, 57.6028, 
                                            57.3517, 57.2576, 56.2722, 56.2722, 56.4731, 55.7576, 56.1153, 
                                            55.8266, 55.13, 55.789, 57.0254, 57.063, 56.9438, 56.3287, 55.312, 
                                            55.5818, 53.9751, 54.4772, 55.6446, 55.4249, 54.773, 54.8296, 
                                            55.5907, 56.1693, 56.4146, 56.4146, 56.6914, 56.4146, 56.9807, 
                                            56.7983, 57.3959, 57.3078, 57.8362, 57.1632, 57.3833, 57.2261, 
                                            58.1444, 58.1821, 58.6665, 58.7296, 58.6038, 57.7354, 57.5214, 
                                            56.2314, 56.2818, 56.7915, 56.1433, 56.0175, 56.7789, 55.7091, 
                                            55.2561, 53.4501, 53.9031, 53.9031, 54.2178, 53.9786, 53.0977, 
                                            53.9598, 53.0347, 53.0536, 53.9598, 54.9855, 54.7275, 54.2744
                      )), class = "data.frame", row.names = c(NA, -149L))


#name columns 
names(d) <- c('date','x')
# type of date column
d$date <- as.Date(d$date) 

load библиотеки:

library(tidyverse)
library(roll)

Выполните вычисление:

d %>% mutate(lagx = lag(x)) %>% 
  mutate(pct_change = (x - lagx)/x) %>% 
  mutate(rollmeanx = roll_mean(pct_change, width = 22), rollsdx = roll_sd(pct_change, width=22)) %>%
  mutate(roll_sharpe = rollmeanx / rollsdx)

Приведенный выше код следует логе c в вашем листе Excel: сначала мы вычисляем% -чанги, а затем вычисляем скользящее среднее и стандартное отклонение от них, и, наконец, разделить скользящее среднее на прокатку ст. отклонение, чтобы получить коэффициент Шарпа.

Числа не совсем соответствуют вашему листу Excel. Это связано с численными неточностями.

Результат:

         date       x    lagx    pct_change   rollmeanx     rollsdx roll_sharpe
1  1998-01-20 49.2316      NA            NA          NA          NA          NA
2  1998-01-21 48.6256 49.2316 -0.0124625712          NA          NA          NA
3  1998-01-22 48.2196 48.6256 -0.0084198127          NA          NA          NA
4  1998-01-23 48.1009 48.2196 -0.0024677293          NA          NA          NA
5  1998-01-26 48.2945 48.1009  0.0040087381          NA          NA          NA
6  1998-01-27 48.8630 48.2945  0.0116345701          NA          NA          NA
7  1998-01-28 49.4315 48.8630  0.0115007637          NA          NA          NA
8  1998-01-29 49.6064 49.4315  0.0035257547          NA          NA          NA
9  1998-01-30 49.4939 49.6064 -0.0022730074          NA          NA          NA
10 1998-02-02 50.6121 49.4939  0.0220935310          NA          NA          NA
11 1998-02-03 51.0119 50.6121  0.0078373870          NA          NA          NA
12 1998-02-04 50.7371 51.0119 -0.0054161550          NA          NA          NA
13 1998-02-05 50.7433 50.7371  0.0001221836          NA          NA          NA
14 1998-02-06 51.2930 50.7433  0.0107168619          NA          NA          NA
15 1998-02-09 51.0869 51.2930 -0.0040343023          NA          NA          NA
16 1998-02-10 51.9490 51.0869  0.0165951221          NA          NA          NA
17 1998-02-11 51.9490 51.9490  0.0000000000          NA          NA          NA
18 1998-02-12 52.2801 51.9490  0.0063331937          NA          NA          NA
19 1998-02-13 52.2488 52.2801 -0.0005990568          NA          NA          NA
20 1998-02-17 52.5112 52.2488  0.0049970292          NA          NA          NA
21 1998-02-18 52.8673 52.5112  0.0067357327          NA          NA          NA
22 1998-02-19 52.3675 52.8673 -0.0095440875          NA          NA          NA
23 1998-02-20 52.6486 52.3675  0.0053391733 0.003010151 0.008591477   0.3503648
24 1998-02-23 52.6299 52.6486 -0.0003553113 0.003560481 0.007914246   0.4498825
25 1998-02-24 52.4737 52.6299 -0.0029767293 0.003807894 0.007600758   0.5009886
26 1998-02-25 52.9047 52.4737  0.0081467242 0.004290369 0.007519888   0.5705363
27 1998-02-26 53.1983 52.9047  0.0055189734 0.004359016 0.007524086   0.5793416
28 1998-02-27 53.4670 53.1983  0.0050255298 0.004058605 0.007349683   0.5522150
29 1998-03-02 53.5482 53.4670  0.0015163908 0.003604770 0.007174427   0.5024471
30 1998-03-03 53.7918 53.5482  0.0045285713 0.003650352 0.007177086   0.5086121
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...