首页 > 解决方案 > 周五的收益是否大于周一?

问题描述

我正在寻找 R 中的 if 语句,它可以帮助我确定周一收盘价是否高于周五收盘价,关键是将其添加为额外的列。

我尝试了以下方法,得出了合理的结果:

GSPC$GSPC.DIFF <- for(i in 1:length(GSPC$GSPC.Weekdaynr)) {if(GSPC$GSPC.Weekdaynr[i] > 4){GSPC.DIFF <- append(GSPC.DIFF,5) }else{GSPC.DIFF <- append(GSPC.DIFF, "")}} 在此处输入图像描述

但是将语句 1 更改为 append(GSPC.DIFF,GSPC$GSPC.Close)

GSPC$GSPC.DIFF <- for(i in 1:length(GSPC$GSPC.Weekdaynr)) {if(GSPC$GSPC.Weekdaynr[i] > 4){GSPC.DIFF <- append(GSPC.DIFF,GSPC$ GSPC.Close)}else{GSPC.DIFF <- append(GSPC.DIFF, "")}}

给出以下内容:[在此处输入图像描述][2]

有谁知道为什么它不像第一种情况那样每五行都有价值?

这里是收集值的地方: 在此处输入图像描述

标签: rquantitative-finance

解决方案


这是一种可能有用的方法(我猜不是最优雅的方法):

library(dplyr)
library(tibble)
library(lubridate)

set.seed(123)
data <- tibble(
  Date = seq.Date(from = as.Date("2020/04/01"), to = as.Date("2020/05/12"), by = "day"),
  Open = runif(42, min = 11500, max = 12600),
  Close = runif(42, min = 11500, max = 12600)
)

data <- data %>%
  mutate(day = weekdays(Date),
         week = week(Date)) %>%
  filter(day == "Monday" | day == "Friday") %>%
  group_by(week) %>%
  mutate(Delta = ifelse(Close - lead(Open, 1) > 0, "Higher", "Lower")) %>%
  select(Date, week, Delta) %>%
  filter(!is.na(Delta))

有了这个输出:

> data
# A tibble: 6 x 3
# Groups:   week [6]
  Date        week Delta 
  <date>     <dbl> <chr> 
1 2020-04-03    14 Higher
2 2020-04-10    15 Lower 
3 2020-04-17    16 Lower 
4 2020-04-24    17 Lower 
5 2020-05-01    18 Lower 
6 2020-05-08    19 Lower 

从这个输入:

> data
# A tibble: 42 x 3
   Date         Open  Close
   <date>      <dbl>  <dbl>
 1 2020-04-01 11816. 11955.
 2 2020-04-02 12367. 11906.
 3 2020-04-03 11950. 11668.
 4 2020-04-04 12471. 11653.
 5 2020-04-05 12535. 11756.
 6 2020-04-06 11550. 12013.
 7 2020-04-07 12081. 11793.
 8 2020-04-08 12482. 12444.
 9 2020-04-09 12107. 11550.
10 2020-04-10 12002. 11986.

推荐阅读