Chapter8.金融时间序列

本文主要探讨了金融时间序列的数据特性,包括经济数据的概括型统计量、一段时间内的变化趋势和重抽样处理。此外,还介绍了移动统计值在技术分析中的应用,如移动平均,并结合实例进行了详细阐述。
摘要由CSDN通过智能技术生成

Chapter8.金融时间序列

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
mpl.rcParams['font.sans-serif'] = ['KaiTi']
mpl.rcParams['font.serif'] = ['KaiTi']
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题,或者转换负号为字符串
sns.set_style("darkgrid",{"font.sans-serif":['KaiTi', 'Arial']})

一、文章结构

1)经济数据
2)移动统计量,如:移动平均
3)相关性分析
4)高频数据
ps:本章节使用pandas 可以阅读《python for analysis》进一步了解

二、经济数据

#使用pandas读取数据更为方便
data = pd.read_csv(r"C:\Users\Administrator\Desktop\source\tr_eikon_eod_data.csv",index_col=0,parse_dates=True)
data             #index_col 指定索引列为第几列           parse_dates 是否将类似时间的文本数据,解析为 date数据
AAPL.OMSFT.OINTC.OAMZN.OGS.NSPY.SPX.VIXEUR=XAU=GDXGLD
Date
2010-01-01NaNNaNNaNNaNNaNNaNNaNNaN1.43231096.35NaNNaN
2010-01-0430.57282730.95020.88133.90173.08113.331132.9920.041.44111120.0047.71109.80
2010-01-0530.62568430.96020.87134.69176.14113.631136.5219.351.43681118.6548.17109.70
2010-01-0630.13854130.77020.80132.25174.26113.711137.1419.161.44121138.5049.34111.51
2010-01-0730.08282730.45220.60130.00177.67114.191141.6919.061.43181131.9049.10110.82
.......................................
2018-06-25182.17000098.39050.711663.15221.54271.002717.0717.331.17021265.0022.01119.89
2018-06-26184.43000099.08049.671691.09221.58271.602723.0615.921.16451258.6421.95119.26
2018-06-27184.16000097.54048.761660.51220.18269.352699.6317.911.15521251.6221.81118.58
2018-06-28185.50000098.63049.251701.45223.42270.892716.3116.851.15671247.8821.93118.22
2018-06-29185.11000098.61049.711699.80220.57271.282718.3716.091.16831252.2522.31118.65

2216 rows × 12 columns

data.head()
AAPL.OMSFT.OINTC.OAMZN.OGS.NSPY.SPX.VIXEUR=XAU=GDXGLD
Date
2010-01-01NaNNaNNaNNaNNaNNaNNaNNaN1.43231096.35NaNNaN
2010-01-0430.57282730.95020.88133.90173.08113.331132.9920.041.44111120.0047.71109.80
2010-01-0530.62568430.96020.87134.69176.14113.631136.5219.351.43681118.6548.17109.70
2010-01-0630.13854130.77020.80132.25174.26113.711137.1419.161.44121138.5049.34111.51
2010-01-0730.08282730.45220.60130.00177.67114.191141.6919.061.43181131.9049.10110.82
data.plot(figsize=(10,12),subplots=True)        #横坐标自动按年划分,十分智能化
array([<matplotlib.axes._subplots.AxesSubplot object at 0x0F134390>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0F140690>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EF48AF0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EF65D90>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EEB2FF0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EECFCF0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EEDDF50>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EF071D0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EF07750>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EF78A70>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EFB7E70>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x0EFD5B30>],
      dtype=object)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tmrZRX3H-1581857844288)(output_9_1.png)]

instruments = ['Apple Stock', 'Microsoft Stock',
'Intel Stock', 'Amazon Stock', 'Goldman Sachs Stock',
'SPDR S&P 500 ETF Trust', 'S&P 500 Index',
'VIX Volatility Index', 'EUR/USD Exchange Rate',
'Gold Price', 'VanEck Vectors Gold Miners ETF',
 'SPDR Gold Trust']
#将列名与实际名字一一对应,使用zip函数
for ric,name in zip(data.columns,instruments):
    print("{:8s}|{}".format(ric,name))            #foramt的正则格式:  8个长度的space
AAPL.O  |Apple Stock
MSFT.O  |Microsoft Stock
INTC.O  |Intel Stock
AMZN.O  |Amazon Stock
GS.N    |Goldman Sachs Stock
SPY     |SPDR S&P 500 ETF Trust
.SPX    |S&P 500 Index
.VIX    |VIX Volatility Index
EUR=    |EUR/USD Exchange Rate
XAU=    |Gold Price
GDX     |VanEck Vectors Gold Miners ETF
GLD     |SPDR Gold Trust
概括型统计量
data.info()      #数据大概信息
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2216 entries, 2010-01-01 to 2018-06-29
Data columns (total 12 columns):
AAPL.O    2138 non-null float64
MSFT.O    2138 non-null float64
INTC.O    2138 non-null float64
AMZN.O    2138 non-null float64
GS.N      2138 non-null float64
SPY       2138 non-null float64
.SPX      2138 non-null float64
.VIX      2138 non-null float64
EUR=      2216 non-null float64
XAU=      2211 non-null float64
GDX       2138 non-null float64
GLD       2138 non-null float64
dtypes: float64(12)
memory usage: 225.1 KB
data.describe()     #数据的统计信息
AAPL.OMSFT.OINTC.OAMZN.OGS.NSPY.SPX.VIXEUR=XAU=GDXGLD
count2138.0000002138.0000002138.0000002138.0000002138.0000002138.0000002138.0000002138.0000002216.0000002211.0000002138.0000002138.00000
mean93.45597344.56111529.364192480.461251170.216221180.3230291802.71310617.0271331.2485871349.01413033.566525130.08659
std40.55155919.5277128.172160372.30781842.48393548.190071483.3371465.8834280.113711188.74585615.16956418.78359
min27.43568723.01000017.665000108.61000087.700000102.2000001022.5800009.1400001.0385001051.36000012.470000100.50000
25%60.29422528.56687522.510000213.595000146.607500133.9875001338.56750013.0725001.1315001221.52500022.142500117.40250
50%90.55062439.66000027.330000322.065000164.430000186.3200001863.08000015.5850001.2702501292.61000025.625000124.00500
75%117.23500054.37250034.710000698.850000192.132500210.9875002108.94250019.0675001.3454001428.24000048.342500139.00250
max193.980000102.49000057.0800001750.080000273.380000286.5800002872.87000048.0000001.4826001898.99000066.630000184.59000
#aggregate,可以缩写为agg 用处比较广泛,参数可以是自定义函数
data.agg([np.min,np.max,np.mean])     #内置的统计函数
AAPL.OMSFT.OINTC.OAMZN.OGS.NSPY.SPX.VIXEUR=XAU=GDXGLD
amin27.43568723.01000017.665000108.61000087.700000102.2000001022.5800009.1400001.0385001051.3600012.470000100.50000
amax193.980000102.49000057.0800001750.080000273.380000286.5800002872.87000048.0000001.4826001898.9900066.630000184.59000
mean93.45597344.56111529.364192480.461251170.216221180.3230291802.71310617.0271331.2485871349.0141333.566525130.08659
#比如:我想自定义一个统计量,如极差
def my_jicha(arr):
    return arr.max() - arr.min()
data.agg(my_jicha)
AAPL.O     166.544313
MSFT.O      79.480000
INTC.O      39.415000
AMZN.O    1641.470000
GS.N       185.680000
SPY        184.380000
.SPX      1850.290000
.VIX        38.860000
EUR=         0.444100
XAU=       847.630000
GDX         54.160000
GLD         84.090000
dtype: float64
一段时间内变化
data.diff().mean()           #n阶差分,默认值为1     
#这个的实际含义:一段时间内,数据与前一数据相比产生的变化,对这个变化求平均;
#狭义理解一下,取绝对值后,数据越大,波动越大;若以股票为例,+代表涨,-代表跌
AAPL.O    0.064737
MSFT.O    0.031246
INTC.O    0.013540
AMZN.O    0.706608
GS.N      0.028224
SPY       0.072103
.SPX      0.732659
.VIX     -0.019583
EUR=     -0.000119
XAU=      0.041887
GDX      -0.015071
GLD      -0.003455
dtype: float64
#数值大小往往不具参考意义,我们更喜欢比率的变化
#所以,引入了pct_change  来表示n期的变化比率
bar_data = data.pct_change().mean()
bar_data
AAPL.O    0.000936
MSFT.O    0.000621
INTC.O    0.000499
AMZN.O    0.001332
GS.N      0.000242
SPY       0.000436
.SPX      0.000438
.VIX      0.002888
EUR=     -0.000075
XAU=      0.000109
GDX      -0.000072
GLD       0.000085
dtype: float64
bar_data.plot(kind="bar")       #个人觉得:pd.plot更为方便
<matplotlib.axes._subplots.AxesSubplot at 0x11f83750>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UmZxnf23-1581857844293)(output_23_1.png)]

#进行取对差分
rets = np.log(data/data.shift(1))  #由log性质可知,这是将数据取对之后,再进行差分
rets.cumsum().apply(np.exp).plot(figsize=(12,10))       #Q:实际意义是什么?
<matplotlib.axes._subplots.AxesSubplot at 0x13337a30>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EnIhSL1o-1581857844294)(output_26_1.png)]

重抽样
#改变时间间隔,比如:原时间序列时间间隔为日,改变为周;原间隔为周,改变为年
data.head()
AAPL.OMSFT.OINTC.OAMZN.OGS.NSPY.SPX.VIXEUR=XAU=GDXGLD
Date
2010-01-01NaNNaNNaNNaNNaNNaNNaNNaN1.43231096.35NaNNaN
2010-01-0430.57282730.95020.88133.90173.08113.331132.9920.041.44111120.0047.71109.80
2010-01-0530.62568430.96020.87134.69176.14113.631136.5219.351.43681118.6548.17109.70
2010-01-0630.13854130.77020.80132.25174.26113.711137.1419.161.44121138.5049.34111.51
2010-01-0730.08282730.45220.60130.00177.67114.191141.6919.061.43181131.9049.10110.82
data.resample("3W",label="right").last()      #间隔为3周
AAPL.OMSFT.OINTC.OAMZN.OGS.NSPY.SPX.VIXEUR=XAU=GDXGLD
Date
2010-01-03NaNNaNNaNNaNNaNNaNNaNNaN1.43231096.35NaNNaN
2010-01-2428.24997228.960019.91121.43154.12109.2101091.7627.311.41371092.6043.790107.17
2010-02-1428.62568627.930020.43119.66153.93108.0401075.5122.731.36151092.4043.940107.04
2010-03-0731.27854028.587520.79128.91167.18114.2501138.7017.421.36211131.6546.430110.81
2010-03-2832.98568129.660022.24135.06172.87116.5821166.5917.771.34101105.6043.712108.59
.......................................
2018-04-15174.73000093.080051.861430.79255.92265.1502656.3017.411.23291345.0122.890127.45
2018-05-06183.83000095.160052.781580.95234.94266.0202663.4214.771.19581314.6522.650124.54
2018-05-27188.58000098.360055.441610.15235.01272.1502721.3313.221.16501301.1722.310123.21
2018-06-17188.840000100.130055.111715.97231.92277.1302779.6611.981.16071279.0022.230121.34
2018-07-08185.11000098.610049.711699.80220.57271.2802718.3716.091.16831252.2522.310118.65

149 rows × 12 columns

data.resample("1m",label="left",closed="left").last()  #间隔为1个月
AAPL.OMSFT.OINTC.OAMZN.OGS.NSPY.SPX.VIXEUR=XAU=GDXGLD
Date
2009-12-3127.43754428.18019.40125.410148.72107.39001073.8724.621.38621081.0540.72105.960
2010-01-3129.23139928.67020.53118.400156.35110.74001104.4919.501.36251116.1043.89109.430
2010-02-2833.69210929.77022.34136.579171.38117.40001173.2717.131.34111102.6043.86107.970
2010-03-3138.37710431.00323.49141.730160.24120.85751206.7818.441.32241166.1050.31114.280
2010-04-3036.69710625.80021.42125.460144.26109.36901089.4132.071.22671213.8149.86118.881
.......................................
2018-01-31178.39000094.20049.911511.980267.93274.43002744.2818.591.22311318.1421.49125.130
2018-02-28167.78000091.27052.081447.340251.86263.15002640.8719.971.23211324.0021.98125.790
2018-03-31162.32000095.82052.731572.620239.80266.56002669.9115.411.21281321.8922.73125.500
2018-04-30187.50000098.95055.681624.890229.16272.61002724.0114.941.16611301.0322.44123.370
2018-05-31185.11000098.61049.711699.800220.57271.28002718.3716.091.16831252.2522.31118.650

102 rows × 12 columns

rets.cumsum().apply(np.exp).resample("1m",label="right").last().plot()
<matplotlib.axes._subplots.AxesSubplot at 0x1141fb10>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XiWauNvR-1581857844296)(output_32_1.png)]

三、移动统计值

data = pd.DataFrame(data['AAPL.O']).dropna()
data.head()
AAPL.O
Date
2010-01-0430.572827
2010-01-0530.625684
2010-01-0630.138541
2010-01-0730.082827
2010-01-0830.282827
综述
window = 20   #20日的移动
data["min"] = data['AAPL.O'].rolling(window=window).min()
data["median"] = data['AAPL.O'].rolling(window=window).median()
data["max"] = data['AAPL.O'].rolling(window=window).max()
data["std"] = data['AAPL.O'].rolling(window=window).std()
data["ewma"] = data['AAPL.O'].ewm(halflife=0.5,min_periods=window).mean()  #加权指数平滑,里面的参数不明白!!!!
data
AAPL.Ominstdewmamedianmax
Date
2010-01-0430.572827NaNNaNNaNNaNNaN
2010-01-0530.625684NaNNaNNaNNaNNaN
2010-01-0630.138541NaNNaNNaNNaNNaN
2010-01-0730.082827NaNNaNNaNNaNNaN
2010-01-0830.282827NaNNaNNaNNaNNaN
.....................
2018-06-25182.170000182.173.262549182.907462189.54193.98
2018-06-26184.430000182.173.423931184.049366189.54193.98
2018-06-27184.160000182.173.580486184.132341189.54193.98
2018-06-28185.500000182.173.633386185.158085189.54193.98
2018-06-29185.110000182.173.706497185.122021188.79193.98

2138 rows × 6 columns

#选用数据进行作图可视化
%matplotlib notebook
fig1 = plt.figure()
<IPython.core.display.Javascript object>
data[["AAPL.O"]].plot()
<IPython.core.display.Javascript object>
<matplotlib.axes._subplots.AxesSubplot at 0x14e28e10>
data[["min","max","median"]].plot()
<IPython.core.display.Javascript object>
<matplotlib.axes._subplots.AxesSubplot at 0x14dd0e50>
一个技术分析的例子
#利用短期MA线 和 长期MA线 改进策略
#当短期MA 向上突破长期线 : 可考虑买入
#当短期MA 向下突破长期线: 可考虑卖出
data["sma1"] = data["AAPL.O"].rolling(42).mean()
data["sma2"] = data["AAPL.O"].rolling(252).mean()
data[["AAPL.O","sma1","sma2"]].plot(style=["b-","g--","r--"])
<IPython.core.display.Javascript object>

<img src="data:image/png;base64,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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值