[R-SIG-Finance] how to avoid loops & using xts, quantmod
Immanuel
mane.desk at googlemail.com
Wed Sep 29 17:14:40 CEST 2010
Hey all,
I'm struggling with my first lines of R code.
It would be great if someone could help me to get the code
below runing, or show me how to do this task more efficient.
- can I avoid to use the loops?
- why does "Lo(GDAXI[i]) < tmp.lowest" not return a boolean?
best regards
Immanuel
-----------------------------------------------------------------------------
# clear workspace
rm(list = ls())
# set working directory
setwd("~/Ue1")
# load libraries
library(quantmod)
library(TTR)
# load costum functions
source("A2_func.R")
underlying = "GDAXI"
getSymbols("^GDAXI")
# trendfilter: -1 down-trend, 1 up-trend
# nothing smart, just an xts object containing 1 & -1
# according to trendfilter
direction = dir.macd(GDAXI)
period.lowest = xts(Inf, Sys.Date())
period.highest = xts(-Inf, Sys.Date())
tmp.lowest <- xts(Inf , Sys.Date()) # max value nehmen...
tmp.highest <- xts(-Inf, Sys.Date())
# now i want to find the max value (increasing) for every
up-trend-periode (1,1,1)
# and min value for every down-trend-periode (decreasing) (-1,-1,-1)
for ( i in 1 : length(direction) ) {
if (direction[i] == -1) {
tmp.highest <- -Inf
if ( Lo(GDAXI[i]) < tmp.lowest)
period.lowest[i] <- tmp.lowest
}
if (direction[i] == 1) {
tmp.lowest <- Inf
if (Hi(GDAXI[i] > tmp.highest)
period.highest <- tmp.highest
}
}
------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
dir.macd <- function(priceSeries) {
library(quantmod)
library(TTR)
# MACD settings
slow = 10
fast = 25
av = 5
# Calculate the MACD indicator
macd <- MACD(priceSeries, fast,slow,av )
# Create the long (up) and short (dn) signals
sigup <- ifelse(macd$macd < macd$signal, 1, 0)
sigdn <- ifelse(macd$macd > macd$signal, -1, 0)
# Lag signals to align with days in market,
# not days signals were generated
#sigup <- Lag(sigup,1) # Use lag() to avoid Toby's error
#sigdn <- Lag(sigdn,1) # Use lag() to avoid Toby's error
sigup <- lag(sigup,1) # Note k=1 implies a move *forward*
sigdn <- lag(sigdn,1) # Note k=1 implies a move *forward*
# Replace missing signals with no position
# (generally just at beginning of series)
sigup[is.na(sigup)] <- 0
sigdn[is.na(sigdn)] <- 0
# Combine both signals into one vector
sig <- sigup + sigdn
# Calculate SAR-direction
for ( i in 2 : length(sig) ) {
if (sig[i] == 0)
sig[i]=sig[i-1]
}
sig
}
More information about the R-SIG-Finance
mailing list