R 在子集上查找 RSI
R Finding the RSI on a subset
我正在使用以下代码查找股票的 RSI(相对强弱指数)和 DEMA(双指数移动平均线)。
library(quantmod)
library(TTR)
getSymbols("AAPL")
chartSeries(AAPL, TA=NULL)
data=AAPL[,4]
AAPL$rsi = TTR::RSI(data)
AAPL$dema = TTR::DEMA(data)
# object B stores the copy of AAPL object and I save it in a CSV file
B = AAPL
每天,对象 AAPL
都会有一个新行来反映最后一天的数据。
每天 RSI
和 DEMA
在整个数据集上运行 运行。似乎在过去 12 年以上的数据中一次又一次地 CPU 运行 RSI
浪费了 CPU 的力量和时间,即使只有一个新行(对于最后一个交易日) ) 被添加到数据中。
有没有办法在 AAPL
对象中仅找到最后一天的 RSI
、DEMA
等...并将其添加到旧数据集 B
?
我想知道量化交易员在每秒获取报价数据时如何进行这种操作,并且他们需要找到 RSI 和一些关于新数据和所有过去数据的其他指标。即使使用最快的计算机,获取指标数据也需要几分钟时间,到那时市场就会发生变化。
谢谢!
假设您昨天下载了所有相关数据并计算了所有 RSI 和 DEMA 统计数据。以下是截至 2021 年 3 月 2 日的数据。
library(quantmod)
library(TTR)
getSymbols("AAPL")
chartSeries(AAPL, TA=NULL)
AAPL <- AAPL[, ]
data=AAPL[,4]
AAPL$rsi = TTR::RSI(data)
AAPL$dema = TTR::DEMA(data)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted rsi dema
# 2021-02-23 123.76 126.71 118.39 125.86 158273000 125.86 35.08898 127.7444
# 2021-02-24 124.94 125.56 122.23 125.35 111039900 125.35 34.28019 126.5275
# 2021-02-25 124.68 126.46 120.54 120.99 148199500 120.99 28.27909 124.2326
# 2021-02-26 122.59 124.85 121.20 121.26 164320000 121.26 29.10677 122.6783
# 2021-03-01 123.75 127.93 122.79 127.79 115998300 127.79 45.49055 123.7497
# 2021-03-02 128.41 128.72 125.01 125.12 102015300 125.12 41.28885 123.7178
然后,您将此结果保存为 CSV:
write_csv(as.data.frame(AAPL), "aapl.csv")
现在,今天您下载了数据,并获得了一个新的数据点。通过使用最近 200 天的数字,您可以为最近一天生成与使用整个数据集相同的值。这似乎也适用于其他符号,但您需要确保它具有普遍性。
getSymbols("AAPL")
data=AAPL[(nrow(AAPL)-200):nrow(AAPL),4]
AAPL$rsi = TTR::RSI(data)
AAPL$dema = TTR::DEMA(data)
tail(AAPL)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted rsi dema
# 2021-02-24 124.94 125.56 122.23 125.35 111039900 125.35 34.28019 126.5275
# 2021-02-25 124.68 126.46 120.54 120.99 148199500 120.99 28.27909 124.2326
# 2021-02-26 122.59 124.85 121.20 121.26 164320000 121.26 29.10677 122.6783
# 2021-03-01 123.75 127.93 122.79 127.79 115998300 127.79 45.49055 123.7497
# 2021-03-02 128.41 128.72 125.01 125.12 102015300 125.12 41.28885 123.7178
# 2021-03-03 124.81 125.71 121.84 122.06 112430400 122.06 37.06365 122.7313
然后您可以按照@phiver 的建议将最后一行附加到之前的 CSV 中:
write_csv(as.data.frame(AAPL)[nrow(AAPL), ], "aapl.csv", append=TRUE)
真正的问题是从这样的过程中可以获得什么?查看两个不同程序的基准,使用中值估计,对完整数据执行 RSI 操作的速度几乎慢了 40%,但如果您只进行几次调用,则不会注意到这一点。我没有在这里打印结果,但是 DEMA 例程在完整数据集上慢了大约 30%。如果你每天必须这样做数千次,这样做可能有意义,但如果你每天必须这样做 10 次,那可能就不值得了。
library(microbenchmark)
microbenchmark(TTR::RSI(AAPL[,4]), times=1000)
# Unit: microseconds
# expr min lq mean median uq max neval
# TTR::RSI(AAPL[, 4]) 797.03 823.431 1008.936 852.5145 924.193 18113.29 1000
microbenchmark(TTR::RSI(AAPL[(nrow(AAPL)-200):nrow(AAPL),4]), times=1000)
# Unit: microseconds
# expr min lq mean median uq max neval
# TTR::RSI(AAPL[(nrow(AAPL) - 200):nrow(AAPL), 4]) 634.306 652.424 710.9095 671.79 706.294 11743.02 1000
我正在使用以下代码查找股票的 RSI(相对强弱指数)和 DEMA(双指数移动平均线)。
library(quantmod)
library(TTR)
getSymbols("AAPL")
chartSeries(AAPL, TA=NULL)
data=AAPL[,4]
AAPL$rsi = TTR::RSI(data)
AAPL$dema = TTR::DEMA(data)
# object B stores the copy of AAPL object and I save it in a CSV file
B = AAPL
每天,对象 AAPL
都会有一个新行来反映最后一天的数据。
每天 RSI
和 DEMA
在整个数据集上运行 运行。似乎在过去 12 年以上的数据中一次又一次地 CPU 运行 RSI
浪费了 CPU 的力量和时间,即使只有一个新行(对于最后一个交易日) ) 被添加到数据中。
有没有办法在 AAPL
对象中仅找到最后一天的 RSI
、DEMA
等...并将其添加到旧数据集 B
?
我想知道量化交易员在每秒获取报价数据时如何进行这种操作,并且他们需要找到 RSI 和一些关于新数据和所有过去数据的其他指标。即使使用最快的计算机,获取指标数据也需要几分钟时间,到那时市场就会发生变化。
谢谢!
假设您昨天下载了所有相关数据并计算了所有 RSI 和 DEMA 统计数据。以下是截至 2021 年 3 月 2 日的数据。
library(quantmod)
library(TTR)
getSymbols("AAPL")
chartSeries(AAPL, TA=NULL)
AAPL <- AAPL[, ]
data=AAPL[,4]
AAPL$rsi = TTR::RSI(data)
AAPL$dema = TTR::DEMA(data)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted rsi dema
# 2021-02-23 123.76 126.71 118.39 125.86 158273000 125.86 35.08898 127.7444
# 2021-02-24 124.94 125.56 122.23 125.35 111039900 125.35 34.28019 126.5275
# 2021-02-25 124.68 126.46 120.54 120.99 148199500 120.99 28.27909 124.2326
# 2021-02-26 122.59 124.85 121.20 121.26 164320000 121.26 29.10677 122.6783
# 2021-03-01 123.75 127.93 122.79 127.79 115998300 127.79 45.49055 123.7497
# 2021-03-02 128.41 128.72 125.01 125.12 102015300 125.12 41.28885 123.7178
然后,您将此结果保存为 CSV:
write_csv(as.data.frame(AAPL), "aapl.csv")
现在,今天您下载了数据,并获得了一个新的数据点。通过使用最近 200 天的数字,您可以为最近一天生成与使用整个数据集相同的值。这似乎也适用于其他符号,但您需要确保它具有普遍性。
getSymbols("AAPL")
data=AAPL[(nrow(AAPL)-200):nrow(AAPL),4]
AAPL$rsi = TTR::RSI(data)
AAPL$dema = TTR::DEMA(data)
tail(AAPL)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted rsi dema
# 2021-02-24 124.94 125.56 122.23 125.35 111039900 125.35 34.28019 126.5275
# 2021-02-25 124.68 126.46 120.54 120.99 148199500 120.99 28.27909 124.2326
# 2021-02-26 122.59 124.85 121.20 121.26 164320000 121.26 29.10677 122.6783
# 2021-03-01 123.75 127.93 122.79 127.79 115998300 127.79 45.49055 123.7497
# 2021-03-02 128.41 128.72 125.01 125.12 102015300 125.12 41.28885 123.7178
# 2021-03-03 124.81 125.71 121.84 122.06 112430400 122.06 37.06365 122.7313
然后您可以按照@phiver 的建议将最后一行附加到之前的 CSV 中:
write_csv(as.data.frame(AAPL)[nrow(AAPL), ], "aapl.csv", append=TRUE)
真正的问题是从这样的过程中可以获得什么?查看两个不同程序的基准,使用中值估计,对完整数据执行 RSI 操作的速度几乎慢了 40%,但如果您只进行几次调用,则不会注意到这一点。我没有在这里打印结果,但是 DEMA 例程在完整数据集上慢了大约 30%。如果你每天必须这样做数千次,这样做可能有意义,但如果你每天必须这样做 10 次,那可能就不值得了。
library(microbenchmark)
microbenchmark(TTR::RSI(AAPL[,4]), times=1000)
# Unit: microseconds
# expr min lq mean median uq max neval
# TTR::RSI(AAPL[, 4]) 797.03 823.431 1008.936 852.5145 924.193 18113.29 1000
microbenchmark(TTR::RSI(AAPL[(nrow(AAPL)-200):nrow(AAPL),4]), times=1000)
# Unit: microseconds
# expr min lq mean median uq max neval
# TTR::RSI(AAPL[(nrow(AAPL) - 200):nrow(AAPL), 4]) 634.306 652.424 710.9095 671.79 706.294 11743.02 1000