发现了一个提取时间序列技术指标的神器

news2024/11/17 23:50:47

互联网上有一个最简单而又强大的技术库,叫做pandas_ta。这个python库为你提供了一个简化的API,让你从时间序列中提取技术分析指标。今天我将和大家一起学习这个库。记得点赞、收藏~

虽然你可能会将这些函数应用于股票价格,但你可以对任何与股票价格配对的时间序列进行操作,例如,情绪甚至经济指标。

它利用具有 130 多个指标和实用程序函数以及 60 多个 TA Lib 烛台模式的 Pandas 包。包括许多常用的指标,例如:蜡烛图(cdl_pattern)、简单移动平均线(sma)、移动平均线收敛散度(macd)、赫尔指数移动平均线(hma)、布林带(bbands)、平衡交易量(obv )、aroonSqueeze等等。

文章目录

    • 技术交流
    • 为什么使用pandas_ta?
      • 使用方便
      • 与 pandas DataFrame兼容
    • 安装 pandas_ta
    • 股票价格数据
      • 生成股票数据
    • 创建备份
    • 应用pandas_ta strategy: SMA
    • 布林带
    • 写在最后

技术交流

技术要学会分享、交流,不建议闭门造车。 本文技术由粉丝群小伙伴推荐分享。源码、数据、技术交流提升,均可加交流群获取,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:dkl88191,备注:来自CSDN +技术交流
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

为什么使用pandas_ta?

使用方便

通常有几种方法可以从股票价格中提取技术分析指标,其中一种是手动编辑完整的处理过程。如果只需要使用像移动平均线这样的简单指标,这种方法实现起来比较轻松,但当我们需要使用更复杂的数学模型时,此时就会想到想是否有这样的python库来轻松实现,其实这就是API的作用,它们调解低级代码的复杂性,提供一个简化的高级接口。

与 pandas DataFrame兼容

在存储股票信息时,我能想到的第一个方法是通过使用Pandas DataFrame。这种方法在Python用户中非常普遍,其实,使用 pandas_ta 将会更简单,还有其他常见的存储股票价格等多维数据的方法,比如说使用JSON文件。

import pandas as pd  
import pandas_ta as ta  
df = pd.DataFrame() # 一个空的DataFrame  
            # 导入数据  
df = pd.read_csv("path/to/symbol.csv", sep=",")  
# 如果你安装了 yfinance  
df = df.ta.ticker("aapl")  
# VWAP要求DataFrame索引是一个DatetimeIndex。  
# 用DataFrame中合适的列替换datetime  
df.set_index(pd.DatetimeIndex(df["datetime"]),  
             inplace=True)  
# 计算结果返回并添加到DataFrame中去  
df.ta.log_return(cumulative=True,  
                 append=True)  
df.ta.percent_return(cumulative=True,  
                     append=True)  
# 查看下包含结果的列  
df.columns  
# 查看下具体数据  
df.tail()  
# 继续后期处理  

安装 pandas_ta

与其他许多安装起来有些困难的库相比,这个库既容易安装,又能作为 pandas 的一个扩展功能。

$ pip install pandas_ta  

具体使用方法,参见下文。

股票价格数据

股市数据获取,推荐你查看这篇文章。

请注意,pandas_ta 要求数据以特定的格式结构化。

  • 日期需要采用pandas.datetime格式。

  • 列必须是OCHL格式

OCHL指的是金融业中一些常用的指标,用于存储价格随时间的变化。开盘价、收盘价、最高价和最低价。不同的技术分析指标可能只需要其中的一列或多列,所以拥有全部四列将使我们能够模拟库中的大多数可用指标。

为了演示目的,使用如下程序将生成一个程序性的OCHL股票。

from scipy.stats import skewnorm  
import plotly.graph_objects as go  
import plotly.express as px  
import pandas_ta as ta  
import pandas as pd  
import numpy as np  
import random  
  
# 高低差的正态分布  
def create_pdf(sd, mean, alfa):  
    # 反转阿尔法的信号  
    x = skewnorm.rvs(alfa, size=1000000)   
    print(x)  
    def calc(k, sd, mean):  
        return (k*sd)+mean  
    x = calc(x, sd, mean) # 分布标准化  
    return x  
  
def graph_stock(df_original):  
  # Time_column是一个字符串  
  df = df_original.copy()  
  pd.options.plotting.backend = "plotly"  
  # 需要用索引创建一个列,否则plot就不会画出它  
  df['date'] = df.index  
  #fig = px.line(df, x='time', y=['price', 'price_2'])  
  fig = px.line(df, x='date', y=df.columns)  
  fig.show()  
  # 保存为png  
  #fig.write_image("csvfiles/btc.mark2mkt.png")  
  
def graph_OCHL(df_OCHL, title):  
    #fig_1 = px.line(df, x=df.index, y=df.columns, title=title)  
    fig_2 = go.Figure(data=go.Ohlc(x=df_OCHL.index,  
                        open=df_OCHL['open'],  
                        high=df_OCHL['high'],  
                        low=df_OCHL['low'],  
                        close=df_OCHL['close']))  
    fig_2.update(layout_xaxis_rangeslider_visible=False)  
    fig_2.show()  
  
def OCHL(group_values):  
    min_ = min(group_values)  
    max_ = max(group_values)  
    range = max_ - min_  
    open = min_+range*random.random()  
    close = min_+range*random.random()  
    return min_, max_, open, close  
  
def simulate_stock(initial_price, drift, volatility, trend, days):  
    days=days*24  
    def create_pdf(sd, mean, alfa):  
        # 反转阿尔法的信号  
        x = skewnorm.rvs(alfa, size=1000000)   
        def calc(k, sd, mean):  
            return (k*sd)+mean  
        x = calc(x, sd, mean) # 标准的分布  
        return x  
  
    def create_empty_df(days):  
        # 创建一个带有日期的空数据帧  
        empty = pd.DatetimeIndex(  
            pd.date_range("2020-01-01", periods=days, freq="D")  
        )  
        empty = pd.DataFrame(empty)  
        # 时间,分钟,秒都在减少  
        empty.index = [str(x)[0:empty.shape[0]] for x in list(empty.pop(0))]  
        # 最终数据集  
        stock = pd.DataFrame([x for x in range(0, empty.shape[0])])  
        stock.index = empty.index  
        return stock  
  
    #ran = create_pdf(0.1, 0.2, 0) #del?  
    #np.random.choice(ran) #del?  
    #skeleton  
    stock = create_empty_df(days)  
    #初识值  
    stock[0][0] = initial_price  
    # 创建整个股票数据框  
    x = create_pdf(volatility, drift, trend)  
    for _ in range(1, stock.shape[0]):  
        stock.iloc[_] = stock.iloc[_-1]*(1+np.random.choice(x))  
    stock.index = pd.DatetimeIndex(stock.index)  
    return stock  
  
def simulate_OCHL_stock(df, graph_timeseries=False, graph_OCHL=False):  
    df_ = list()  
    #df.groupby(np.arange(len(df))//24).apply(OCHL) non funziona  
    # 这是正确的方法,但需要从0开始创建一个新的df  
    for a, b in df.groupby(np.arange(len(df))//24):  
        group_values = np.array(b.values).flatten()  
        low, high, open, close = OCHL(group_values)  
        df_.append([low, high, open, close])  
  
    df_OCHL = pd.DataFrame(df_, index=pd.Series(pd.date_range("2020-01-01", periods=365, freq="D")), columns=['low', 'high', 'open', 'close'])  
  
    #graph  
  
    if graph_timeseries==True: graph_stock(df)  
    if graph_OCHL==True:  
        fig = go.Figure(  
            data=go.Ohlc(x=df_OCHL.index,  
            open=df_OCHL['open'],  
            high=df_OCHL['high'],  
            low=df_OCHL['low'],  
            close=df_OCHL['close'])  
        )  
        fig.update(layout_xaxis_rangeslider_visible=False)  
        fig.show()  
    return df_OCHL  

生成股票数据

df_OCHL = simulate_OCHL_stock(simulate_stock(1000, 0, 0.01, 0, 365),   
                              graph_timeseries=True,   
                              graph_OCHL=True)  

我们可以看到,每当我运行该算法时,就会产生一个新的时间序列,有4个维度,每个维度代表股票的一个OCHL数据。默认情况下,该股票只工作了365天(毕竟是出于测试目的)。让我们看一下生成的数据。

我们可以通过使用嵌入的布尔参数**graph_timeseriesgraph_OCHL**轻松地绘制数据。

收盘股价产生的数据

OCHL产生的数据

如果我们看一下DataFrame,生成的数据会是这样的。请注意,这种格式正是pandas_ta所要求的数据模式。

有开盘、收盘、最高、最低栏目的股票

创建备份

如果你不熟悉pandas的工作方式,我们不能简单地将一个DataFrame分配给第二个变量来复制它。我们需要使用copy函数来克隆原始DataFrame。

df_backup = df_OCHL.copy()  

我之所以要复制数据,是因为 pandas_ta 会直接编辑我们应用技术分析策略的数据集。它的工作方式不像普通函数那样,我们可以输入我们的DataFrame,然后收到一个副本作为输出。

如果我们对程序模式的外观感到满意,我们可能不想在每次运行该算法时都创建一个全新的股票价格。这样一来,我们就可以安全地开始实验备份副本了。

应用pandas_ta strategy: SMA

最流行的技术分析策略被称为简单移动平均线。该技术包括创建两条不同长度的移动平均线,并使用交叉点作为买入和卖出信号。

#导入备份  
df = df_backup.copy()MyStrategy = ta.Strategy(  
    name="DCSMA10",  
    ta=[  
        {"kind": "ohlc4"},  
        {"kind": "sma", "length": 10},  
        {"kind": "sma", "length": 20},  
    ]  
)  
# 运行策略  
df.ta.strategy(MyStrategy)  
df = df.drop(['low', 'high', 'open'], axis=1)  
graph_stock(df)  

应用该策略后,我们可以看到新的列是如何被添加到我们的原始数据集中的。

两个不同长度的简单移动平均线

布林带

当然,我们也可以采用更复杂的技术,如布林带:这种策略包括当价格达到下限带以下时买入股票,当价格达到上限带以上时卖出。

我们的假设是,当趋势的导数(也就是瞬时变化率)根据我们的参数达到最大容忍度时,是股票反转趋势的适当时机。

#导入备份  
df = df_backup.copy()MyStrategy = ta.Strategy(  
    name="strategy_3",  
    ta=[{  
        "close": 'close',   
        "kind": "bbands",   
        "length": 15,  
        "std": 2  
    }]  
)  
# 运行策略  
df.ta.strategy(MyStrategy)  
df = df.drop(['low', 'high', 'open'], axis=1)  
graph_stock(df)  

在这里插入图片描述

布林带的标准偏差为2

写在最后

Pandas_ta,特别是在设置之后,使用起来非常简单和直观,有80多个可用的指标,你可以简单地调用字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python开发环境搭建实践

这里写自定义目录标题前言搭建过程anaconda下载与安装下载安装配置环境变量pycharm下载和安装下载安装激活总结前言 新年新气象,我也把电脑进行了重装系统。所以现在需要重新搭建各种开发环境,也不能说是各种,因为我只会python和Java。 先搭…

全国产交换机基本介绍(分类、性能指标、硬件构成及工作方式)

关于全国产交换机基础知识,您了解多少呢?来和海翎光电的小编一起学习一下吧! 一、交换机的分类与性能指标 1.1 交换机的分类 按照网络构成方式来分的话,交换机分为三类:接入层交换机、汇聚层交换机和核心层交换机。按照…

93.transformer、多头注意力以及代码实现

1. Transformer架构 2. 多头注意力 3. 数学上来解释多头注意力 4. 有掩码的多头注意力 5. 基于位置的前馈网络 6. 层归一化 batch norm:比如说一行是一个样本,那么BN就是对一列进行归一化,就是对所有数据项的某一列特征进行归一化 layer nor…

【数据结构和算法】了解认识栈,并实现栈的相关函数

到现在我们了解并认识了线性表的概念,动态、静态顺序表的建立,以及两种链表的实现,接下来我们要认识一个新的内容,新的概念,栈,是基于顺序表或者链表的一种新型数据结构。 目录 一、栈是什么? …

RabbitMQ入门中篇

本篇博文目录一.Spring整合RabbitMQ1.导入依赖2.生产者3.消费者4.测试二.SpringBoot整合RabbitMQ1.导入依赖2.生产者3.消费者4.测试三.代码下载一.Spring整合RabbitMQ 在spring项目中使用RabbitMQ的Exchange模式的Topics,项目分为消费者spring项目和生产者spring项目…

Centos7安装kvm服务器

Centos7安装kvm服务器什么是kvm检查硬件是否支持kvm虚拟化启用嵌套虚拟化(可选)查看是否启用嵌套虚拟化嵌套虚拟化立即生效(临时)重新加载模块并验证虚拟机硬件直通虚拟机内查看嵌套虚拟化是否成功安装kvm服务器安装kvm的所有包(不推荐)启动libvirt服务查看是否正确设置了虚拟化…

Linux操作系统之线程安全

一、引入线程安全关于strtok函数不能在多线程中使用,为什么?运行结果原因如下:在strtok内部会有一个全局变量静态指针(static char* ptr),一开始指针指向主线程的a,等到后面子线程开始分割时&am…

18 Java反射reflect(类加载+获取类对象+通用操作+设计模式+枚举+注解)

Java反射18 反射reflect18.1 类的加载18.2 Class对象18.3 获取类对象的3种方法18.4 反射通用操作18.4.1 常见方法18.4.2 通用操作18.5 设计模式18.5.1 概念18.5.2 好处18.5.3 工厂设计模式18.5.4 单例模式18.6 枚举18.7 注解18.7.1 概念18.7.2 定义注解18.7.3 注解属性类型18.7…

知名休闲服饰品牌——慕尚集团借力泛微实现统一办公、业务协同

客户简介 宁波中哲慕尚控股有限公司(以下简称慕尚集团)是中国知名的由新零售模式驱动的休闲时尚服饰多品牌运营公司。 旗下品牌有GXG,gxgjeans,gxg.kids,MODE COMMUTER等,覆盖时尚男女装、童装市场和其他时尚领域。2019年5月慕尚集团正式登…

不要在线上滥用CopyOnWriteArrayList,姿势不对性能真的很拉胯

从JDK1.5版本,JAVA提供了线程安全的List增强版CopyOnWriteArrayList,其保持线程安全的方式是:每次修改数据时,不会直接修改数据,而是把数据复制出来一份,对复制出来的数组进行操作。 通过这样的机制&#…

【图像算法】马赛克识别

【目的】 校验视频中出现马赛克的频率,抽象成将视频切割成图片,对每张代测图片进行自动化验证。 【实现】 图像边缘检测算法识别 算法步骤: 使用高斯滤波器,以平滑图像,滤除噪声。计算图像中每个像素点的梯度强度和…

buuctf-web-[BJDCTF2020]Easy MD51

打开环境一个简单的页面查看源代码一个get传参,随便输入试试看输入1,1",1,均无反应,每次遇到这种有输入框的都以为是sql注入,但是题目为md5标头里面看到提示select * from admin where passwordmd5($pass,true)搜索相关漏洞,…

gost 常用tunnel配置示例(隧道模式)

gost是用golang语言实现的一个安全隧道。地址位于:https://github.com/ginuerzh/gost是一个不可多得的隧道工具。至于什么是隧道? 就是可以通过这个工具传输一些其他协议的数据。就像这个样子。隧道有什么用呢?可以起到一些加速的作用或者流量…

Array.prototype.from()

Array.from() 用于将类数组对象或可迭代对象转化为一个新的浅拷贝数组实例。 let arr Array.from({length:3},(_,i)>({id:item-${i1}}))console.log(arr)Array.from()转换数组 // Array.from 转换成数组let arr2 Array.from(chixinAwen)console.log(arr2) 示例&#xff1a…

如何免安装使用 Python?推荐 17 个在线的 Python 解释器

安装 Python 很容易,但或许你正在用智能手机/平板电脑,在用不允许安装软件的电脑,或者因为其它原因无法安装 Python。那么,如何通过免安装的方式使用 Python 呢? 本文将介绍 17 个免费的 Python 解释器和交互式 Shell…

百里挑一,4款免费又实用的软件,用一次就爱上

好看的皮囊千篇一律,实用的软件百里挑一,下面几款软件都是笔者收集多年所得,实用且免费。 1、坚果云 这是一款颠覆许多人认知的网盘工具,免费使用无广告,不限速的优点就比某度网盘强百倍,支持任何设备&…

AOP案例:测量业务层接口万次执行时间

测量业务层接口万次执行时间1. 准备1.1 service层:1.2 dao层:1.3 SpringConfig配置类:2. AOP2.1 通知类2.2 测试类:3. 问题及改进1. 准备 需求:任意业务层接口执行均可显示执行的时长; 切入点配置&#x…

(day9) 自学Java——常用API

AIP就是Java已经写好的各种功能的java类 目录 1.Math 2.System 3.Runtime 4.Object 5.对象工具类Objects 6.BIgInteger 7.BigDecima 8.正则表达式 (1)爬虫 (2)带条件爬取,贪婪爬取和识别正则的两个方法 (3)捕获分组和非捕获分组 9.JDK7以前时间相关类 …

一起自学SLAM算法:12.3 autoware导航系统

连载文章,长期更新,欢迎关注: 上面介绍的ros-navigation和riskrrt导航系统主要都是用于机器人的低速导航,并且大多基于2D地图。而autoware导航系统主要用于无人驾驶汽车的高速导航,并且基于3D地图。除了所导航速度高一…

软件工程(一)——软件开发模型和方法

目录 (一)软件开发方法 (二)瀑布模型 (三)原型模型 (四)螺旋模型与增量模型 (五)V模型、喷泉模型、RAD模型 (六) 统一过程(RUP) …