【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()

相关文章
|
1月前
|
人工智能 供应链
医疗器械唯一标识(UDI)GS1-code128码
医疗器械唯一标识(UDI)采用GS1-Code 128条码,符合全球标准,实现高效追溯。该码基于GS1系统,通过FNC1识别与AI标识符结构化数据,支持GTIN、批号、序列号等信息编码,广泛应用于医疗、物流等领域,确保产品全生命周期可追踪,提升监管与管理效率。(238字)
385 3
|
编解码 Java 测试技术
『App自动化测试之Appium应用篇』| uiautomator + accessibility_id定位方法完全使用攻略
『App自动化测试之Appium应用篇』| uiautomator + accessibility_id定位方法完全使用攻略
742 0
|
3月前
|
机器学习/深度学习 数据挖掘 BI
Pandas GroupBy 的 10 个实用技巧
本文介绍Pandas中groupby的10个实用技巧,突破传统聚合认知。涵盖多函数聚合、结果命名、transform特征构造、组内累积计算、自定义逻辑、唯一值统计、分类分组、多级索引、扁平化输出及透视表结合应用,助你高效处理复杂数据场景,提升数据分析效率。(238字)
280 4
Pandas GroupBy 的 10 个实用技巧
|
3月前
|
存储 缓存 Java
重构一个类,JVM竟省下2.9G内存?
通过重构核心类,将 `HashMap<Long, HashSet<String>>` 优化为 `Long2ObjectOpenHashMap<int[]>`,结合数据分布特征与紧凑存储,JVM 堆内存从 3.13GB 降至 211MB,降幅达 94%,验证了高效数据结构在海量场景下的巨大价值。
417 24
重构一个类,JVM竟省下2.9G内存?
|
9月前
|
安全 数据安全/隐私保护 Windows
怡安(Aon)研究中描述SentinelOne的本地升级技术防护措施
怡安(斯特罗兹・弗里德伯格)研究团队发布了一项关于 SentinelOne Windows 代理潜在本地绕过技术的研究。研究人员于 2025 年 1 月通知 SentinelOne,公司随即发布更新并提供防护指南。该技术需攻击者具备本地管理员权限及访问 SentinelOne 签名安装程序的能力。SentinelOne 新增“本地升级授权”功能以阻止未授权升级,并默认为新客户启用。此外,还发布了检测规则和控制台更新,强化防护能力。此研究已共享给其他 EDR 厂商,共同提升安全性。SentinelOne 感谢斯特罗兹・弗里德伯格的合作,确保客户免受此类攻击影响。
265 6
|
机器学习/深度学习 人工智能 数据可视化
Anaconda简介
【8月更文挑战第7天】Anaconda简介。
864 3
|
存储 安全 搜索推荐
想要解析邮件?IMAP协议轻松助你,不再烦恼!
电子邮件仍是关键的通讯工具,利用编程语言自动化处理能显著提高效率。本文介绍使用Go语言从IMAP服务器读取、解析邮件及处理相关信息。首先概述POP3/IMAP/SMTP协议的作用,强调IMAP协议的优势及其在邮件客户端与服务器间双向同步的特点。接着,指导如何获取授权码以连接第三方服务。通过实战演示,展示使用`go-imap`库连接服务器、读取邮件详情(如主题、收件人等)、标记邮件为已读的过程。最后,对比`Store`与`UidStore`方法的区别,指出使用`UidStore`更安全可靠。本文提供了一段详细的Go语言示例代码,帮助读者快速上手。
475 4
|
存储 搜索推荐 定位技术
布谷直播系统源码开发搭建更新计划-山东布谷科技
山东布谷科技不断更新迭代布谷直播app,根据当前市场需求不断研究新功能更新迭代直播软件计划,以保证布谷直播app是当前直播运营市场的第一选择!
|
存储 监控 Ubuntu
在Linux中,如何进行用户行为监控?
在Linux中,如何进行用户行为监控?
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【6月更文挑战第30天】Spring Cloud是Java微服务治理明星框架,整合Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API网关)和Config Server(配置中心),提供完整服务治理解决方案。通过Eureka实现服务注册与发现,Ribbon进行负载均衡,Hystrix确保服务容错,Config Server集中管理配置,Zuul则作为API入口统一处理请求。理解和使用Spring Cloud是现代Java开发者的关键技能。
381 2

热门文章

最新文章