首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:用于回归股票分析的for循环(或其他方法,如apply()、滚动)

Python:用于回归股票分析的for循环(或其他方法,如apply()、滚动)
EN

Stack Overflow用户
提问于 2021-10-07 21:15:08
回答 1查看 55关注 0票数 0

我正在尝试获得一个基于指数回归的动量指标,并对其进行反向测试。但是使用这段代码,我只能得到pandas dataframe列中的最后一个值。你知道一种只计算DF中每一天的方法吗?

代码语言:javascript
复制
import pandas as pd
import numpy as np
from scipy.stats import linregress

df = yf.Ticker("AAPL").history(start="2019-09-1", interval="1d")

def MOMENTUM_Exponential_Regression(df):
    returns = np.log(df["Close"][-252:])
    x = np.arange(len(returns))
    slope, _, rvalue, _, _ = linregress(x, returns)
    df["MOMENTUMexpRegR2"] = ((1 + slope)**252) * (rvalue**2)
    return df

df = MOMENTUM_Exponential_Regression(df)

链接到数据帧输出: imghttps://i.imgur.com/DdMLi6U.png[/img]](https://i.imgur.com/DdMLi6U.png%5B/img%5D)

我尝试了一些for循环,但没有达到预期的结果。

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2021-10-08 20:19:42

当尝试用272个值填充数据帧中的531行列时,会引发错误(即返回变量必须包含与数据帧相同的行数)。与线性回归相同的值是因为它输出一个值;因此,我们需要一个for循环来遍历数据集并运行线性回归。我认为你可以从下面的代码开始:

代码语言:javascript
复制
df = yf.Ticker("AAPL").history(start="2019-09-1", interval="1d")
def MOMENTUM_Exponential_Regression(df, numberOfDataPointsInSlidingWindow = None, **kwargs):
    if numberOfDataPointsInSlidingWindow is None:
      numberOfDataPointsInSlidingWindow = 10
    returns = np.log(df["Close"])
    x = np.arange(len(returns))
    tempVarWillExplodeAfterTermination = []
    for indexingThroughReturns in range(numberOfDataPointsInSlidingWindow, len(returns), 1):
      slope, _, rvalue, _, _ = linregress(x[indexingThroughReturns - numberOfDataPointsInSlidingWindow:indexingThroughReturns + 1], returns[indexingThroughReturns - numberOfDataPointsInSlidingWindow:indexingThroughReturns + 1])
      if indexingThroughReturns == numberOfDataPointsInSlidingWindow:
        for indx in range(numberOfDataPointsInSlidingWindow):
          tempVarWillExplodeAfterTermination.append(((1 + slope)**252) * (rvalue**2))
      tempVarWillExplodeAfterTermination.append(((1 + slope)**252) * (rvalue**2))
    df["MOMENTUMexpRegR2"] = tempVarWillExplodeAfterTermination
    return df["MOMENTUMexpRegR2"]

df = MOMENTUM_Exponential_Regression(df)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69487949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档