【Quant102】如何计算 N 日斜率

简介: 【Quant102】如何计算 N 日斜率

一元线性回归的斜率公式是:

image.png

由于斜率具有平移不变性,x通常取 0 到窗口大小减一。

def slope(df, close_col='close', slope_col='slope', window=5, inplace=True):
    if not inplace: df = df.copy()
    x = np.arange(window, dtype='f')
    x -= x.mean()
    x_sq_sum = (x ** 2).sum()
    df[slope_col] = df[close_col].rolling(window) \
        .apply(lambda y: ((y - y.mean()) * x).sum() / x_sq_sum)
    return df

向量化版本使用sliding_window_view代替rolling.apply

sliding_window_view创建给定数组的一个滑动窗口视图。其中每个元素被替换为该元素在给定轴上的给定大小的滑动窗口。如果原数组的形状为[d0, ..., d(n-1)],新数组的形状为[d0, ..., di - window + 1, ..., d(n-1), window],其中i为滑动窗口所在的轴,window为窗口大小。新数组的元素[idx0, ..., idx(i), ..., idx(n-1), j]映射到原数组的[idx0, ..., idx(i)+j, ..., idx(n-1)]

from numpy.lib.stride_tricks import sliding_window_view
def slope(df, close_col='close', slope_col='slope', window=5, inplace=True):
    if not inplace: df = df.copy()
    x = np.arange(window, dtype='f')
    x -= x.mean()
    x /= (x ** 2).sum()
    y = sliding_window_view(df[close_col], window, -1)
    slope = ((y - y.mean(-1, keepdims=True)) * x).sum(-1)
    df[slope_col] = np.concatenate([np.full(window - 1, np.nan), slope])
    return df

测试:

import pandas as pd
import numpy  as np
from matplotlib import pyplot as plt
df = pd.DataFrame({'close': np.random.randint(-1000, 1000, [100])})
slope(df)
df.slope = df.slope.shift(-2)
df.plot()
plt.show()

相关文章
|
24天前
计算标准偏差
【10月更文挑战第30天】计算标准偏差。
30 3
|
7月前
|
Serverless Python
导数计算和应用
导数计算和应用
|
7月前
油管公式(全)
油管公式(全)
3187 0
|
机器学习/深度学习 传感器 算法
基于matlab计算不等间距样本的一阶和二阶导数
基于matlab计算不等间距样本的一阶和二阶导数
|
数据格式
SPSS计算偏度、峰度、平均值、极值、中位数、标准差
本文介绍基于SPSS软件的经典统计学分析与偏度、峰度等常用统计学指标的计算方法~
4127 1
SPSS计算偏度、峰度、平均值、极值、中位数、标准差
|
传感器 监控
ABB PFEA111-65 线性传递函数斜率的误差
ABB PFEA111-65 线性传递函数斜率的误差
75 0
ABB PFEA111-65 线性传递函数斜率的误差
|
C++
【C/C++】用格雷戈里公式求π
输入精度e,使用格雷戈里公式(π/4​=1-1/3+1/5+...)求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数funpi(e)求π的近似值。
470 0
【C/C++】用格雷戈里公式求π
|
人工智能 BI
余弦距离和欧氏距离,知道原理和公式后真的很简单
余弦距离和欧氏距离,知道原理和公式后真的很简单
702 0
余弦距离和欧氏距离,知道原理和公式后真的很简单