- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试基于 S&P500 指数(月度数据)构建趋势跟踪动量投资组合策略
我使用考夫曼的分形效率比来滤除洗盘信号(http://etfhq.com/blog/2011/02/07/kaufmans-efficiency-ratio/)
我成功地编码了,但是非常笨拙,所以我需要更好的代码的建议。
策略
我很难平均 1 比 12 的效率比。我当然知道它可以简单地通过for循环实现,并且这是非常容易的任务,但我失败了。
我需要更简洁和精致的代码,有人可以帮助我吗?
a['meanfractal']
在下面的代码中困扰着我..
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import pandas_datareader.data as web
def price(stock, start):
price = web.DataReader(name=stock, data_source='yahoo', start=start)['Adj Close']
return price.div(price.iat[0]).resample('M').last().to_frame('price')
a = price('SPY','2000-01-01')
def fractal(a,p):
a['direction'] = np.where(a['price'].diff(p)>0,1,0)
a['abs'] = a['price'].diff(p).abs()
a['volatility'] = a.price.diff().abs().rolling(p).sum()
a['fractal'] = a['abs'].values/a['volatility'].values*a['direction'].values
return a['fractal']
def meanfractal(a):
a['meanfractal']= (fractal(a,1).values+fractal(a,2).values+fractal(a,3).values+fractal(a,4).values+fractal(a,5).values+fractal(a,6).values+fractal(a,7).values+fractal(a,8).values+fractal(a,9).values+fractal(a,10).values+fractal(a,11).values+fractal(a,12).values)/12
a['portfolio1'] = (a.price/a.price.shift(1).values*a.meanfractal.shift(1).values+(1-a.meanfractal.shift(1).values)*1.03**(1/12)).cumprod()
a['portfolio2'] = ((a.price/a.price.shift(1).values*a.meanfractal.shift(1).values+1.03**(1/12))/(1+a.meanfractal.shift(1))).cumprod()
a=a.dropna()
a=a.div(a.ix[0])
return a[['price','portfolio1','portfolio2']].plot()
print(a)
plt.show()
最佳答案
您可以通过将与 p
对应的值存储在 DF
中来进一步简化,而不是分别计算每个系列,如下所示:
def fractal(a, p):
df = pd.DataFrame()
for count in range(1,p+1):
a['direction'] = np.where(a['price'].diff(count)>0,1,0)
a['abs'] = a['price'].diff(count).abs()
a['volatility'] = a.price.diff().abs().rolling(count).sum()
a['fractal'] = a['abs']/a['volatility']*a['direction']
df = pd.concat([df, a['fractal']], axis=1)
return df
然后,您可以将重复操作分配给一个变量,从而减少重新计算时间。
def meanfractal(a, l=12):
a['meanfractal']= pd.DataFrame(fractal(a, l)).sum(1,skipna=False)/l
mean_shift = a['meanfractal'].shift(1)
price_shift = a['price'].shift(1)
factor = 1.03**(1/l)
a['portfolio1'] = (a['price']/price_shift*mean_shift+(1-mean_shift)*factor).cumprod()
a['portfolio2'] = ((a['price']/price_shift*mean_shift+factor)/(1+mean_shift)).cumprod()
a.dropna(inplace=True)
a = a.div(a.ix[0])
return a[['price','portfolio1','portfolio2']].plot()
获得的结果图:
meanfractal(a)
注意:如果速度不是主要考虑因素,您可以通过 pandas
中的内置方法执行操作,而不是将它们转换为相应的 numpy
数组值。
关于python - Pandas 上的动量投资组合(趋势跟踪)量化模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014258/
如何计算滚动事件的滚动动量? 我知道在结束滚动的开始处必须有两个时间戳。还必须有一个“轴变化”变量,它基本上是无惯性滚动的量。 这是我当前负责结束滚动的代码: if ((type == kMXTEnd
这个问题在这里已经有了答案: How do I give this spaceship acceleration? (3 个答案) 关闭 5 年前。 有一个非常小的类似小行星的游戏片段,我正在使用不
我目前正在试验 THREE.JS 项目,并使用鼠标滚轮滚动事件从 0 转到 1。 但是,我希望实现与您在此链接 playdoh by merci Michael 中看到的相同势头。 目前,这就是我迄今
我正在尝试实现列表对象的动态滚动,但我在根据速度确定要应用的摩擦量(持续时间)时遇到问题。 我的 applyFriction() 方法根据持续时间属性平均降低滚动对象的速度。然而,对每个 Action
几个月来,我一直在努力解决这个问题,并且用尽了我能想到的一切。 我想要实现的是:http://blue.bluestudios.kenzomedia.com/v0.7/ (部分逻辑借鉴了iScroll
我有一个标准的前馈反向传播神经网络,我想训练它来识别蓝色的球。我有 30 张图像,其中 20 张是球的,10 张是没有球的,我的第一个问题是这是否足够,我假设拥有更多比更少更好,但很高兴知道是否有最少
有没有办法在 Google map V3 上禁用拖动惯性?看起来它应该是一个 MapOption,但我找不到任何方法来做到这一点。 最佳答案 我今天遇到了同样的问题,一些自定义 Div 漂浮在 map
当您创建 RMSPRop 优化器时,它会要求提供动量值。这个势头是什么?是内斯特洛夫还是另一个?如何在 tf 中使用 Nesterov 动量和 RMSProp? 这里的文档字符串中有一个公式: htt
我有一个 SGD 求解器: base_lr: 1e-2 lr_policy: "step" gamma: 0.1 stepsize: 10000 max_iter: 300000
我是一名优秀的程序员,十分优秀!