-
Notifications
You must be signed in to change notification settings - Fork 0
/
scr.R
104 lines (102 loc) · 2.78 KB
/
scr.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#The quantmod package is used here
install.packages('quantmod')
library(quantmod)
getSymbols('TSLA')
head(TSLA)
tail(TSLA)
TSLA <- last(TSLA,"2 years")
head(TSLA)
chartSeries(TSLA,type = "candlesticks",theme = chartTheme('white'))
rsi=RSI(Cl(TSLA),n=14)
tail(rsi,n=5)
addRSI(n=14,maType = "EMA")
#for evaluation of strategy installing the package PerformanceAnalytics
install.packages("PerformanceAnalytics")
library(PerformanceAnalytics)
#creating strategy using rsi
#buy 1 unit if rsi<30, else 0
day<-14
#RSI 14b implies 14 day index
price<-Cl(TSLA)
View(price)
signal<-c()
rsi<-RSI(price,day)
View(rsi)
signal[1:day+1]<-0
for(i in (day+1):length(price)){
if(rsi[i]<30){
signal[i]<-1
}else{
signal[i]<-0
}
}
signal<-reclass(signal,Cl(TSLA))
View(signal)
qty<-300
signal<-c()
signal[1:(day+1)] <- 0
price <- Cl(TSLA)
stock <- c() #stock holding
stock[1:(day+1)] <-0
price<-Cl(TSLA)
cash <-c()
cash[1:(day+1)] <- 10000
View(rsi)
for(i in (day+1):length(price)){
if(rsi[i]<30){
signal[i]<-1}
elseif(rsi[i]<50){signal[i]<-0}
elseif(rsi[i]<50){
else if (rsi[i] < 50){
rsi <- RSI(price, day) #rsi is the lag of RSI
for (i in (day+1): length(price)){
if (rsi[i] < 30){ #buy one more unit if rsi < 30
signal[i] <- 1
} else if (rsi[i] < 50){ #no change if rsi < 50
signal[i] <- 0
} else { #sell if rsi > 50
signal[i] <- -1
}
}
signal<-reclass(signal,price)
View(signal)
trade <- Lag(signal) #rsi is the lag of RSI
for (i in (day+1): length(price)){
if (trade[i]>=0){
stock[i] <- stock[i-1] + qty*trade[i]
cash[i] <- cash[i-1] -
qty*trade[i]*price[i]
} else{
stock[i] <- 0
cash[i] <- cash[i-1] +
stock[i-1]*price[i]
}
}
stock<-reclass(stock,price)
cash<-reclass(cash,price)
equity <-c()
equity[1:(day+1)] <- 10000
return<-c()
return[1:(day+1)] <- 0
for (i in (day+1): length(price)){
equity[i] <- stock[i] * price[i] + cash[i]
return[i] <- equity[i]/equity[i-1]-1
}
equity<-reclass(equity,price)
return<-reclass(return,price)
equity <-c()
equity[1:(day+1)] <- 10000
return<-c()
return[1:(day+1)] <- 0
for (i in (day+1): length(price)){
equity[i] <- stock[i] * price[i] + cash[i]
return[i] <- equity[i]/equity[i-1]-1
}
equity<-reclass(equity,price)
return<-reclass(return,price)
View(trade)
charts.PerformanceSummary(return,main = "Non-Day Trading")
#observe cumulative performance
chart_Series(cash, name="Cash Holding")
chart_Series(stock, name="Stock Holding")
#calculate exact returns in terms of cash and stock holding