程序员

量化交易入门笔记-数据获取函数 一

2018-10-09  本文已影响6人  东南有大树

history()函数

history()获取历史数据,可查询多个标的单个数据字段,返回数据格式为 DataFrame 或 Dict(字典),其语法格式如下:

history(count, 
        unit='1d', 
        field='avg', 
        security_list=None, 
        df=True, 
        skip_paused=False, 
        fq='pre')

在获取天数据时,不包括当天的数据,即使是在收盘后

关于停牌:因为获取多只股票的原因,为了保持数据格式的一致,默认没有跳过停牌的日期,停牌的数据使用停牌前的数据填充

参数解析:

示例:

import pandas as pd

# 显示中国平安 000009 最后5个交易日每天的收盘价信息
df = history(5, 
             unit='1d', 
             field='close', 
             security_list='000009.XSHE', 
             df=True, 
             skip_paused=False, 
             fq='pre')
df
000009.XSHE
2018-09-25 4.77
2018-09-26 4.69
2018-09-27 4.59
2018-09-28 4.64
2018-10-08 4.50
import pandas as pd

# 同时显示多只股票的第天的收盘价信息
df = history(5, 
             unit='1d', 
             field='close', 
             security_list=['000001.XSHE',
                           '000002.XSHE',
                           '000009.XSHE'], 
             df=True, 
             skip_paused=False, 
             fq='pre')
df
000001.XSHE 000002.XSHE 000009.XSHE
2018-09-25 10.55 24.64 4.77
2018-09-26 10.71 24.67 4.69
2018-09-27 10.74 24.45 4.59
2018-09-28 11.05 24.30 4.64
2018-10-08 10.45 22.05 4.50
import pandas as pd

df = history(3,
            unit='1d',
            field='open',
            security_list=['000001.XSHE',
                          '000002.XSHE',
                          '000009.XSHE'],
            df=True,
            skip_paused=False,
            fq='pre')

print('显示平安银行过去3天的每天的开盘价')
print(df['000001.XSHE'])
print('显示昨天平安银行的开盘价')
print(df['000001.XSHE'][-1])
print('显示三只股票的昨日开盘价')
print(df.iloc[-1])
print('显示每只股票过去3天的平均价格')
print(df.mean())

显示平安银行过去3天的每天的开盘价
2018-09-27    10.65
2018-09-28    10.78
2018-10-08    10.70
Name: 000001.XSHE, dtype: float64
显示昨天平安银行的开盘价
10.7
显示三只股票的昨日开盘价
000001.XSHE    10.70
000002.XSHE    22.95
000009.XSHE     4.59
Name: 2018-10-08 00:00:00, dtype: float64
显示每只股票过去3天的平均价格
000001.XSHE    10.710000
000002.XSHE    24.026667
000009.XSHE     4.630000
dtype: float64

再看如果输出的是dict类型的数据的情况:

import pandas as pd

df = history(3,
            unit='1d',
            field='high',
            security_list=['000001.XSHE',
                          '000009.XSHE'],
            df=False,
            skip_paused=False,
            fq='pre')

print('两只股票近三日的最高价信息', df)
print('显示平安银行近三日的最高价信息', df['000001.XSHE'])
print('显示平安银行近三日的最高价的和', df['000001.XSHE'].sum())
print('显示平安银行近三日的最高价的平均值', df['000001.XSHE'].mean())

两只股票近三日的最高价信息 {'000009.XSHE': array([ 4.7 ,  4.65,  4.59]), '000001.XSHE': array([ 10.84,  11.27,  10.79])}
显示平安银行近三日的最高价信息 [ 10.84  11.27  10.79]
显示平安银行近三日的最高价的和 32.9
显示平安银行近三日的最高价的平均值 10.9666666667

attribute_history()函数

attribute_history()获取历史数据,可查询单个标的多个数据字段,返回数据格式为 DataFrame 或 Dict(字典)

语法如下:

attribute_history(
    security,
    count,
    unit='id',
    fields=['open', 'close', 'high', 'low', 'volume', 'money'],
    skip_paused=True,
    df=True,
    fq='pre'
)

在获取天数据时,不包括当天的数据,即使是在收盘后。默认跳过了停牌日期

示例:(这里采用显性的参数名赋值方法)

import pandas as pd

df = attribute_history(
    security='000009.XSHE',
    count=5,
    unit='1d',
    fields=['open', 'close', 'high', 'low', 'volume', 'money'],
    skip_paused=True,
    df=True,
    fq='pre')
df
open close high low volume money
2018-09-25 4.68 4.77 4.77 4.64 12286364 57765550.48
2018-09-26 4.71 4.69 4.75 4.63 15451984 72594583.00
2018-09-27 4.70 4.59 4.70 4.58 9656945 44753925.93
2018-09-28 4.60 4.64 4.65 4.59 7561961 34951199.58
2018-10-08 4.59 4.50 4.59 4.48 9551775 43298882.77

下面是返回数据的常用常法:

# 适用于DataFrame和dict
df['open']  # 过去5天的每天的开盘价
df['close'][-1]  # 昨天的收盘价
df['open'].mean()  # 过去5天的每天的开盘价的平均价

# 只适用于DataFrame
df['open']['2018-09-28']  # 行的索引可以是整数,也可以是日期形式
df['open'][datetime.date(2018, 9, 28)]
df['open'][datetime.datetime(2018, 9, 28)]
df.iloc[-1]  # 按行取数据,指昨天的数据
df.iloc[-1]['open']  # 昨天的开盘价
df.loc['2018-09-28']['open']
df = df[df['avg'] > 6]  # 显示均价大于6的数据
df['close'] = df['open']/df['factor']  # 开盘价/复权因子=原始开盘价
df['close'] = df['close']/df['facotr']  # 收盘价/复权因子=原始收盘价

get_current_data()函数

在回测时,有些数据在一个单位时间(天/分钟)是知道的,例如涨跌停价、是否停牌、当天的开盘价等,这些数据可以通过本函数获得

语法如下:

get_current_data(security_list=None)

**如果security_list 是 None,代表使用 universe 中的股票 **

该函数返回一个 dict 对象,key 是股票代码,value 数据具体如下:

**需要注意的是,为了回事,返回的 dict 里面的数据是按需获取的,dict 初始是空的。当使用 current_data[security]时,该 security 的数据才会被获取。另外,返回的结果只在当天有效,不能存起来到隔天使用

实例代码:

set_universe(['000001.XSHE'])

def handle_data(context, data):
    current_data = get_current_data()
    print(current_data)
    print(current_data['000001.XSHE'])
    print(current_data['000001.XSHE'].paused)  # 查询股票当天是否停牌
    print(current_data['000001.XSHE'].high_limit)  # 获取当天的涨停价

get_bars()函数

获取历史数据(包含快照数据),可查询单个标的多个数据字段,返回数据格式为 numpy.ndarray

即返回K(bar)线图的快照数据,语法如下:

get_bars(security, 
         count,
         unit='1d',     
         fields=['date', 'open','high','low','close'],  
         include_now=False, 
         end_dt=None, 
         fq_ref_date=None)

获取各种时间周期的 bar 数据, bar 的分割方式与主流股票软件相同, 而且支持返回当前时刻所在 bar 的数据

参数

返回

一个 numpy.ndarray 对象。可以通过 array['close'] 的方式直接访问列数据。

示例

array = get_bars('000001.XSHG', 5, unit='1d',fields=['open','close'],include_now=False)
array['close']

array([ 2724.8 ,  2724.42,  2723.26,  2722.92,  2724.05])

其实,其他数据获取函数也可以做这一点,即获得K线的快照数据

例如:

array = get_bars('000001.XSHG', 
                 5, unit='1m',
                 fields=['date', 'open', 'close', 'high', 'low', 'volume', 'money'],
                 include_now=False)

df = attribute_history(
    security='000001.XSHG',
    count=5,
    unit='1m',
    fields=['open', 'close', 'high', 'low', 'volume', 'money'],
    skip_paused=True,
    df=True,
    fq='pre')

print(array)
print(df)

[ (datetime.datetime(2018, 10, 9, 13, 22), 2725.47, 2724.8, 2725.72, 2724.05, 25296600.0, 257562398.9)
 (datetime.datetime(2018, 10, 9, 13, 23), 2724.63, 2724.42, 2724.98, 2724.31, 25518400.0, 241811255.9)
 (datetime.datetime(2018, 10, 9, 13, 24), 2724.15, 2723.26, 2724.39, 2722.94, 27154900.0, 256055358.1)
 (datetime.datetime(2018, 10, 9, 13, 25), 2722.95, 2722.92, 2723.45, 2722.73, 29886300.0, 261758003.0)
 (datetime.datetime(2018, 10, 9, 13, 26), 2722.7, 2724.05, 2724.29, 2722.15, 32145400.0, 331564478.1)]
                        open    close     high      low    volume        money
2018-10-09 13:22:00  2725.47  2724.80  2725.72  2724.05  25296600  257562398.9
2018-10-09 13:23:00  2724.63  2724.42  2724.98  2724.31  25518400  241811255.9
2018-10-09 13:24:00  2724.15  2723.26  2724.39  2722.94  27154900  256055358.1
2018-10-09 13:25:00  2722.95  2722.92  2723.45  2722.73  29886300  261758003.0
2018-10-09 13:26:00  2722.70  2724.05  2724.29  2722.15  32145400  331564478.1

都返回了前五分钟的K线快照数据,只是返回的数据类型不一样罢了,在使用中可以灵活调用

get_price()函数

该函数在章节《Pandas库》中已经有过讲解,这里不再作详述

现将这几个函数作一个对比

注:本文章为个人学习笔记,参考了一些书籍与官方教程,不作任何商业用途!

上一篇下一篇

猜你喜欢

热点阅读