关闭

您正在使用的浏览器版本较低,无法支持聚宽的某些特性。

为了获得更好的体验,推荐使用: Google Chrome 或者 Mozilla Firefox 或者 IE9以上



金融期货数据

金融期货概况

包含金融期货的开始时间、结束时间、代码、名称等。平台支持的金融期货列表请通过金融期货页面查看。

更多API的可参考官方API文档

获取单支金融期货数据

获取单支金融期货的信息.

调用方法

get_security_info(code)

参数

  • code: 金融期货代码

返回值

  • 一个对象, 有如下属性:

    • display_name # 中文名称
    • name # 缩写简称
    • start_date # 开始日期, [datetime.date] 类型
    • end_date # 结束日期,[datetime.date] 类型
    • type # 类型,futures(金融期货)

示例

# 输出中证500股指期货信息
log.info(get_security_info('IC1505.CCFX'))

获取所有金融期货数据

获取平台支持的所有金融期货数据

调用方法

get_all_securities(types=['futures'])

这里请在使用时注意防止未来函数。

返回
- display_name # 中文名称
- name # 缩写简称
- start_date # 开始日期, [datetime.date] 类型
- end_date # 结束日期,[datetime.date] 类型
- type # 类型,futures(金融期货)

[pandas.DataFrame], 比如:get_all_securities(['futures'])[:2]返回:

display_name name start_date end_date type
IC1505.CCFX 中证500股指期货 IC1505 2015-04-16 2015-05-15 futures
IC1506.CCFX 中证500股指期货 IC1506 2015-04-16 2015-06-19 futures

示例

def initialize(context):
    #获得所有金融期货列表
    log.info(get_all_securities(['futures']))

期货结算价与持仓量

得到金融期货在一段时间的的如下的数据:

  • futures_sett_price: 期货结算价
  • futures_positions: 期货持仓量

调用方法

get_extras(info, security_list, start_date='2015-01-01', end_date='2015-12-31', df=True):

参数

  • info: [‘futures_sett_price’,‘futures_positions’] 中的一个
  • security_list: 标的列表
  • start_date/end_date: 开始结束日期, 同[get_price]
  • df: 返回[pandas.DataFrame]对象还是一个dict, 同[history]

返回值

  • df=True:
    [pandas.DataFrame]对象, 列索引是期货代号, 行索引是[datetime.datetime], 比如get_extras('futures_sett_price', ['IF1604.CCFX', 'IF1605.CCFX'], start_date='2016-04-06', end_date='2016-04-08',df=True)返回:
IF1604.CCFX IF1605.CCFX
2016-04-06 3235.4 3189.8
2016-04-07 3208.8 3163.8
2016-04-08 3164.0 3116.6
  • df=False
    一个dict, key是基金代号, value是[numpy.ndarray], 比如get_extras('futures_sett_price', ['IF1604.CCFX', 'IF1605.CCFX'], start_date='2016-04-06', end_date='2016-04-08',df=False) 返回:

    {
        u'IF1604.CCFX': array([ 3235.4,  3208.8,  3164. ]), 
        u'IF1605.CCFX': array([ 3189.8,  3163.8,  3116.6])
    }

行情数据

交易类数据提供金融期货的行情数据,通过API接口调用即可获取相应的数据。主要包括以下类别:

历史行情数据

获取金融期货历史交易数据,可以通过参数设置获取日k线、分钟k线数据。获取数据的基本属性如下:

  • open 时间段开始时价格
  • close 时间段结束时价格
  • low 最低价
  • high 最高价
  • volume 成交的金融期货数量
  • money 成交的金额

获取数据的方法有多种,类型如下:

获取多支金融期货的单一属性

查看多支金融期货的单个属性历史数据。

调用方法

history(count, unit, field, security_list=['futures_list'], df=False,skip_paused=False, fq='pre')

注:设定不同的unit参数,获取日K线或分钟k线,详情见参数。

关于停牌: 因为获取了多只股票的数据, 可能有的股票停牌有的没有, 为了保持时间轴的一致, 我们没有跳过停牌的日期, 停牌时使用停牌前的数据填充(请看[SecurityUnitData]的paused属性). 如想跳过, 请使用[attribute_history]
当取日K线数据时, 不包括当天的, 即使是在收盘后

参数
- count: 数量, 返回的结果集的行数
- unit: 单位时间长度, 几天或者几分钟, 现在支持’Xd’,’Xm’, X是一个正整数, 分别表示X天和X分钟(不论是按天还是按分钟回测都能拿到这两种单位的数据),如),如‘1d’,’2m’.
- field: 要获取的数据类型, 支持属性里面的所有基本属性.
- security_list: 要获取数据的金融期货列表
- df: 若是True, 返回[pandas.DataFrame], False返回一个dict, 具体请看下面的返回值介绍. 默认是True.(们之所以增加df参数, 是因为[pandas.DataFrame]创建和操作速度太慢, 很多情况并不需要使用它. 为了保持向上兼容, df默认是True, 但是如果你的回测速度很慢, 请考虑把df设成False.)
- skip_paused: 是否跳过停牌的时间, 如果不跳过, 停牌时会使用停牌前的数据填充(具体请看[SecurityUnitData]的paused属性), 但要注意:
- 默认为 False
- 如果跳过, 则行索引不再是日期, 因为不同股票的实际交易日期可能不一样
- fq: 复权选项:
- 'pre': 前复权(根据’use_real_price’选项不同含义会有所不同, 参见set_option), 默认是前复权
- None: 不复权, 返回实际价格
- 'post': 后复权

返回
- df=True:
[pandas.DataFrame]对象, 行索引是[datetime.datetime]对象, 列索引是金融期货代号. 比如: 如果当前时间是2015-01-07, universe是[‘IC1505.CCFX’, ‘IC1506.CCFX’], history(2, '1d', 'open', ['IC1505.CCFX', 'IC1506.CCFX'], df=True)将返回:

IC1505.CCFX IC1506.CCFX
2015-05-07 8020.0 7900.0
2015-05-08 7933.4 7894.8
关于numpy和pandas, 请看[第三方库介绍](https://www.joinquant.com/api#第三方库)
  • df=False:
    dict, key是金融期货代码, 值是一个numpy数组[numpy.ndarray], 对应上面的DataFrame的每一列, 例如history(2, '1d', 'open', ['IC1505.CCFX', 'IC1506.CCFX'], df=False)将返回:
    python
    {
    'IC1506.CCFX': array([ 7900. , 7894.8]),
    'IC1505.CCFX': array([ 8020. , 7933.4])
    }

示例

h = history(5, '1d', 'volume', ['IC1505.CCFX'], df=False) # 获取中证500股指期货的过去一天(不包含当天)的交易额
h = history(5, '1m', 'high', ['IC1505.CCFX'], df=False) # 获取中证500股指期货过去5分钟(不包含当前分钟)的每分钟的最高价
h.mean() # 取得每一列的平均值
获取单支金融期货的多个属性

查看某一支金融期货的历史数据, 可以选这只金融期货的多个属性.

调用方法

attribute_history(security, count, unit='1d',
            fields=('open', 'close', 'high', 'low', 'volume', 'money'),
            skip_paused=True, df=False, fq='pre')

注:设定不同的unit参数,获取日K线或分钟k线,详情见参数。

关于停牌: 默认跳过停牌日期

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

参数
- security: 金融期货代码
- count: 数量, 返回的结果集的行数
- unit: 单位时间长度, 几天或者几分钟, 现在支持’Xd’,’Xm’, X是一个正整数, 分别表示X天和X分钟(不论是按天还是按分钟回测都能拿到这两种单位的数据),如‘1d’,’2m’.
- fields: 金融期货属性的list, 支持属性里面的所有基本属性.
- skip_paused: 是否跳过停牌的时间, 如果不跳过, 停牌时会使用停牌前的数据填充(具体请看[SecurityUnitData]的paused属性), 默认是True
- df: 若是True, 返回[pandas.DataFrame], False返回一个dict, 具体请看下面的返回值介绍. 默认是True. (们之所以增加df参数, 是因为[pandas.DataFrame]创建和操作速度太慢, 很多情况并不需要使用它. 为了保持向上兼容, df默认是True, 但是如果你的回测速度很慢, 请考虑把df设成False.)
- fq: 复权选项:
- 'pre': 前复权(根据’use_real_price’选项不同含义会有所不同, 参见set_option), 默认是前复权
- None: 不复权, 返回实际价格
- 'post': 后复权

返回

  • df=True
    [pandas.DataFrame]对象, 行索引是[datetime.datetime]对象, 列索引是属性名字. 比如: 如果当前时间是2015-05-08, attribute_history('IC1505.CCFX', 2)将返回:
open close high low volume money
2015-05-06 8168 8040.8 8280.6 7970 111973 1.830955e+11
2015-05-07 8020 7911.4 8068.0 7901 109599 1.746042e+11

- df=False:
dict, key是金融期货代码, 值是一个numpy数组[numpy.ndarray], 对应上面的DataFrame的每一列, 例如attribute_history('IC1505.CCFX', 2, df=False)将返回:
python
{
'volume': array([ 111973., 109599.]),
'money': array([ 1.83095507e+11, 1.74604153e+11]),
'high': array([ 8280.6, 8068. ]),
'low': array([ 7970., 7901.]),
'close': array([ 8040.8, 7911.4]),
'open': array([ 8168., 8020.])
}

示例

futures = 'IC1505.CCFX'
h = attribute_history(futures, 5, '1d', ('open','close','volume')) # 取得IC1505过去5天的每天的开盘价, 收盘价, 交易量, 复权因子
# 不管df等于True还是False, 下列用法都是可以的
h['open'] #过去5天的每天的开盘价, 一个pd.Series对象, futures是datatime
h['close'][-1] #昨天的收盘价
h['open'].mean()

# 下面的pandas.DataFrame的特性, df=False时将不可用
# 行的索引可以是整数, 也可以是日期的各种形式:
h['open']['2015-01-05']
h['open'][datetime.date(2015, 1, 5)]
h['open'][datetime.datetime(2015, 1, 5)]

# 按行取数据
h.iloc[-1] #昨天的开盘价和收盘价, 一个pd.Series对象, futures是字符串:'open'/'close'
h.iloc[-1]['open'] #昨天的开盘价
h.loc['2015-01-05']['open']

# 高级运算
h = h[h['volume'] > 1000000] # 只保留交易量>1000000股的行
h['open'] = h['open']/h['factor'] #让open列都跟factor列相除, 把价格都转化成原始价格
h['close'] = h['close']/h['factor']
获取多支金融期货的多个属性

获取一支或者多只金融期货的多个属性的行情数据, 按天或者按分钟.

调用方法

get_price(security, start_date='2015-01-01', end_date='2015-12-31', frequency='daily', fields=None, skip_paused=False, fq='pre')

注:设定不同的unit参数,获取日K线或分钟k线,详情见参数。 这里请在使用时注意防止未来函数.

用户可以在 after_trading_end中调用get_price函数获取当日的开盘价、收盘价、成交额、成交量、最高价以及最低价等。

参数

  • security: 一支金融期货代码或者一个金融期货代码的list

  • start_date: 字符串或者[datetime.datetime]/[datetime.date]对象, 开始时间, 默认是’2015-01-01’. 注意:

    • 当取分钟数据时, 时间可以精确到分钟, 比如: 传入 datetime.datetime(2015, 1, 1, 10, 0, 0) 或者 '2015-01-01 10:00:00'.
    • 当取分钟数据时, 如果只传入日期, 则日内时间是当日的 00:00:00.
    • 当取天数据时, 传入的日内时间会被忽略
  • end_date: 格式同上, 结束时间, 默认是’2015-12-31’, 包含此日期. 注意: 当取分钟数据时, 如果 end_date 只有日期, 则日内时间等同于 00:00:00, 所以返回的数据是不包括 end_date 这一天的.

  • frequency: 单位时间长度, 几天或者几分钟, 现在支持’Xd’,’Xm’, ‘daily’(等同于’1d’), ‘minute’(等同于’1m’), X是一个正整数, 分别表示X天和X分钟(不论是按天还是按分钟回测都能拿到这两种单位的数据), 注意, 当X > 1时, field只支持[‘open’, ‘close’, ‘high’, ‘low’, ‘volume’, ‘money’]这几个标准字段. 默认值是daily

  • fields: 字符串list, 选择要获取的行情数据字段, 默认是None(表示[‘open’, ‘close’, ‘high’, ‘low’, ‘volume’, ‘money’]这几个标准字段), 支持属性里面的所有基本属性.

  • skip_paused: 是否跳过停牌的时间, 如果不跳过, 停牌时会使用停牌前的数据填充(具体请看[SecurityUnitData]的paused属性), 但要注意:
    • 默认为 False
    • 当 skip_paused 是 True 时, 只能取一只股票的信息
  • fq: 复权选项:
    • 'pre': 前复权(根据’use_real_price’选项不同含义会有所不同, 参见set_option), 默认是前复权
    • None: 不复权, 返回实际价格
    • 'post': 后复权

返回

  • 请注意, 为了方便比较一只金融期货的多个属性, 同时也满足对比多只金融期货的一个属性的需求, 我们在security参数是一只金融期货和多只金融期货时返回的结构完全不一样

  • 如果是一支金融期货, 则返回[pandas.DataFrame]对象, 行索引是[datetime.datetime]对象, 列索引是行情字段名字, 比如’open’/’close’. 比如: get_price('IC1505.CCFX', start_date='2015-05-06', end_date='2015-05-08')[:2] 返回:

open close high low volume money
2015-05-06 8168 8040.8 8280.6 7970 111973 1.830955e+11
2015-05-07 8020 7911.4 8068.0 7901 109599 1.746042e+11

- 如果是多支金融期货, 则返回[pandas.Panel]对象, 里面是很多[pandas.DataFrame]对象, 索引是行情字段(open/close/…), 每个[pandas.DataFrame]的行索引是[datetime.datetime]对象, 列索引是金融期货代号. 比如get_price(['IC1505.CCFX', 'IC1506.CCFX'], start_date='2015-05-06', end_date='2015-05-08')['open'][:2]返回:

IC1505.CCFX IC1506.CCFX
2015-05-06 8168 8118.2
2015-05-07 8020 7900.0

示例

# 获取一支金融期货
df = get_price(['IC1505.CCFX', 'IC1506.CCFX'], start_date='2015-05-06', end_date='2015-05-08') # 获取IC1506.CCFX的2015年的按天数据
df = get_price('IC1506.CCFX', start_date='2015-05-06', end_date='2015-05-08', frequency='minute', fields=['open', 'close']) # 获得IC1506.CCFX的分钟数据, 只获取open+close字段

# 获取多只金融期货
panel =  get_price(['IC1505.CCFX', 'IC1506.CCFX'], start_date='2015-05-06', end_date='2015-05-08') # 获取中IC1505和IC1506的天数据, 返回一个[pandas.Panel]
df_open = panel['open']  # 获取开盘价的[pandas.DataFrame],  行索引是[datetime.datetime]对象, 列索引是金融期货代号
df_volume = panel['volume']  # 获取交易量的[pandas.DataFrame]
df_open['IC1506.CCFX'] # 获取IC1506的开盘价数据

当前单位时间的行情数据

获取当前时刻金融期货的如下属性:
- high_limit # 涨停价
- low_limit # 跌停价
- day_open # 当天开盘价, 分钟回测时可用, 天回测时, 是NaN

调用方法

get_current_data(security_list=None)

回测时, 通过API获取的是一个单位时间(天/分钟)的数据, 而有些数据, 我们在这个单位时间是知道的, 比如涨跌停价,是否停牌,当天的开盘价(分钟回测时). 所以可以使用这个API用来获取这些数据.

参数
- security_list: 金融期货代码列表.

返回值
一个dict, key是金融期货代码, value是拥有如下属性的对象
- high_limit # 涨停价
- low_limit # 跌停价
- day_open # 当天开盘价, 分钟回测时可用, 天回测时, 是NaN

示例

def handle_data(context, data):
    current_data = get_current_data(['IC1506.CCFX'])
    print current_data
    print current_data['IC1506.CCFX'].day_open #查询金融期货当天的开盘价