贸易分类的刻度测试
Tick test for trade classification
正在写硕士论文,我下载了交易数据:
>head(Data1)
PRICE PREVIOUS
1 100 99
2 98 100
3 100 98
4 100 100
5 100 100
6 101 100
目标是添加一个列,指示交易是由买方 ("buy") 还是卖方 ("sell") 发起的。规则如下:
- 价格 < 上一个 => 卖出
- 价格 > 上一个 => 购买
- 价格 == 上一个 => 先前分类
它应该是这样的
>head(Data1)
PRICE PREVIOUS TICK
1 100 99 Buy
2 98 100 Sell
3 100 98 Buy
4 100 100 Buy
5 100 100 Buy
6 101 100 Buy
我写了下面的代码:
Data1$TICK <- ifelse(Data1$PRICE == Data1$PREVIOUS, yes = shift(Data1[ ,3]), no = ifelse(Data1$PRICE>Data1$PREVIOUS, yes= "Buy", no = "Sell"))
但是,当我尝试执行代码时收到警告:
Error in [.data.frame
(Data1, , 3)` : undefined columns selected
因此我有两个问题:
- 此代码是否能够提供我想要的结果?
- 错误消息指的是什么?
library(tidyverse)
dat%>%
mutate(m = sign(PRICE-PREVIOUS),
m=replace(m,m == 0,NA))%>%
fill(m)%>%
mutate(m = if_else(m==1,"Buy","Sale"))
PRICE PREVIOUS m
1 100 99 Buy
2 98 100 Sale
3 100 98 Buy
4 100 100 Buy
5 100 100 Buy
6 101 100 Buy
这里有一个简单的方法,只使用 base。
data1 <- data.frame(PRICE = c(100,98,100,100,100,101), PREVIOUS = c(99,100,98,100,100,100))
tk <- c("Sell", NA, "Buy")[sign(data1$PRICE-data1$PREVIOUS)+2]
for(i in 2:length(tk)) if (is.na(tk[i])) tk[i] <- tk[i-1]
data1$TICK <- tk
print(data1)
# PRICE PREVIOUS TICK
# 1 100 99 Buy
# 2 98 100 Sell
# 3 100 98 Buy
# 4 100 100 Buy
# 5 100 100 Buy
# 6 101 100 Buy
如果你觉得更直观,你可以:
tk <- c("Sell", "Prior", "Buy")[sign(data1$PRICE-data1$PREVIOUS)+2]
for(i in 2:length(tk)) if (tk[i] == "Prior") tk[i] <- tk[i-1]
正在写硕士论文,我下载了交易数据:
>head(Data1)
PRICE PREVIOUS
1 100 99
2 98 100
3 100 98
4 100 100
5 100 100
6 101 100
目标是添加一个列,指示交易是由买方 ("buy") 还是卖方 ("sell") 发起的。规则如下:
- 价格 < 上一个 => 卖出
- 价格 > 上一个 => 购买
- 价格 == 上一个 => 先前分类
它应该是这样的
>head(Data1)
PRICE PREVIOUS TICK
1 100 99 Buy
2 98 100 Sell
3 100 98 Buy
4 100 100 Buy
5 100 100 Buy
6 101 100 Buy
我写了下面的代码:
Data1$TICK <- ifelse(Data1$PRICE == Data1$PREVIOUS, yes = shift(Data1[ ,3]), no = ifelse(Data1$PRICE>Data1$PREVIOUS, yes= "Buy", no = "Sell"))
但是,当我尝试执行代码时收到警告:
Error in
[.data.frame
(Data1, , 3)` : undefined columns selected
因此我有两个问题:
- 此代码是否能够提供我想要的结果?
- 错误消息指的是什么?
library(tidyverse)
dat%>%
mutate(m = sign(PRICE-PREVIOUS),
m=replace(m,m == 0,NA))%>%
fill(m)%>%
mutate(m = if_else(m==1,"Buy","Sale"))
PRICE PREVIOUS m
1 100 99 Buy
2 98 100 Sale
3 100 98 Buy
4 100 100 Buy
5 100 100 Buy
6 101 100 Buy
这里有一个简单的方法,只使用 base。
data1 <- data.frame(PRICE = c(100,98,100,100,100,101), PREVIOUS = c(99,100,98,100,100,100))
tk <- c("Sell", NA, "Buy")[sign(data1$PRICE-data1$PREVIOUS)+2]
for(i in 2:length(tk)) if (is.na(tk[i])) tk[i] <- tk[i-1]
data1$TICK <- tk
print(data1)
# PRICE PREVIOUS TICK
# 1 100 99 Buy
# 2 98 100 Sell
# 3 100 98 Buy
# 4 100 100 Buy
# 5 100 100 Buy
# 6 101 100 Buy
如果你觉得更直观,你可以:
tk <- c("Sell", "Prior", "Buy")[sign(data1$PRICE-data1$PREVIOUS)+2]
for(i in 2:length(tk)) if (tk[i] == "Prior") tk[i] <- tk[i-1]