QUANTAXIS 的核心数据结构以及方法

QUANTAXIS 的核心数据结构以及方法

学习 QuantAxis 框架的学习笔记,这篇文章介绍了 QA 的核心数据结构和方法。

启动 mongodb 数据库

Shell
1
sudo mongod

从数据库中取股票数据

Python
1
2
3
4
5
import QUANTAXIS as QA
# 取一只股票的数据
da1 = QA.QA_fetch_stock_day_adv('000001', '2018-01-01', '2018-09-10')
# 取多个股票的数据
da2 = QA.QA_fetch_stock_day_adv(['000001', '000002'], '2018-01-01', '2018-09-10')

上面的代码获取的是一种< QA_DataStruct_Stock_day with 1 securities >数据结构体。

显示结构体的数据——.data

这个可以返回一个 pandas 数据框:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
df1 = da1.data
df2 = da2.data

df1.head()
Out[13]:
open high low close volume amount
date code
2018-01-02 000001 13.35 13.93 13.32 13.70 2081592.0 2.856544e+09
2018-01-03 000001 13.73 13.86 13.20 13.33 2962498.0 4.006221e+09
2018-01-04 000001 13.32 13.37 13.13 13.25 1854509.0 2.454544e+09
2018-01-05 000001 13.21 13.35 13.15 13.30 1210312.0 1.603289e+09
2018-01-08 000001 13.25 13.29 12.86 12.96 2158620.0 2.806099e+09

df2.head()
Out[14]:
open high low close volume amount
date code
2018-01-02 000001 13.35 13.93 13.32 13.70 2081592.0 2.856544e+09
000002 31.45 32.99 31.45 32.56 683433.0 2.218503e+09
2018-01-03 000001 13.73 13.86 13.20 13.33 2962498.0 4.006221e+09
000002 32.50 33.78 32.23 32.33 646870.0 2.130250e+09
2018-01-04 000001 13.32 13.37 13.13 13.25 1854509.0 2.454544e+09

显示结构体的开/高/收/低——.open/.high/.close/.low

这个会返回一个 pandas 序列:

Python
1
2
3
4
open = da1.open
high = da1.high
close = da1.close
low = da1.low

结构体的拆分——splits()

当一个 DataStruct 里面存在多个证券的时候,可以通过拆分的方式将其分为多个结构体:

Python
1
2
3
4
5
6
7
da2.splits()
Out[22]:
[< QA_DataStruct_Stock_day with 1 securities >,
< QA_DataStruct_Stock_day with 1 securities >]

da3 = da2.splits()[0]
da4 = da2.splits()[1]

数据结构复权——to_qfq()/to_hfq()

返回的是一个 DataStruct,用.data 返回数据的结构,其中 DataStruct 的属性会变:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
da2.to_qfq().data
Out[28]:
open high low close volume \
date code
2018-01-02 000001 13.143212 13.714228 13.113677 13.487790 2.114343e+06
000002 30.266681 31.748737 30.266681 31.334916 7.101528e+05
... ... ... ... ...
2018-09-07 000001 10.040000 10.180000 9.930000 10.010000 8.090350e+05
000002 22.850000 23.650000 22.850000 23.210000 3.349430e+05
amount preclose adj
date code
2018-01-02 000001 2.856544e+09 NaN 0.984510
000002 2.218503e+09 NaN 0.962375
... ... ...
2018-09-07 000001 8.151517e+08 9.970000 1.000000
000002 7.806783e+08 22.810000 1.000000
[338 rows x 8 columns]

数据透视——.pivot()

Python
1
2
3
4
5
6
7
8
da2.pivot('open')
Out[30]:
code 000001 000002
date
2018-01-02 13.35 31.45
... ...
2018-09-07 10.04 22.85
[169 rows x 2 columns]

数据的自定义筛选——.selects(code, start, end)

Python
1
2
3
4
5
6
7
da2.selects('000002', '2018-08-01', '2018-09-10').data
Out[32]:
open high low close volume amount
date code
2018-08-01 000002 23.24 23.24 22.21 22.35 673866.0 1.523419e+09
······
2018-09-07 000002 22.85 23.65 22.85 23.21 334943.0 7.806783e+08

数据的时间筛选——.select_time(start, end)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
da2.select_time('2018-09-01', '2018-09-07').data
Out[34]:
open high low close volume amount
date code
2018-09-03 000001 10.09 10.30 10.09 10.19 711695.0 7.253033e+08
000002 23.85 24.57 23.38 23.55 497612.0 1.191131e+09
2018-09-04 000001 10.20 10.55 10.07 10.43 1296342.0 1.339757e+09
000002 23.66 24.44 23.41 24.43 437654.0 1.052057e+09
2018-09-05 000001 10.30 10.33 10.05 10.05 1179453.0 1.202346e+09
000002 24.11 24.20 23.41 23.41 546644.0 1.296346e+09
2018-09-06 000001 10.05 10.14 9.95 9.97 711777.0 7.139757e+08
000002 23.32 23.56 22.69 22.81 375368.0 8.649946e+08
2018-09-07 000001 10.04 10.18 9.93 10.01 809035.0 8.151517e+08
000002 22.85 23.65 22.85 23.21 334943.0 7.806783e+08

数据按时间往前/往后推——.select_time_with_gap(time, gap, methods)

  • time 是选择的时间;
  • gap 是长度(int);
  • methods 有’<=’/‘lte’/‘lt’/‘eq’/‘==’/‘>’/‘gt’/‘>=’/‘gte’。

往后推

Python
1
2
3
4
5
6
7
8
da2.select_time_with_gap('2018-09-01', 2, 'gt').data
Out[38]:
open high low close volume amount
date code
2018-09-04 000001 10.20 10.55 10.07 10.43 1296342.0 1.339757e+09
000002 23.66 24.44 23.41 24.43 437654.0 1.052057e+09
2018-09-05 000001 10.30 10.33 10.05 10.05 1179453.0 1.202346e+09
000002 24.11 24.20 23.41 23.41 546644.0 1.296346e+09

往前推

Python
1
2
3
4
5
6
7
8
da2.select_time_with_gap('2018-09-01', 2, 'lt').data
Out[40]:
open high low close volume amount
date code
2018-08-29 000001 10.25 10.33 10.15 10.27 901883.0 9.235816e+08
000002 23.74 24.40 23.72 23.91 291143.0 7.005964e+08
2018-08-30 000001 10.27 10.35 10.08 10.12 994917.0 1.013878e+09
000002 23.80 24.18 23.48 23.50 285923.0 6.816454e+08

选取某一个月份的数据——.select_month(month)

Python
1
2
3
4
5
6
7
8
9
da2.select_month('2018-08').data
Out[42]:
open high low close volume amount
date code
2018-08-01 000001 9.42 9.50 9.11 9.15 814081.0 7.592822e+08
000002 23.24 23.24 22.21 22.35 673866.0 1.523419e+09
······
2018-08-31 000001 10.13 10.32 10.10 10.13 1310865.0 1.337899e+09
000002 23.20 24.36 23.18 24.05 428145.0 1.024351e+09

选取结构组中的某一只股票——.select_code(code)

Python
1
da2.select_code('000001').data

取一只股票的某一个时间的交易数据——.get_bar(code, time, if_trade)

Python
1
da2.get_bar('000001', '2018-09-07')

统计学部分

平均价——.price

平均价 price = AVERAGE(open + high + low + close)
price 是一个 pd.Series

Python
1
da1.price

平均价的均值——.mean

Python
1
da2.mean

平均价的最大值和最小值——.max/.min

Python
1
2
da2.min
da2.max

平均价的方差/样本方差——.pvariance/.variance

Python
1
2
da2.pvariance
da2.variance

平均价的标准差/样本标准差——.pstdev/.stdev

Python
1
2
da2.pstdev
da2.stdev

平均价的调和平均数——.mean_harmonic

Python
1
da2.mean_harmonic

平均价的众数——.mode

  • price 序列很可能没有众数,会返回 None
    Python
    1
    da1.mode

平均价的振幅——.amplitude

Python
1
da2.amplitude

平均价的偏度——.skew

Python
1
da2.skew

平均价的峰度——.kurt

Python
1
da2.kurt

平均价的百分比变化——.pct_change

  • 会返回每天的百分比变化
    Python
    1
    da2.pct_change

平均价的平均绝对偏差——.mad

Python
1
da2.mad

平均价的价格差分——.price_diff

Python
1
da2.price_diff

绘图——.plot()

Python
1
da2.plot()

Python
1
da2.plot('000001')

# Python

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×