前言

在交易的过程中,最重要的就是行情,所以今天我们就来讲讲和行情有关的函数。函数有点多,分为了很多个部分来讲解!

ptrade的开通渠道可以看文章末尾!

一、get_history —— 获取历史行情

get_history(count, frequency='1d', field='close', security_list=None, fq=None, include=False, fill='nan')

最常用的函数,获取最近N条历史行情k线数据,支持多股票、多行情字段获取!

注意事项:

1、该接口只能获取2005年后的数据。

2、针对停牌场景,我们没有跳过停牌的日期,无论对单只股票还是多只股票进行调用,时间轴均为二级市场交易日日历,停牌时使用停牌前的数据填充,成交量为0,日K线可使用成交量为0的逻辑进行停牌日过滤。

参数:

这里的参数就比较复杂了!

count: K线数量,大于0,返回指定数量的K线行情;必填参数;入参类型:int;

frequency:K线周期,现有支持1分钟线(1m)、5分钟线(5m)、15分钟线(15m)、30分钟线(30m)、60分钟线(60m)、120分钟线(120m)、日线(1d)、周线(1w/weekly)、月线(mo/monthly)、季度线(1q/quarter)和年线(1y/yearly)频率的数据;选填参数,默认为'1d';入参类型:str;

field:指明数据结果集中所支持输出的行情字段选填参数,默认为['open','high','low','close','volume','money','price'];入参类型:list[str,str]或str;输出字段包括:

1、open -- 开盘价  2、high -- 最高价  3、low --最低价   4、close -- 收盘价   5、volume -- 交易量6、money -- 交易金额   7、price -- 最新价   8、preclose -- 昨收盘价    9、high_limit -- 涨停价10、low_limit -- 跌停价   11、unlimited -- 判断查询日是否是无涨跌停限制(1:该日无涨跌停限制;0:该日不是无涨跌停限制)

security_list:要获取数据的股票列表;选填参数,None表示在上下文中的universe中选中的所有股票;入参类型:list[str,str]或str;

fq:数据复权选项,支持包括,pre-前复权,post-后复权,dypre-动态前复权,None-不复权;选填参数默认为None;入参类型:str;

include:是否包含当前周期,True –包含,False-不包含;选填参数,默认为False;入参类型:bool;

fill:行情获取不到某一时刻的分钟数据时,是否用上一分钟的数据进行填充该时刻数据,'pre'–用上一分钟数据填充,'nan'–NaN进行填充(仅交易有效);选填参数,默认为'nan';入参类型:str;

示例:

def initialize(context):
    g.security = ['600570.SS', '000001.SZ']
    set_universe(g.security)

def before_trading_start(context, data):
    # 获取农业版块过去10天的每日收盘价
    industry_info = get_history(10, frequency="1d", field="close", security_list="A01000.XBHS")
    log.info(industry_info)

def handle_data(context, data):
    # 股票池中全部股票过去5天的每日收盘价
    his = get_history(5, '1d', 'close', security_list=g.security)
    log.info('股票池中全部股票过去5天的每日收盘价')
    log.info(his)

    # 获取600570(恒生电子)过去5天的每天收盘价,
    # 一个pd.Series对象, index是datatime
    log.info('获取600570(恒生电子)过去5天的每天收盘价')
    log.info(his['600570.SS'])

    # 获取600570(恒生电子)昨天(数组最后一项)的收盘价
    log.info('获取600570(恒生电子)昨天的收盘价')
    log.info(his['600570.SS'][-1])

    # 获取股票池中全部股票昨天的收盘价
    log.info('获取股票池中全部股票昨天的收盘价')
    log.info(his.iloc[-1])

    # 获取600570(恒生电子)昨天(数组最后一项)的收盘价
    log.info('获取600570(恒生电子)昨天的收盘价')
    log.info(his.iloc[-1]['600570.SS'])

    # 取得每一列的平均值
    log.info('取得每一列的平均值')
    log.info(his.mean())

    # 获取股票池中全部股票的过去10分钟的成交量
    his1 = get_history(10, '1m', 'volume')
    log.info('获取股票池中全部股票的过去10分钟的成交量')
    log.info(his1)

    # 获取恒生电子的过去5天的每天的收盘价
    his2 = get_history(5, '1d', 'close', security_list='600570.SS')
    log.info('获取恒生电子的过去5天的每天的收盘价')
    log.info(his2)

    # 获取恒生电子的过去5天的每天的后复权收盘价
    his3 = get_history(5, '1d', 'close', security_list='600570.SS', fq='post')
    log.info('获取恒生电子的过去5天的每天的后复权收盘价')
    log.info(his3)

    # 获取恒生电子的过去5周的每周的收盘价
    his4 = get_history(5, '1w', 'close', security_list='600570.SS')
    log.info('获取恒生电子的过去5天的每天的收盘价')
    log.info(his4)

    # 获取多只股票的开盘价和收盘价数据
    panel_info = get_history(2, frequency='1d', field=['open','close'], security_list=g.security)
    open_df = panel_info['open']
    log.info('获所有股票的取开盘价数据')
    log.info(open_df)
    df = open_df['600570.SS']
    log.info('仅获取恒生电子的开盘价数据')
    log.info(df)
    
    # panel索引中的对象进行转换
    panel_info2 = panel_info.swapaxes("minor_axis", "items")
    df = panel_info2['600570.SS']
    log.info('仅获取恒生电子的开盘价和收盘价数据')
    log.info(df)
    open_df = df['open']
    log.info('获取恒生电子的开盘价数据')
    log.info(open_df)

二、get_price - 获取历史数据

get_price(security, start_date=None, end_date=None, frequency='1d', fields=None, fq=None, count=None)

用于获取指定日期的前N条的历史行情K线数据或者指定时间段内的历史行情K线数据。支持多股票、多行情字段获取。

注意事项:

1、start_date与count必须且只能选择输入一个,不能同时输入或者同时都不输入。

2、针对停牌场景,我们没有跳过停牌的日期,无论对单只股票还是多只股票进行调用,时间轴均为二级市场交易日日历,停牌时使用停牌前的数据填充,成交量为0,日K线可使用成交量为0的逻辑进行停牌日过滤。

3、数据返回内容不包括当天数据。

4、count只针对'daily', 'weekly', 'monthly', 'quarter', 'yearly', '1d', '1m', '5m', '15m', '30m', '60m', '120m', '1w', 'mo', '1q', '1y'频率有效,并且输入日期的类型需与频率对应。

5、'weekly', '1w', 'monthly', 'mo', 'quarter', '1q', 'yearly', '1y'频率不支持start_date和end_date组合的入参,只支持end_date和count组合的入参形式。

6、返回的周线数据是由日线数据进行合成。

7、该接口只能获取2005年后的数据。

参数

security:一支股票代码或者一个股票代码的list(list[str]/str)

start_date:开始时间,默认为空。传入格式仅支持:YYYYmmdd、YYYY-mm-dd、YYYY-mm-dd HH:MM、YYYYmmddHHMM,如'20150601'、'2015-06-01'、'2015-06-01 10:00'、'201506011000'(str);

end_date:结束时间,默认为空,传入格式仅支持:YYYYmmdd、YYYY-mm-dd、YYYY-mm-dd HH:MM、YYYYmmddHHMM,如'20150601'、'2015-06-01'、'2015-06-01 14:00'、'201506011400'(str);

frequency: 单位时间长度,现有支持1分钟线(1m)、5分钟线(5m)、15分钟线(15m)、30分钟线(30m)、60分钟线(60m)、120分钟线(120m)、日线(1d)、周线(1w/weekly)、月线(mo/monthly)、季度线(1q/quarter)和年线(1y/yearly)频率数据(str);

fields:指明数据结果集中所支持输出字段(list[str]/str),输出字段包括 :

1、open -- 开盘价(str:numpy.float64);

2、high -- 最高价(str:numpy.float64);

3、low --最低价(str:numpy.float64);

4、close -- 收盘价(str:numpy.float64);

5、volume -- 交易量(str:numpy.float64);

6、money -- 交易金额(str:numpy.float64);

7、price -- 最新价(str:numpy.float64);

8、preclose -- 昨收盘价(str:numpy.float64)(仅日线返回);

9、high_limit -- 涨停价(str:numpy.float64)(仅日线返回);

10、low_limit -- 跌停价(str:numpy.float64)(仅日线返回);

11、unlimited -- 判断查询日是否无涨跌停限制(1:该日无涨跌停限制;0:该日有涨跌停限制)(str:numpy.float64)(仅日线返回);

fq:数据复权选项,支持包括,pre-前复权,post-后复权,None-不复权(str);

count:大于0,不能与start_date同时输入,获取end_date前count根的数据,不支持除天('daily'/'1d')、分钟('1m')、5分钟线('5m')、15分钟线('15m')、30分钟线('30m')、60分钟线('60m')、120分钟线('120m')、周('weekly'/'1w')、('monthly'/'mo')、('quarter'/'1q')和('yearly'/'1y')以外的其它频率(int);

示例

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 获得600570.SS(恒生电子)的2015年01月的天数据,只获取open字段
    price_open = get_price('600570.SS', start_date='20150101', end_date='20150131', frequency='1d')['open']
    log.info(price_open)
    # 获取指定结束日期前count天到结束日期的所有开盘数据
    # price_open = get_price('600570.SS', end_date='20150131', frequency='daily', count=10)['open']
    # log.info(price_open)
    # 获取股票指定结束时间前count分钟到指定结束时间的所有数据
    # stock_info = get_price('600570.SS', end_date='2015-01-31 10:00', frequency='1m', count=10)
    # log.info(stock_info)
    # 获取指定结束日期前count周到结束日期所在周的所有开盘数据
    # week_open = get_price('600570.SS', end_date='20150131', frequency='1w', count=10)['open']
    # log.info(week_open)

    # 获取多只股票
    # 获取沪深300的2015年1月的天数据,返回一个[pandas.Panel]
    security_list = get_index_stocks('000300.XBHS', '20150101')
    price = get_price(security_list, start_date='20150101', end_date='20150131')
    log.info(price)
    # 获取某股票开盘价,行索引是[datetime.datetime]对象,列索引是行情字段
    price_open = price['open'][security_list[0]]
    log.info(price_open)

    # 获取农业版块指定结束日期前count天到结束日期的数据
    industry_info = get_price("A01000.XBHS", end_date="20210315", frequency="daily", count=10)
    log.info(industry_info)

结语

ptrade的渠道可以通过《ptrade开通详则》来获取,感谢看到这里,如果有更多疑问欢迎在评论区支出!

Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐