Я хочу написать функцию, которая представляет торговый симулятор.У меня есть фрейм данных о ценах финансовых активов, и я хочу создать торговую стратегию, основанную на сигналах.
Вот мой фрейм данных:
(open = цена открытия, close = цена закрытия, возврат = скорость изменения в%)
date open close return signal
<date> <dbl> <dbl> <dbl> <dbl>
1 2015-01-20 213. 211. -1 0
2 2015-01-21 211. 227. 7 1
3 2015-01-22 227. 233. 3 0
4 2015-01-23 234. 233. 0 0
5 2015-01-24 233. 248. 7 1
6 2015-01-25 247. 254. 3 0
7 2015-01-26 254. 273. 8 1
8 2015-01-27 273. 263. -4 0
9 2015-01-28 263. 234. -11 0
10 2015-01-29 233. 234. 0 0
Моя торговая стратегия описывается следующим образом: если есть сигнал на day t
, тогда покупайте на следующем day t+1
к цене открытия и продавайтек цене закрытия.В моем примере набора данных есть сигнал на 2-й день, поэтому я покупаю на 3-й день и продаю по цене закрытия 3-го дня. Я вкладываю 100 $, поэтому в 3-й день я получаю прибыль в 3 $.Следующий сигнал приходит на 5-й день, поэтому я вкладываю свои 103 $ в 6-й день и получаю 3 дополнительных доллара.Эта таблица иллюстрирует мою торговую стратегию:
date open close return signal trading.strategy capital
<date> <dbl> <dbl> <dbl> <dbl>
1 2015-01-20 213. 211. -1 0 - 100
2 2015-01-21 211. 227. 7 1 - 100
3 2015-01-22 227. 233. 3 0 buy+sell 103
4 2015-01-23 234. 233. 0 0 - 103
5 2015-01-24 233. 248. 7 1 - 103
6 2015-01-25 247. 254. 3 0 buy+sell 106
7 2015-01-26 254. 273. 8 1 - 106
8 2015-01-27 273. 263. -4 0 buy+sell 102
9 2015-01-28 263. 234. -11 0 - 102
10 2015-01-29 233. 234. 0 0 - 102
Может ли кто-нибудь помочь мне написать функцию, которая выполняет мою торговую стратегию?
Вот мои данные:
structure(list(date = structure(c(16455, 16456, 16457, 16458,
16459, 16460, 16461, 16462, 16463, 16464), class = "Date"), open = c(212.91,
211.38, 227.32, 233.52, 232.7, 247.35, 254.08, 273.17, 263.35,
233.35), close = c(211.32, 226.9, 233.41, 232.88, 247.85, 253.72,
273.47, 263.48, 233.91, 233.51), return = c(-1, 7, 3, 0, 7, 3,
8, -4, -11, 0), signal = c(0, 1, 0, 0, 1, 0, 1, 0, 0, 0)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -10L))