2013-07-20 65 views
2
require(xts) 

data<- c(100,101,102,103,104,99,98,97,94,93,103,90,104,105,110) 
date<- Sys.Date()-15:1 
file<- xts(data,date) 
colnames(file)<- "CLOSE" 
file$high<- cummax(file$CLOSE) 
file$trade<- ifelse(file$high*.95>=file$CLOSE, 1,ifelse(file$high*.9>=file$CLOSE, 2,0)) 
file 

      CLOSE high trade 
2013-07-05 100 100  0 
2013-07-06 101 101  0 
2013-07-07 102 102  0 
2013-07-08 103 103  0 
2013-07-09 104 104  0 
2013-07-10 99 104  0 
2013-07-11 98 104  1 
2013-07-12 97 104  1 
2013-07-13 94 104  1 
2013-07-14 93 104  1 
2013-07-15 103 104  0 
2013-07-16 90 104  1 
2013-07-17 104 104  0 
2013-07-18 105 105  0 
2013-07-19 110 110  0 

我已經給了交易欄的命令就是在.90*column high >= close,結果在貿易應該是2。我不明白爲什麼2013-07-14和2013-07-16貿易專欄不等於2。創建多個ifelse()列

我已經得到了上述問題的答案。我的實際問題是別的。我以爲我會做研究並完成它,但問題仍然存在。 我需要交易專欄給我+1或-1每次收盤價從高位下跌5%,10%,15%......如果再收盤時收盤價再上漲10%,它應該給我-1。 當我們在任何給定日期添加+1和-1它不應該是-ve或大於5

+0

結果是正確的,如果x *。 95

回答

2

更大的貿易欄是從來2因爲每當file$high*.9>=file$CLOSETRUEfile$high*.95>=file$CLOSETRUE和你的第一個ifelse電話絕不是FALSE

做這樣的事情,而不是:

file$trade <- 0 
file$trade[file$high*.95>=file$CLOSE] <- 1 
file$trade[file$high*.90>=file$CLOSE] <- 2 
+0

其工作.. ............................... ....... –

+0

我可以做什麼與貿易專欄,我得到我的第一個1然後所有元素將爲零,直到我得到2, –

+0

@AshishJalan這應該是另一個問題,與自己的示例數據:-) –

3

我想我更喜歡約書亞對清晰度的做法,但解決您的ifelse條款的方式是交換周圍的測試。因此,改變這種:

file$trade<- ifelse(file$high*.95>=file$CLOSE, 1,ifelse(file$high*.9>=file$CLOSE, 2,0)) 

這樣:

file$trade<- ifelse(file$high*.90>=file$CLOSE, 2,ifelse(file$high*.95>=file$CLOSE, 1,0)) 

附:有可能使用ifelse的速度更快(當分解成三行時,所有的「2」在被設置爲2之前被設置爲前0和後1)。在你的情況下,「2」結果相對不常見,我相信這個差異太小而不能作爲基準。