0

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

我究竟做错了什么?

df_with_decisions <- 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    )  )
4

3 回答 3

1

问题将是&&返回单个 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    )  )
于 2020-05-28T19:07:19.000 回答
0

尽可能多地使用括号,这会有所帮助。我总是在 case_when 结束时以 TRUE 结束。变异是与 Case_when 串联的一个里程碑。这是一个例子:

mutate(Intensidad_guerra = case_when(
     (MD_P2_filt$battle_type %in% c("pitched battle") | MD_P2_filt$battle_type %in% c("siege")) ~ "nivel alto",
                                  MD_P2_filt$battle_type %in% c("ambush")  ~"nivel medio",
                                  TRUE ~ "nivel bajo")) 
于 2021-12-13T17:45:59.500 回答
0

逻辑错误也。

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

这不会打印 Hello

于 2020-05-28T19:11:52.620 回答