我有一个价格时间序列,我正在尝试创建一个交易策略。我需要在达到 price_cap 后立即停止交易。我将数据存储在数据库中,我需要创建一个指示所有多头头寸的列表(名为 long 的列表)。我尝试了以下方法,但即使满足条件,列表也会继续存储值:
long = list()
for (i in 5:length(index)) {
long[i] = data$target_price[i]
if (data$target_price > price_cap){
break
}
print(long)
}
有什么想法吗?
非常感谢。
答案 0 :(得分:2)
if
不是矢量化函数。它需要一个长度为 1 的输入逻辑表达式。因此,在循环内部,我们需要 data$price[i]
而不是整列
for(i in seq_len(nrow(data))) {
long[[i]] <- data$target_price[i]
if(data$target_price[i] > price_cap) {
break
}
}
long
long <- list()
data <- data.frame(target_price = c(5, 10, 5, 20))
price_cap <- 6
答案 1 :(得分:2)
我认为 @akrun 已经指出了问题并给出了明确的解决方法。
下面是您的目标的另一种实现
long <- with(data, as.list(target_price[seq(min(which(target_price > price_cap)) + 1)]))
给出
> long
[[1]]
[1] 5
[[2]]
[1] 10