小工具      在线工具  汉语词典  css  js  c++  java

量化交易 实战第二课 金融时间序列分析 Part 1

# 实战讲解,我要拿 Python 炒股票, 然后惊呆所有人! 额外说明

收录于:112天前

概述

时间序列分析 (time series analysis) 是量化投资中的一门基本技术. 时间序列是指在一定时间内按时间顺序测量的某个变量的取值序列. 时间序列分析就是使用统计的手段对这个序列的过去进行分析. 以此对该变量的变化特征性建模, 并对未来进行预测.
在这里插入图片描述

平台

我们将继续使用 RiceQuant 的投资研究平台进行分析.
网址:https://www.ricequant.com/quant/notebook

具体的平台介绍可以参考: https://iamarookie.blog.csdn.net/article/details/114958524

没有看过的同学可以自行翻一下专栏别的文章:
https://blog.csdn.net/weixin_46274168/category_10961128.html

获取股票数据

需求

  • 沪深300 (选10只)
  • 分析区间 2019-01-01 到 2021-01-01
  • 以时间为索引
  • 绘制各个指标的走势情况

函数

index_components - 获取指数成分股列表

获取每一指数的股票构成列表, 也支持指数的历史构成查询。

index_components(order_book_id, date=None, start_date, end_date, market='cn')

参数:

参数 类型 说明
order_book_id str 指数代码,传入 order_book_id,例如’000001.XSHG’。
date str, datetime.date, datetime.datetime, pandas Timestamp 查询日期,默认为最新记录日期
start_date str, datetime.date, datetime.datetime, pandas Timestamp 指定开始日期,不能和 date 同时指定
end_date str, datetime.date, datetime.datetime, pandas Timestamp 指定结束日期, 需和 start_date 同时指定并且应当不小于开始日期
market str 默认是中国市场(‘cn’),目前仅支持中国市场

返回:
构成该指数股票的 order_book_id list

get_price - 合约历史数据

获取指定合约或合约列表的历史行情(包含起止日期,日线或分钟线),不能在’handle_bar’函数中进行调用。

get_price(order_book_ids, start_date, end_date=None, frequency='1d', fields=None, adjust_type='pre', skip_suspended=False,expect_df=False)

参数:

参数 类型 说明
order_book_ids str OR str list 合约代码,合约代码,可传入 order_book_id, order_book_id list
start_date str, datetime.date, datetime.datetime, pandasTimestamp 开始日期,用户必须指定
end_date str, datetime.date, datetime.datetime, pandasTimestamp 结束日期,默认为策略当前日期前一天
frequency str 历史数据的频率。 现在支持日/分钟级别的历史数据,默认为’1d’。使用者可自由选取不同频率,例如’5m’代表 5 分钟线
fields str OR str list 返回字段名称
adjust_type str 权息修复方案。前复权 - pre,后复权 - post,不复权 - none。
skip_suspended bool 是否跳过停牌数据。默认为 False,不跳过,用停牌前数据进行补齐。True 则为跳过停牌期。注意,当设置为 True 时,函数 order_book_id 只支持单个合约传入
expect_df bool 默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe

代码

# 定义分析时间段
start_date = "2019-01-01"  # 开始日期
end_date = "2021-01-01" # 结束日期

# 获取沪深300股票
stock_list = index_components("000300.XSHG")  

# 取前10个
stock_list = stock_list[:10]  # 切片
print(stock_list)  # 调试输出

# 获取价格数据 (收盘价)
data = get_price(stock_list, start_date=start_date, end_date=end_date,fields="close")
print(data.head())  # 调试输出

# 绘制各个指标的走势情况
data.plot(figsize=(10, 12), subplots=True)  # 子图
data.plot(figsize=(16, 12))

输出结果:

data.plot(figsize=(16, 12))
['601390.XSHG', '002958.XSHE', '300142.XSHE', '601788.XSHG', '600999.XSHG', '002179.XSHE', '002508.XSHE', '600031.XSHG', '002032.XSHE', '002456.XSHE']
            002179.XSHE  601390.XSHG  002508.XSHE  601788.XSHG  600031.XSHG  \
date                                                                          
2019-01-02      25.9121       6.5340      19.0277       8.6610       7.7510   
2019-01-03      26.2175       6.5815      18.9417       8.8392       7.6355   
2019-01-04      26.3474       6.6671      19.4771       9.6410       7.7703   
2019-01-07      27.3860       6.6956      19.6684       9.5915       7.8377   
2019-01-08      27.4013       6.7052      19.7066       9.5816       7.7991   

            600999.XSHG  002958.XSHE  002032.XSHE  300142.XSHE  002456.XSHE  
date                                                                         
2019-01-02      10.7152          NaN      50.1480      18.4021       9.1656  
2019-01-03      10.8199          NaN      46.3313      17.8929       8.6963  
2019-01-04      11.5364          NaN      48.2589      18.0527       8.8960  
2019-01-07      11.3914          NaN      49.2035      18.6118       9.0158  
2019-01-08      11.2787          NaN      49.1553      18.5819       9.0857  

在这里插入图片描述
在这里插入图片描述

统计分析

需求

  1. 数据中各项指标统计结果 (保留两位小数)
  2. 使用 aggregate 方法将多种统计指标汇总

函数

aggregate:使用指定 axis 上的一个或多个操作聚合.

DataFrame.aggregate(func, axis=0, *args, **kwargs)

代码

print(data.info())
    
print(data.describe().round(2))

# 调试输出平均数
print(data.mean())

# 汇总
print(data.aggregate([min, max, np.mean, np.std, np.median]))

输出结果:

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 487 entries, 2019-01-02 to 2020-12-31
Data columns (total 10 columns):
002179.XSHE    487 non-null float64
601390.XSHG    487 non-null float64
002508.XSHE    487 non-null float64
601788.XSHG    487 non-null float64
600031.XSHG    487 non-null float64
600999.XSHG    487 non-null float64
002958.XSHE    433 non-null float64
002032.XSHE    487 non-null float64
300142.XSHE    487 non-null float64
002456.XSHE    487 non-null float64
dtypes: float64(10)
memory usage: 41.9 KB
None
       002179.XSHE  601390.XSHG  002508.XSHE  601788.XSHG  600031.XSHG  \
count       487.00       487.00       487.00       487.00       487.00   
mean         39.81         5.82        30.88        14.13        17.15   
std           9.31         0.56         5.64         4.64         6.00   
min          25.91         4.85        18.94         8.66         7.64   
25%          33.68         5.43        26.29        11.11        12.71   
50%          38.27         5.67        30.68        11.71        15.61   
75%          42.85         6.16        33.98        17.40        20.17   
max          78.29         7.27        43.99        29.99        34.98   

       600999.XSHG  002958.XSHE  002032.XSHE  300142.XSHE  002456.XSHE  
count       487.00       433.00       487.00       487.00       487.00  
mean         15.81         5.83        70.01        35.89        13.81  
std           3.56         1.15         7.57        14.24         3.54  
min          10.72         3.97        46.33        17.89         7.59  
25%          13.52         5.14        66.64        27.18        11.15  
50%          14.30         5.69        70.66        30.14        14.44  
75%          19.94         6.26        74.21        43.49        16.06  
max          24.42         9.91        85.70        91.76        23.32  
002179.XSHE    39.805091
601390.XSHG     5.823683
002508.XSHE    30.882818
601788.XSHG    14.125659
600031.XSHG    17.147733
600999.XSHG    15.812086
002958.XSHE     5.828605
002032.XSHE    70.010184
300142.XSHE    35.894527
002456.XSHE    13.811878
dtype: float64
        002179.XSHE  601390.XSHG  002508.XSHE  601788.XSHG  600031.XSHG  \
min       25.912100     4.852000    18.941700     8.661000     7.635500   
max       78.290000     7.266300    43.990000    29.987300    34.980000   
mean      39.805091     5.823683    30.882818    14.125659    17.147733   
std        9.306263     0.561201     5.644749     4.639231     6.002176   
median    38.274500     5.667200    30.682500    11.713300    15.610100   

        600999.XSHG  002958.XSHE  002032.XSHE  300142.XSHE  002456.XSHE  
min       10.715200     3.965400    46.331300    17.892900     7.588100  
max       24.422700     9.909100    85.700000    91.764200    23.318700  
mean      15.812086     5.828605    70.010184    35.894527    13.811878  
std        3.556864     1.147390     7.565533    14.236502     3.538181  
median    14.301800     5.690000    70.660000    30.138200    14.440000 

序列变化情况计算

需求

  1. 计算每一天各项指标的差异值(后一天减去前一天结果)
  2. 计算pct_change:增长率也就是 (后一个值-前一个值)/前一个值)
  3. 计算平均计算pct_change指标
  4. 绘图观察哪个指标平均增长率最高
  5. 计算连续时间的增长率(其中需要计算今天价格和昨天价格的差异)
  6. 看看各个指标最初的1块钱相当于现在的多少

函数

pd.pct_change()

表示当前元素与先前元素的相差百分比. 指定 periods=n, 表示当前元素与先前 n 个元素的相差百分比.

DataFrame.pct_change(periods=1, fill_method=‘pad’, limit=None, freq=None, **kwargs)

pd.shift()

pd.shift() : 列进行平移变换 (shift).

DataFrame.shift(periods=1, freq=None, axis=0)

代码

# 1. 计算每一天的差异值 (后一天减去前一天结果)
print(data.diff().head())

# 2. 计算增长率
pct_change = data.pct_change()
print(pct_change.head().round(2))

# 3. 计算平均增长率
pct_change_mean = data.diff().mean()
print(pct_change_mean)

# 4. 绘图观察哪个指标平均增长率最高
data.pct_change().mean().plot(kind='bar',figsize=(10,6))

# 往后挪一位
data.shift(1).head()

# 5. 计算连续时间增长率
rets = np.log(data/data.shift(1))
print(rets.head().round(2))

# 6. 看看各个指标最初的1块钱相当于现在的多少
rets.cumsum().apply(np.exp).plot(figsize = (16, 12))

输出结果:

            002179.XSHE  601390.XSHG  002508.XSHE  601788.XSHG  600031.XSHG  \
date                                                                          
2019-01-02          NaN          NaN          NaN          NaN          NaN   
2019-01-03       0.3054       0.0475      -0.0860       0.1782      -0.1155   
2019-01-04       0.1299       0.0856       0.5354       0.8018       0.1348   
2019-01-07       1.0386       0.0285       0.1913      -0.0495       0.0674   
2019-01-08       0.0153       0.0096       0.0382      -0.0099      -0.0386   

            600999.XSHG  002958.XSHE  002032.XSHE  300142.XSHE  002456.XSHE  
date                                                                         
2019-01-02          NaN          NaN          NaN          NaN          NaN  
2019-01-03       0.1047          NaN      -3.8167      -0.5092      -0.4693  
2019-01-04       0.7165          NaN       1.9276       0.1598       0.1997  
2019-01-07      -0.1450          NaN       0.9446       0.5591       0.1198  
2019-01-08      -0.1127          NaN      -0.0482      -0.0299       0.0699  
            002179.XSHE  601390.XSHG  002508.XSHE  601788.XSHG  600031.XSHG  \
date                                                                          
2019-01-02          NaN          NaN          NaN          NaN          NaN   
2019-01-03         0.01         0.01        -0.00         0.02        -0.01   
2019-01-04         0.00         0.01         0.03         0.09         0.02   
2019-01-07         0.04         0.00         0.01        -0.01         0.01   
2019-01-08         0.00         0.00         0.00        -0.00        -0.00   

            600999.XSHG  002958.XSHE  002032.XSHE  300142.XSHE  002456.XSHE  
date                                                                         
2019-01-02          NaN          NaN          NaN          NaN          NaN  
2019-01-03         0.01          NaN        -0.08        -0.03        -0.05  
2019-01-04         0.07          NaN         0.04         0.01         0.02  
2019-01-07        -0.01          NaN         0.02         0.03         0.01  
2019-01-08        -0.01          NaN        -0.00        -0.00         0.01  
002179.XSHE    0.107773
601390.XSHG   -0.002601
002508.XSHE    0.044758
601788.XSHG    0.020286
600031.XSHG    0.056027
600999.XSHG    0.025977
002958.XSHE   -0.000729
002032.XSHE    0.057288
300142.XSHE    0.041477
002456.XSHE    0.008260
dtype: float64
            002179.XSHE  601390.XSHG  002508.XSHE  601788.XSHG  600031.XSHG  \
date                                                                          
2019-01-02          NaN          NaN          NaN          NaN          NaN   
2019-01-03         0.01         0.01        -0.00         0.02        -0.02   
2019-01-04         0.00         0.01         0.03         0.09         0.02   
2019-01-07         0.04         0.00         0.01        -0.01         0.01   
2019-01-08         0.00         0.00         0.00        -0.00        -0.00   

            600999.XSHG  002958.XSHE  002032.XSHE  300142.XSHE  002456.XSHE  
date                                                                         
2019-01-02          NaN          NaN          NaN          NaN          NaN  
2019-01-03         0.01          NaN        -0.08        -0.03        -0.05  
2019-01-04         0.06          NaN         0.04         0.01         0.02  
2019-01-07        -0.01          NaN         0.02         0.03         0.01  
2019-01-08        -0.01          NaN        -0.00        -0.00         0.01  

在这里插入图片描述
在这里插入图片描述

. . .

相关推荐

额外说明

JVM - 对象内存分配、对象回收算法、引用类型和finalize()

文章目录 回顾 大体流程图 为什么会有栈中分配对象? 老年代空间分配担保机制 GC算法 引用计数法 可达性分析算法 JAVA常见引用 finalize() 如何判断方法区的类元信息是垃圾 回顾 在图文并茂讲述jvm内存原理和调优中说到了JVM各个内存空间

额外说明

组播数据发送和接收

添加链接描述 客户端源码: #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #inc

额外说明

攻防世界:view_source

根据题目提示,要查看页面源代码,右键单击没有用,上网查询查看源代码的快捷键,就是ctrl+u,然后flag就在这一页。  

额外说明

【javascript编程思维】深入了解JSON到底是什么?该如何去操作JSON字符串?

深⼊了解JSON到底是什么 JSON是JavaScript Object Notation的缩写,它是⼀种数据交换格式 JSON基于⽂本,优于轻量,⽤于交换数据 JSON主要⽤于前后端交互时数据的传输,JSON简单易⽤,是ECMA的⼀个标准,⼏乎所有的编

额外说明

Java后台——点餐小程序餐厅管理员的添加与修改

QQ 1274510382 Wechat JNZ_aming 商业互捧 QQ群538250800 技术搞事 QQ群599020441 技术合作 QQ群152889761 加入我们 QQ群649347320 纪年科技aming 网络安全 ,深度学习,嵌入式

额外说明

Java基础——Collection单列集合与Map双列集合总结

(1)集合类体系结构: Collection单列集合,每个元素(数据)只包含一个值。 Collection集合格式:[元素1,元素2,元素3...]。 Map双列集合,每个元素包含两个值(键值对)。 Map集合的完整格式:{key1=value1,key

额外说明

网易云音乐 真实地址

一个网易音乐外链地址长期有效,很简单的方法: 第一步打开网易云音乐,随便找到一首歌,播放,复制网址的ID, 例如:杨钰莹的心雨,网址是: http://music.163.com/#/song?id=317151 很明显,ID是317151 那么,这首歌

额外说明

Leetcode 705: 设计HashSet

想法:我们可以建立一个hash table,因为key的最大值为1000000,我们可以把hash table的大小定义为10000。接着定义hash function,透过计算hash value,找出这个key在hash table中的位置。 代码:

额外说明

SpringBoot之文件上传(单文件与多文件上传的使用)

文章目录 前言 文件上传 总结 前言 SpringBoot的单文件、多文件上传。 文件上传 页面代码/static/form/form_layouts.html <form role="form" th:action="@{/upload}" metho

额外说明

wordpress结构_如何在WordPress中创建公司组织结构图

WordPress 结构 您想在您的 WordPress 网站上显示漂亮的组织结构图吗?组织结构图有助于显示公司层次结构并将用户介绍给运营业务的团队。在本文中,我们将向您展示如何在 WordPress 中创建公司组织结构图。 您想在您的 WordPres

ads via 小工具