我是一个初学者的蟒蛇和熊猫。我在制作波动率调整移动平均线方面有困难,所以我需要你的帮助。
波动率调整移动平均线是一种移动平均线,其周期不是静态的,而是根据波动率动态调整的。
我想写的是
- 从雅虎财经获取股票数据(月度收盘价)
- 计算月波动率X某些常数-->使用动态移动平均期变量
- 计算动态移动平均线
我试过这个代码,但是失败了。我不知道问题出在哪里。如果你知道这个问题,或者有任何更好的代码建议,请告诉我。
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)
首先,你需要计算price
上的pct_change
来计算returns
的volatility
我的解决方案
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'])