dplyr时的案例

问题描述 投票:0回答:2

我正在尝试创建一个买/卖信号。我正在尝试使用case_when语句分配信号。在上一步中,我使用tidyquant TQ_MUTATE创建了几个新列。这仅分配“可能向上”和“可能向下”信号。

我在做什么错?

df_with_decisions %group_by(符号)%>%mutate(

signal = case_when(
   (EMA_9 > EMA_55) ~ "possible up",
  (EMA_9 > EMA_55 && EVWMA_9 > EMA_55) ~ "watch upward",
  (EMA_9 > EMA_55 && EMA_21 >= EMA_55 && EVWMA_9 > EMA_55) ~ "buy",
  (EMA_9 > EMA_55 && EMA_21 >= EMA_55 && EVWMA_9 > EMA_55 && EVWMA_21 > EMA_55) ~ "strong_buy",
  EMA_9 < EMA_55 ~ "possible down",
  (EMA_9 < EMA_55 && EVWMA_9 < EMA_55) ~ "watch downward",
  (EMA_9 < EMA_55 && EMA_21 <= EMA_55 && EVWMA_9 < EMA_55) ~ "sell",
  (EMA_9 < EMA_55 && EMA_21 <= EMA_55 && EVWMA_9 < EMA_55 && EVWMA_21 < EMA_55) ~ "strong_sell",
  ),

previous_signal = lag(signal, 1),

decision = case_when(
  signal == previous_signal ~ "hold",
  TRUE ~ signal    )  )
r quantmod case-when tidyquant
2个回答
0
投票

问题是&&返回单个TRUE / FALSE输出,而不是与输入长度相同的逻辑向量

test %>%
     group_by(symbol) %>%
     mutate(

signal = case_when(
   (EMA_9 > EMA_55) ~ "possible up",
  (EMA_9 > EMA_55 & EVWMA_9 > EMA_55) ~ "watch upward",
  (EMA_9 > EMA_55 & EMA_21 >= EMA_55 & EVWMA_9 > EMA_55) ~ "buy",
  (EMA_9 > EMA_55 & EMA_21 >= EMA_55 & EVWMA_9 > EMA_55 & EVWMA_21 > EMA_55) ~ "strong_buy",
  EMA_9 < EMA_55 ~ "possible down",
  (EMA_9 < EMA_55 & EVWMA_9 < EMA_55) ~ "watch downward",
  (EMA_9 < EMA_55 & EMA_21 <= EMA_55 & EVWMA_9 < EMA_55) ~ "sell",
  (EMA_9 < EMA_55 && EMA_21 <= EMA_55 & EVWMA_9 < EMA_55 & EVWMA_21 < EMA_55) ~ "strong_sell",
  ),

previous_signal = lag(signal, 1),

decision = case_when(
  signal == previous_signal ~ "hold",
  TRUE ~ signal    )  )

0
投票

也是逻辑错误。

case_when(
  (5 > 3) ~ "Hi",
  ((5 > 3) & (6 > 3)) ~ "Hello"
)

这不会打印你好

© www.soinside.com 2019 - 2024. All rights reserved.