-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMaxProfitStrike.R
91 lines (58 loc) · 3.11 KB
/
MaxProfitStrike.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#UTF-8
if(!require('quantmod')) install.packages('quantmod')
require(dplyr)
require(ggplot2)
# Безрисковая ставка депозита
bank_ror = 0.05
# Задаём символ базового актива;
symbol = "QQQ"
# Задаём Цель по цене безового актива;
target = 200
# Загружаем текущую цену базового актива;
symbol_price = getQuote(symbol)$Last
# Загружаем доступные даты экспирации символа (Символ);
expiry_dates = GetExpiryDates(symbol)
expiry_dates
expiry_date = expiry_dates[6]
# Определяем направление движения к цели
opt_rights = c("call", "put")
opt_right = ifelse(target>symbol_price, opt_rights[1], opt_rights[2])
# Выбираем тип цены для определения премии
market_price_types = c("mid", "last")
market_price_type = market_price_types[2]
option_chain_short = GetStrikePremiumTable(symbol, expiry_date, market_price_type, opt_right)
#atm_index = AtmStrike(option_chain_short$Strike, symbol_price, T)
profit_for_targets = CalcProfitForTargets(option_chain_short, target, opt_right, symbol_price, 0.05, expiry_date)
profit_for_targets = profit_for_targets %>% dplyr::select(Strike, Target, Return) %>%
filter(Strike<=symbol_price) %>%
mutate(Return = round(Return * 100, 2))
profit_for_targets %>% top_n(., 5, Return)
require(scales)
gg1 = ggplot(data=profit_for_targets, aes(x=Target, y=Strike, fill=Return)) + geom_tile() +
geom_text(aes(label=Return), size=3) +
scale_fill_gradient2(low = "white", high = "green", mid = "white")
require(plotly)
ggplotly(gg1)
# Рассчитываем прибыль для каждого страйка на уровне Цели (табл:страйк,премия; цель как число, кол/пут как фактор/текст) -> Страйк~Прибыль;
profit_for_strike = CalcProfitForStrike(option_chain_short, target, opt_right, symbol_price, 0.05, expiry_date)
# Площать треугольника прибыли
require(ggplot2)
profit_square = profit_for_strike %>% mutate(Sqr = (Profit*Q)*abs(Strike-target))
qplot(x = Strike, y = Sqr, data=profit_square)
# Рисуем график Страйк~Прибыль;
require(ggplot2)
gg = ggplot(data=profit_for_strike, aes(x=Strike, y=Return), color='red') + geom_point()
gg + geom_vline(xintercept = symbol_price, show.legend = T) +
geom_text(data = profit_for_strike %>% filter(Return>0.04),aes(label=paste0(round(Return*100, 2),"%" ), vjust=-1, hjust=1 ), size=3)
# Интерактивный график - способ 1
require(ggiraph)
gg <- ggplot(profit_for_strike, aes(x = Strike, y = Profit_per_dollar, tooltip = Profit_per_dollar ) ) +
geom_point_interactive(size=3)
library(rvg)
mytheme_main <- theme( panel.background = element_blank(),
panel.grid.major = element_line(colour = "#dddddd"),
axis.ticks = element_line(colour = "#dddddd") )
ggiraph(code = {print(gg)})
# Интерактивный график - способ 2
require(plotly)
ggplotly(gg)