直到昨天,以下网址(Google财经API)
https://www.google.com/finance/getprices?q=TSLA&x=NASDAQ&i=3600&p=5d&f=d,o,h,l,c,v
将导致一个漂亮的逗号分隔数据表与TSLA股票数据.从昨天起,同一个电话被重定向到TSLA https://www.google.com/search?q=TSLA&tbm=fin的标准谷歌财经网站.有人可能知道新的API地址或有关于Google财经API状态的任何信息吗?将URL更改为
https://finance.google.com/finance/getprices?q=TSLA&x=NASDAQ&i=3600&p=5d&f=d,o,h,l,c,v
没有帮助,因为它也重定向到正常的网站.
我有一个由-1s和1s组成的信号位置指示器矢量。另外,我还有一些要基于Signal值求和的体数据。基本数据表如下所示:
df <- cbind(Signal, Volume)
head(df, 20)
Signal Volume
2016-01-04 NA 37912403
2016-01-05 -1 23258238
2016-01-06 -1 25096183
2016-01-07 -1 45172906
2016-01-08 -1 35402298
2016-01-11 -1 29932385
2016-01-12 -1 28395390
2016-01-13 -1 33410553
2016-01-14 -1 48658623
2016-01-15 1 46132781
2016-01-19 1 30998256
2016-01-20 -1 59051429
2016-01-21 1 30518939
2016-01-22 1 30495387
2016-01-25 1 32482015
2016-01-26 -1 26877080
2016-01-27 -1 58699359
2016-01-28 1 107475327
2016-01-29 1 62739548
2016-02-01 1 46132726
Run Code Online (Sandbox Code Playgroud)
我想实现的是(不使用for循环)生成一个cum Volume的矢量,每次信号改变时都会重置。此外,音量值应乘以信号值,即,当信号为-1时,应将-Volume加到当前的cum Volume。基于类似的问题,我尝试了
ave(df$a, cumsum(c(F, diff(sign(diff(df$a))) != 0)*df$Volume), FUN=seq_along)
Run Code Online (Sandbox Code Playgroud)
会产生正确的信号分组,但由于某种原因未包括音量。没有重置,解决方案就相当简单(张贴在SO上)
require(data.table) …
Run Code Online (Sandbox Code Playgroud) 我想请你帮忙解决一个看起来很奇怪的问题.也就是说,我试图在金融时间序列中(以及它发生时)找到负回报的最长连续子序列,但我可以设法只编程具有相同符号的返回的最长连续子序列.我正在处理以下类型的财务数据:
LgReturn
1991-08-13 0.005180647
1991-08-14 0.008555806
1991-08-15 0.004878436
1991-08-16 -0.004723199
Run Code Online (Sandbox Code Playgroud)
我的方法如下:首先使用符号获得仅1s的序列(正返回和-1s(负返回)并使用rle获取所有长度的外观列表
z <- sign(NASDAQLgRetOpen[,1])
rle(z)
Run Code Online (Sandbox Code Playgroud)
命令rle(z)产生以下输出:
Run Length Encoding
lengths: int [1:2731] 3 3 2 1 4 6 1 1 2 3 ...
values : num [1:2731] 1 -1 1 -1 1 -1 1 -1 1 -
Run Code Online (Sandbox Code Playgroud)
然后我使用以下代码找到最长的子序列:
pad <- rev(sort(rle(z)$lengths[rle(z)$values[rle(z)$lengths]==-1]))
Run Code Online (Sandbox Code Playgroud)
和以下代码提取它在我的时间序列中出现的位置
vsota <- sum(rle(z)$lengths[1:(which(unlist(rle(z)$lengths)==pad[1]))])
Run Code Online (Sandbox Code Playgroud)
这给了我时间序列中的行,所以我使用了
serija <- NASDAQLgRetOpen[(vsota+1-pad[1]):vsota,1]
plot(cumprod(1+serija), type="l")
Run Code Online (Sandbox Code Playgroud)
问题是我得到了一个情节,清楚地显示了一个增加的序列,所以我找到了最长的正序子.真正奇怪的是,无论我在行中选择1还是-1,我都得到正的子序列
pad <- rev(sort(rle(z)$lengths[rle(z)$values[rle(z)$lengths]==-1]))
Run Code Online (Sandbox Code Playgroud)
我错过了什么?伙计们,帮助我,因为这真的令人困惑.提前感谢您的建议.
...找到一个简单的方法来解决这个问题:反转符号并应用log,使得负回报变为0并且pozitive返回变为NaN - 然后rle总是返回最长的负设置序列,因为Nan被解释为长度为1.以下代码作品; 假设您要分析的数据位于数据表的第i列:
fall <- function(data,i){
sg <- log(-sign(data[,i]))
zacetek <- sum(rle(sg)$lengths[1:(which(rle(sg)$lengths==max(rle(sg)$lengths))-1)[1]])
podatki …
Run Code Online (Sandbox Code Playgroud)