2014-02-04 2 views
2

Я хочу создать новый пользовательский индикатор TA для символа запаса в R. Но я понятия не имею, как преобразовать мою условную стратегию SQL в определенную R функцию и добавить ее до ChartSeries в R.Настройка новой торговой стратегии в R с помощью quantmod

Вопрос приведен в следующем коде как объяснение.

library("quantmod") 
library("FinancialInstrument") 
library("PerformanceAnalytics") 
library("TTR") 


stock <- getSymbols("002457.SZ",auto.assign=FALSE,from="2012-11-26",to="2014-01-30") 
head(stock) 

chartSeries(stock, theme = "white", subset = "2013-07-01/2014-01-30",TA = "addSMA(n=5,col=\"gray\");addSMA(n=10,col=\"yellow\"); 
      addSMA(n=20,col=\"pink\");addSMA(n=30,col=\"green\");addSMA(n=60,col=\"blue\");addVo()") 

Вопрос: Как я могу переписать код ниже, чтобы сделать его доступным как функцию в R?

#Signal Design 
#Today's volume is the lowset during the last 20 trading days 
lowvolume <- VOL<=LLV(VOL,20); 

#seveal moving average lines stick together 
X1:=ABS(MA(C,10)/MA(C,20)-1)<0.01; 
X2:=ABS(MA(C,5)/MA(C,10)-1)<0.01; 
X3:=ABS(MA(C,5)/MA(C,20)-1)<0.01; 

#If the follwing condition is satisfied, then the signal appears 
MA(C,5)>REF(MA(C,5),1) AND X1 AND X2 AND X3 AND lowvolume; 

#Convert the above SQL code into the following R custom function 
VOLINE <- function(x) { 

    } 

#Create a new TA function for the chartseries and then add it up. 
addVoline <- newTA(FUN=VOLINE, 
        + preFUN=Cl, 
        + col=c(rep(3,6), 
          + rep(”#333333”,6)), 
           + legend=”VOLINE”) 

ответ

2

Я не думаю, что вам нужно SQL в этом случае

Попробуйте

require(quantmod) 

# fetch the data 
s <- get(getSymbols('yhoo')) 

# add the indicators 
s$ma5 <- SMA(Cl(s) ,5) 
s$ma10 <- SMA(Cl(s) ,10) 
s$ma20 <- SMA(Cl(s) ,20) 
s$llv <- rollapply(Vo(s), 20, min) 

# generate the signal 
s$signal <- (s$ma10/s$ma20 - 1 < 0.01 & s$ma5/s$ma10 - 1 < 0.01 & s$ma5/s$ma20 - 1 < 0.01 & Vo(s) == s$llv) 

# draw 
chart_Series(s) 
add_TA(s$signal == 1, on = 1, col='red') 

Я не уверен, что REF средство, но я уверен, что вы можете сделать это себя.

Это выход (я не могу показаться, чтобы загрузить фотографию, но вы видите диаграмму с горизонтальными линиями, где сигнал эк 1)

+0

Если я изменю последний код, например: x <- который (сигнал ["2013-07-01/2014-01-30",]) [1] ss <- s ["2013-07-01/2014-01-30 "] addTA (ss [x," s.Low "] - 10, pch = 17, type =" p ", col =" red ", on = 1). У меня есть ошибка, почему ? Благодаря! – user3015546

+0

Что вы пытаетесь сделать? Если вы попросите некоторое время вернуться к рисованию горизонтальных линий в диаграмме 'quantmod' и получите ответ от создателя пакета - возможно [это] (http://stackoverflow.com/questions/15384458/add-vertical-lines-to -quantmodchart-series) поможет вам. – haki

0

Используйте функцию в качестве оболочки для sqldf() в sqldf пакете. Аргументом для sqldf() будет оператор выбора в кадре данных, который имеет данные.

Хорошее учебное пособие для этого можно найти по адресу Burns Statistics.

+0

Спасибо, но я действительно хочу, чтобы добавить кратные сигналы, когда все условно удовлетворены , Как в quantmod, «signal1 < fastMA > = slowMA». – user3015546

 Смежные вопросы

  • Нет связанных вопросов^_^