2016-10-12 60 views
2

我是蟒蛇和大熊猫的初学者。我在进行波动率调整的移动平均线时遇到困难,所以我需要你的帮助。关于熊猫移动平均线的问题

波动率调整后的移动平均线是一种移动平均线,其移动平均线不是静态的,而是根据波动率进行动态调整。

我想什么代码是,

  1. 获取来自雅虎财经(每月结算)
  2. 计算每月波动X股票数据某个常数 - 动态移动平均周期
  3. 的>使用变量
  4. 计算动态移动平均线

我试过这段代码,但只是失败。我不知道问题是什么。如果你知道这个问题,或者有更好的代码建议,请告诉我。

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'] 
    price = price/price[0] 
    a = price.resample('M').last().to_frame() 
    a.columns = ['price'] 
    return a 


a = price('SPY','2000-01-01') 
a['volperiod'] = round(a.rolling(12).std()*100)*2 
for i in range(len(a.index)): 
    k = a['price'].rolling(int(a['volperiod'][i])).mean() 
    a['ma'][i] = k[i] 

print(a) 

回答

1

首先:你需要在price计算pct_change计算returns

我的解决方案

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') 

v = a.pct_change().rolling(12).std().dropna().mul(200).astype(int) 

def dyna_mean(x): 
    end = a.index.get_loc(x.name) 
    start = end - x.price 
    return a.price.iloc[start:end].mean() 

pd.concat([a.price, v.price, v.apply(dyna_mean, axis=1)], 
      axis=1, keys=['price', 'vol', 'mean']) 
+1

@WookeunLee的volatility如果这回答了你的问题,可以考虑一下勾选表示这是所选的答案。 – piRSquared

+0

我刚查过。这是正确的吗?我是新来的stackoverflow –

+0

我认为“a.price.iloc [start:end] .mean()”--->应该是“return a.price.iloc [start + 1:end + 1] .mean() 'x.name'是什么意思?我找不到任何文档的解释。 –