关于大Pandas移动平均数的问题

2024-09-30 14:27:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python和熊猫的初学者。我做波动调整移动平均线有困难,所以我需要你的帮助。在

波动率调整移动平均线是一种移动平均线,它的移动平均周期不是静态的,而是根据波动率动态调整的。在

我想编码的是

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

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

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)

Tags: 代码importwebpandasdataasstock静态
1条回答
网友
1楼 · 发布于 2024-09-30 14:27:20

首先:您需要计算pct_change上的price来计算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'])

相关问题 更多 >