Skip to content

Instantly share code, notes, and snippets.

@xxyjoel
Created June 6, 2018 00:27
Show Gist options
  • Save xxyjoel/2245a26951bac0fc0846af02b465b2e8 to your computer and use it in GitHub Desktop.
Save xxyjoel/2245a26951bac0fc0846af02b465b2e8 to your computer and use it in GitHub Desktop.
#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