Created
June 6, 2018 00:27
-
-
Save xxyjoel/2245a26951bac0fc0846af02b465b2e8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#functions for altering your peceptions of standard daily OHLC values | |
price.diff <- function(stock.data) { | |
price <- stock.data$adj | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < 2) { | |
output[i] <- 0 | |
} else { | |
output[i] <- ((price[i] - price[i-1]) / price[i-1])*100 | |
} | |
} | |
return(output) | |
} | |
price.diff <- price.diff(stock.data) | |
stock.data$price.diff <- price.diff | |
pos.price.diff <- function(stock.data) { | |
#browser() | |
window <- 10 | |
diff <- stock.data$price.diff | |
pos.diff <- vector() | |
output <- vector() | |
for (i in 1:length(diff)) { | |
if(diff[i] > 0) { | |
pos.diff[i] <- diff[i] | |
} else if (diff[i] <= 0) { | |
pos.diff[i] <- NA | |
} | |
if ( i < window){ | |
output[i] <- NA | |
} else if (i >= window && !all(is.na(pos.diff[( i - (window - 1) ):i]))) { | |
output[i] <- (sum(pos.diff[( i - (window - 1) ):i], na.rm = TRUE) / window) | |
} else { | |
output[i] <- NA | |
} | |
} | |
return(output) | |
} | |
pos.price.diff <- pos.price.diff(stock.data) | |
stock.data$pos.price.diff <- pos.price.diff | |
neg.price.diff <- function(stock.data) { | |
#browser() | |
window <- 10 | |
diff <- stock.data$price.diff | |
neg.diff <- vector() | |
output <- vector() | |
for (i in 1:length(diff)) { | |
if(diff[i] < 0) { | |
neg.diff[i] <- diff[i] | |
} else if (diff[i] >= 0) { | |
neg.diff[i] <- NA | |
} | |
if ( i < window){ | |
output[i] <- NA | |
} else if (i >= window && !all(is.na(neg.diff[( i - (window - 1) ):i]))) { | |
output[i] <- (sum(neg.diff[( i - (window - 1) ):i], na.rm = TRUE) / window) | |
} else { | |
output[i] <- NA | |
} | |
} | |
return(output) | |
} | |
neg.price.diff <- neg.price.diff(stock.data) | |
stock.data$neg.price.diff <- neg.price.diff | |
swing.prob <- function(stock.data) { | |
#browser() | |
diff <- stock.data$price.diff | |
neg.diff <- stock.data$neg.price.diff | |
pos.diff <- stock.data$pos.price.diff | |
swings <- vector() | |
swing.prob <- vector() | |
output <- vector() | |
for (i in 1:length(diff)) { | |
if ( | |
(abs(neg.price.diff[i] > pos.price.diff[i])) && | |
(!is.na(price.diff[i]) && (!is.na(neg.price.diff[i])) && (!is.na(pos.price.diff[i])) | |
&& (price.diff[i] < (neg.price.diff[i] * 1.4))) | |
&& | |
(!is.na(price.diff[i-1]) && (!is.na(neg.price.diff[i-1])) && (!is.na(pos.price.diff[i-1])) | |
&& (price.diff[i-1] < (neg.price.diff[i-1] * 1.4))) | |
|| | |
(abs(neg.price.diff[i] <= pos.price.diff[i])) && | |
(!is.na(price.diff[i]) && (!is.na(neg.price.diff[i])) && (!is.na(pos.price.diff[i])) | |
&& (price.diff[i] < (neg.price.diff[i] * 1.3))) | |
# (!is.na(price.diff[i]) && (!is.na(neg.price.diff[i])) && (!is.na(pos.price.diff[i])) | |
# && (price.diff[i] < (neg.price.diff[i] * 4))) | |
# && (abs(neg.diff[i]) < (abs(pos.diff[i]))) | |
) | |
{ | |
swings[i] <- 1 | |
} else if ( | |
(abs(neg.price.diff[i] < pos.price.diff[i])) && | |
(!is.na(price.diff[i]) && (!is.na(neg.price.diff[i])) && (!is.na(pos.price.diff[i])) | |
&& (price.diff[i] > (pos.price.diff[i] * 1.4))) | |
&& | |
(!is.na(price.diff[i-1]) && (!is.na(neg.price.diff[i-1])) && (!is.na(pos.price.diff[i-1])) | |
&& (price.diff[i-1] > (pos.price.diff[i-1] * 1.4))) | |
|| | |
(abs(neg.price.diff[i] <= pos.price.diff[i])) && | |
(!is.na(price.diff[i]) && (!is.na(neg.price.diff[i])) && (!is.na(pos.price.diff[i])) | |
&& (price.diff[i] > (pos.price.diff[i] * 1.3))) | |
# (!is.na(price.diff[i]) && (!is.na(neg.price.diff[i])) && (!is.na(pos.price.diff[i])) | |
# && (price.diff[i] > (pos.price.diff[i] * 4))) | |
# && (abs(neg.diff[i]) > (abs(pos.diff[i]))) | |
) | |
{ | |
swings[i] <- -1 | |
} else { | |
swings[i] <- 0 | |
} | |
} | |
return(swings) | |
} | |
swing.prob <- swing.prob(stock.data) | |
stock.data$swing.prob <- swing.prob | |
alt.swing.prob <- function(stock.data) { | |
#browser() | |
swing.prob <- stock.data$swing.prob | |
output <- vector() | |
for (i in 2:length(stock.data$date)) { | |
if ( | |
((swing.prob[i-1] == 1) && (swing.prob[i] == 0)) | |
) | |
{ | |
output[i] <- 1 | |
} else if ( | |
((swing.prob[i-1] == -1) && (swing.prob[i] == 0)) | |
) | |
{ | |
output[i] <- -1 | |
} else { | |
output[i] <- 0 | |
} | |
} | |
return(output) | |
} | |
alt.swing.prob <- alt.swing.prob(stock.data) | |
stock.data$alt.swing.prob <- alt.swing.prob | |
current.state <- function(stock.data) { | |
#browser() | |
diff <- stock.data$price.diff | |
neg.diff <- stock.data$neg.price.diff | |
pos.diff <- stock.data$pos.price.diff | |
output <- vector() | |
for (i in 2:length(stock.data$date)) { | |
if(is.na(pos.diff[i])) { | |
next | |
} | |
if ( | |
((diff[i] >= 0) && (diff[i] < pos.diff[i])) | |
) | |
{ | |
output[i] <- 1 | |
} else if ( | |
((diff[i] < 0) && (diff[i] > neg.diff[i])) | |
) | |
{ | |
output[i] <- 2 | |
} else if ( | |
(diff[i] > pos.diff[i]) | |
) | |
{ | |
output[i] <- 3 | |
} else if ( | |
(diff[i] < neg.diff[i]) | |
) | |
{ | |
output[i] <- 4 | |
} | |
} | |
return(output) | |
} | |
states <- current.state(stock.data) | |
stock.data$state <- states | |
after.hrs.chg <- function(stock.data) { | |
price <- stock.data$adj | |
open <- stock.data$adj.open | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < 2) { | |
output[i] <- 0 | |
} else { | |
output[i] <- ((open[i] - price[i-1]) / price[i-1])*100 | |
} | |
} | |
return(output) | |
} | |
after.hrs.chg <- after.hrs.chg(stock.data) | |
stock.data$after.hrs.chg <- after.hrs.chg | |
CalculateCMAa <- function(stock.data) { | |
window <- 5 | |
price <- stock.data$adj | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
CMAa <- CalculateCMAa(stock.data) | |
stock.data$cma.a <- CMAa | |
CalculateCMAb <- function(stock.data) { | |
window <- 10 | |
price <- stock.data$adj | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
CMAb <- CalculateCMAb(stock.data) | |
stock.data$cma.b <- CMAb | |
CalculateCMAc <- function(stock.data) { | |
window <- 30 | |
price <- stock.data$adj | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
CMAc <- CalculateCMAc(stock.data) | |
stock.data$cma.c <- CMAc | |
CalculateHMAa <- function(stock.data) { | |
window <- 6 | |
price <- stock.data$adj.high | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
HMAa <- CalculateHMAa(stock.data) | |
stock.data$hma.a <- HMAa | |
CalculateHMAb <- function(stock.data) { | |
window <- 10 | |
price <- stock.data$adj.high | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
HMAb <- CalculateHMAb(stock.data) | |
stock.data$hma.b <- HMAb | |
CalculateHMAc <- function(stock.data) { | |
window <- 30 | |
price <- stock.data$adj.high | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
HMAc <- CalculateHMAc(stock.data) | |
stock.data$hma.c <- HMAc | |
CalculateLMAa <- function(stock.data) { | |
window <- 6 | |
price <- stock.data$adj.low | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
LMAa <- CalculateLMAa(stock.data) | |
stock.data$lma.a <- LMAa | |
CalculateLMAb <- function(stock.data) { | |
window <- 10 | |
price <- stock.data$adj.low | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
LMAb <- CalculateLMAb(stock.data) | |
stock.data$lma.b <- LMAb | |
CalculateLMAc <- function(stock.data) { | |
window <- 30 | |
price <- stock.data$adj.low | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum(price[( i - (window - 1) ):i]) / window) | |
} | |
} | |
return(output) | |
} | |
LMAc <- CalculateLMAc(stock.data) | |
stock.data$lma.c <- LMAc | |
PriceSD <- function(stock.data) { | |
window <- 5 | |
price <- stock.data$adj | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- sd(price[( i - (window - 1) ):i]) | |
} | |
} | |
return(output) | |
} | |
price.sd <- PriceSD(stock.data) | |
stock.data$price.sd <- price.sd | |
diffSD <- function(stock.data) { | |
window <- 5 | |
diff <- stock.data$price.diff | |
output <- vector() | |
for (i in 1:length(diff)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- sd(diff[( i - (window - 1) ):i]) | |
} | |
} | |
return(output) | |
} | |
diff.sd <- diffSD(stock.data) | |
stock.data$diff.sd <- diff.sd | |
diffHL <- function(stock.data) { | |
high <- stock.data$adj.high | |
low <- stock.data$adj.low | |
output <- vector() | |
for (i in 1:length(high)) { | |
output[i] <- high[i] - low[i] | |
} | |
return(output) | |
} | |
hl.diff <- diffHL(stock.data) | |
stock.data$hl.diff <- hl.diff | |
diffOC <- function(stock.data) { | |
open <- stock.data$adj.open | |
close <- stock.data$adj | |
output <- vector() | |
for (i in 1:length(open)) { | |
output[i] <- close[i] - open[i] | |
} | |
return(output) | |
} | |
oc.diff <- diffOC(stock.data) | |
stock.data$oc.diff <- oc.diff | |
calc.volume.ratio <- function(stock.data) { | |
oc.diff <- stock.data$oc.diff | |
volume <- stock.data$volume | |
output <- vector() | |
for (i in 1:length(volume)) { | |
output[i] <- oc.diff[i] / volume[i] | |
} | |
return(output) | |
} | |
vol.ratio <- calc.volume.ratio(stock.data) | |
stock.data$vol.ratio <- vol.ratio | |
vol.pct.avg.chg <- function(stock.data) { | |
ratio <- stock.data$vol.ratio | |
output <- vector() | |
for (i in 1:length(ratio)) { | |
output[i] <- (ratio[i] / mean(stock.data$vol.ratio[1:i])) * 100 | |
} | |
return(output) | |
} | |
vol.pct.avg.chg <- vol.pct.avg.chg(stock.data) | |
stock.data$vol.pct.avg.chg <- vol.pct.avg.chg | |
diffHC <- function(stock.data) { | |
price <- stock.data$adj | |
high <- stock.data$adj.high | |
output <- vector() | |
for (i in 1:length(price)) { | |
output[i] <- high[i] - price[i] | |
} | |
return(output) | |
} | |
hc.diff <- diffHC(stock.data) | |
stock.data$hc.diff <- hc.diff | |
diffLC <- function(stock.data) { | |
price <- stock.data$adj | |
low <- stock.data$adj.low | |
output <- vector() | |
for (i in 1:length(price)) { | |
output[i] <- low[i] - price[i] | |
} | |
return(output) | |
} | |
lc.diff <- diffLC(stock.data) | |
stock.data$lc.diff <- lc.diff | |
pct.days.pos <- function(stock.data) { | |
window <- 10 | |
price <- stock.data$price.diff | |
output <- vector() | |
for (i in 1:length(price)) { | |
if (i < window) { | |
output[i] <- 0 | |
} else { | |
output[i] <- (sum (unique(price[( i - (window - 1) ):i]) > 0) / window) | |
} | |
} | |
return(output) | |
} | |
pct.days.pos <- pct.days.pos(stock.data) | |
stock.data$pct.days.pos <- pct.days.pos |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment