2013-07-20 3 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. Я не понимаю, почему торговый столбец не равен 2 на 2013-07-14 и 2013-07-16.Создать столбец с несколькими IfElse()

У меня есть ответ на упомянутую выше проблему. моя реальная проблема - это что-то другое. я думал, что сделаю исследование и сделаю это, но проблема остается. Мне нужна колонка торговли, чтобы дать мне +1 или -1 каждый раз, когда закрытие снижается на 5%, 10%, 15% ... от максимума и когда от соответствующего закрытия, если снова закрытие вверх на 10%, оно должно дать мне -1. , когда мы добавляем +1 и -1 на любую заданную дату она не должна быть -ve или больше 5.

+0

Результат правильный, если x *. 95

ответ

2

колонна торговли никогда не 2, потому что всякий раз, когда file$high*.9>=file$CLOSE является TRUE, file$high*.95>=file$CLOSE также TRUE и ваш первый 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)) 

P.S. Потенциально использование ifelse выполняется быстрее (при разбиении на три строки все «2» устанавливаются на первый 0, а затем 1, а затем на 2). В вашем случае, когда результат «2» является относительно нечастым, я уверен, что разница будет слишком незначительной для сравнения.

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