# 获取数据

# bar数据结构说明

  • bar 数据采用结构体+二维矩阵形式存储,通过策略的全局变量 Context.data 获取或调用历史行情接口 history 获取
  • 数据矩阵的行索引为 symbols 字段
  • 列索引 eob 字段 函数原型
% 数据滑窗获取bar行情的频率为60s的close字段
Context.data.frequency_60s.close

字段描述

字段名 类型 描述
symbols cell 标的代码
eob cell 字符格式的 bar 结束时间点
eobnum mat 数字格式的 bar 结束时间点
open mat 开盘价
high mat 最高价
low mat 最低价
close mat 收盘价
amount mat 成交额
volume mat 成交量
position mat 持仓量(仅期货)

示例

Context.data.frequency_60s =

     symbols: {'SZSE.000001'  'SHSE.600000'}
         eob: {1x5510 cell}
      eobnum: [1x5510 double]
        open: [2x5510 double]
        high: [2x5510 double]
         low: [2x5510 double]
       close: [2x5510 double]
      amount: [2x5510 double]
      volume: [2x5510 double]
    position: [2x5510 double]

# tick数据结构说明

  • tick 数据采用结构体+一维表结构格式存储,通过策略的全局变量 Context.data.tick 获取或调用历史行情接口 history 获取
  • 数据表的行索引为 symbols 字段
  • 列索引为二维的 eob+symbols 函数原型
% 获取tick行情的close字段
Context.data.frequency_60s.close

字段描述

字段名 类型 描述
symbols cell 标的代码
open cell 开盘价
high cell 最高价
low cell 最低价
close cell 收盘价
cumVolume cell 成交总量/最新成交量,累计值
cumAmount cell 成交总金额/最新成交额,累计值
tradeType cell 交易类型 1: ‘双开’, 2: ‘双平’, 3: ‘多开’, 4: ‘空开’, 5: ‘空平’, 6: ‘多平’, 7: ‘多换’, 8: ‘空换’
lastVolume cell 瞬时成交量
cumPosition cell 合约持仓量(期),累计值(股票此值为 0)
lastAmount cell 瞬时成交额
createdAt cell 创建时间
quotes struct 股票提供买卖 5 档数据, 包含买卖到五档行情

其中五档报价 quote 结构如下:

字段名 类型 描述
bidPrice cell 委买价五档
bidVolume cell 委买量五档
askPrice cell 委卖价五档
askVolume cell 委卖量五档

注意:

  • tick 数据各字段的为 cell 格式,获取数据时需要先用 symbols 索引找到对应行位置,用 created_at 找到数据的列位置
  • 可能会有买档或卖档报价缺失,比如跌停时无买档报价(没有 bid_p, bid_v),涨停时无卖档报价(没有 ask_p, ask_v)
  • 集合竞价时 tick 的买卖价均为 0

# 财务数据及其他业务数据结构

财务数据采用和 tick 数据相同的结构来存储,每个财务指标独立,以 symbols 列进行索引 业务数据采用 cell 表结构存储,首行为字段名,具体格式参照接口示例

# subscribe订阅方式获取决策数据

订阅获取决策数据由三部分组成

  • 发起订阅数据
  • 事件数据获取
  • 时序数据获取

订阅数据

参数说明
函数原型:

# 设置滑窗股票标的,订阅行情数据
set_symbols('SZSE.000001');
subscribe(symbols, frequency, count,wait_group,wait_group_timeout, unsubscribe_previous)

事件数据获取
行情事件分为 on_tick 和 on_bar 事件

if Event.Bar.flag == 1
    ……
end
if Event.Tick.flag == 1
    data_event = Event.on_tick.data
    ……
end

时序数据获取

if Event.on_bar.flag == 1
    # 数据存放在全局变量中
    data = Context.data.frequency_1d.close
    data_time = Context.data.frequency_1d..eob
    symbols = Context.data.frequency_1d.symbols
    ……
end

subscribe 订阅函数说明

参数名 类型 说明
symbols cell 证券代码,cell 格式,支持一个或多个,如{'SZSE.000001'}
frequency char 实时订阅数据的频率, 支持 ‘tick’, ‘1d’, ‘15s’, ‘30s’,回测历史数据支持任意频率
count mat 数据滑窗的长度,正整数
wait_group bool 是否到齐方式驱动,仅对 bar 数据驱动生效;1 表示到齐后驱动,0 表示单个 bar 到达时驱动
wait_group_timeout int 在到齐方式驱动式,最大等待时间
unsubscribe_previous bool 填入 true 表示取消前订阅,false 表示不取消,默认为取消前一次订阅

set_symbols 设定滑窗标的池函数 在订阅数据前需要设置标准滑窗的标的列表,用于确定策略需要接收的订阅数据

参数名 类型 说明
symbols cell 证券代码,cell 格式,支持一个或多个,如{'SZSE.000001'},

说明
标的声明用于标准化滑窗数据的 symbols 索引,即订阅的数据滑窗按照该排列顺序进行填充

注意: 策略在当次运行中,在回测模式时是不可以多次订阅数据的,过程中需要的标的和数据都需要预先订阅好;在实时状态时,每次重新订阅都需要 set_symbols 设置当前需要订阅的标的,否则策略不会接收新的标的(直接取数接口无此类限制) 示例:

function [Context] = main(Context,Event)

% 初始化操作
if Event.Init.flag==1
    set_symbols('SZSE.000001');
    subscribe({}, '900s',60,1,1,10, true);
    return
end
if  Event.frequency_1d.flag==1
    % 获取15分钟收盘价时间序列数据
    cp_15m = Context.data.frequency_900s.close;
    time_15m = Context.data.frequency_900s.eobnum;
end

unsubscribe 退订函数说明

参数名 类型 说明
symbols cell 证券代码,cell 格式,支持一个或多个,如{'SZSE.000001'}
frequency char 订阅数据的频率,频率, 支持 ‘tick’, ‘1d’, ‘15s’, ‘30s’

示例:

unsubscribe( 'SHSE.600000', '60s')

# current查询当前行情快照

查询当前行情快照,返回 tick 数据,回测时,返回回测时间点的 tick 数据

函数原型:

data = current(symbols,fields)
参数名 类型 说明
symbols cell 查询代码, 如{'symbol1', 'symbol2'}

示例

tick = current({'SZSE.000001'})

返回值:

tick =

        symbols: {'SZSE.000001'}
      createdAt: {{1x1 cell}}
          price: {[10.2000]}
           open: {[10.0300]}
           high: {[10.2700]}
            low: {[10.0300]}
      cumVolume: {[64832749]}
      cumAmount: {[6.5857e+08]}
    cumPosition: {[0]}
     lastAmount: {[118325]}
     lastVolume: {[11600]}
      tradeType: {[8]}
         quotes: [1x1 struct]

说明:

  1. 若输入包含无效标的代码,无效代码对应的数据为空
  2. 仅在策略实时运行模式下获取行情 tick 快照数据,其他情况下数据为 0
  3. fields 用于选择需要的字段,取较少的字段可以大幅提高取数效率

# history查询固定时间历史行情

按起始日期区间查询历史行情数据

函数原型:

[ data ] = history( symbols, frequency, start_time, end_time,adjust, adjust_end_time)

说明:

参数名 类型 说明
symbols cell 查询代码, 如{'symbol1', 'symbol2'}
frequency char 频率, 支持 ‘tick’, ‘1d’, ‘15s’, ‘30s’ 等, 默认 ‘1d’, 详情见股票行情数据和期货行情数据
start_time char 开始时间 (YY-MM-DD hh-mm-ss 格式),
end_time char 结束时间 (YY-MM-DD hh-mm-ss 格式)
adjust char ADJUST_NONE : 不复权, ADJUST_PREV : 前复权, ADJUST_POST : 后复权 默认不复权
adjust_end_time char 复权基点时间, 默认当前时间
skip_suspended bool 是否跳过停牌, 默认跳过(true 或者 false,暂不支持)

示例

[data] = history({'SZSE.000001','SHSE.600000'},'60s','2018-08-01','2018-09-01','ADJUST_NONE')

返回值:

data =

     symbols: {'SZSE.000001'  'SHSE.600000'}
         eob: {1x5510 cell}
      eobnum: [1x5510 double]
        open: [2x5510 double]
        high: [2x5510 double]
         low: [2x5510 double]
       close: [2x5510 double]
      amount: [2x5510 double]
      volume: [2x5510 double]
    position: [2x5510 double]

说明: 1.若输入包含无效标的代码,无效代码对应的数据为空

# history_n查询固定长度历史行情

函数原型:

[ data ] = history_n( symbols, frequency, count, end_time, adjust, adjust_end_time, skip_suspended, fields)

说明:

参数名 类型 说明
symbols cell 查询代码, 如{'symbol1', 'symbol2'}
frequency char 频率, 支持 ‘tick’, ‘1d’, ‘15s’, ‘30s’ 等, 默认 ‘1d’, 详情见股票行情数据和期货行情数据
count double 获取数据的长度
end_time char 结束时间 (YY-MM-DD hh-mm-ss 格式)
adjust char ADJUST_NONE : 不复权, ADJUST_PREV : 前复权, ADJUST_POST : 后复权 默认不复权
adjust_end_time char 复权基点时间, 默认当前时间
skip_suspended bool 是否跳过停牌, 默认跳过(true 或者 false)

示例

[data] = history_n({'SZSE.000001','SHSE.600000'},'60s',1000,'2018-09-01','ADJUST_NONE')

返回值:

data =

     symbols: {'SZSE.000001'  'SHSE.600000'}
         eob: {1x1000 cell}
      eobnum: [1x1000 double]
        open: [2x1000 double]
        high: [2x1000 double]
         low: [2x1000 double]
       close: [2x1000 double]
      amount: [2x1000 double]
      volume: [2x1000 double]
    position: [2x1000 double]

# get_fundamentals查询固定时间基本面数据

函数原型:

[ data ] = get_fundamentals( table, symbols, start_date, end_date, fields )

说明:

示例

[data] = get_fundamentals('trading_derivative_indicator',{ 'SHSE.600000','SZSE.000001'}, '2018-04-01', '2018-08-01',  {'TCLOSE','NEGOTIABLEMV','TOTMKTCAP','TURNRATE'})

返回值:

data =

         symbols: {2x1 cell}
        pub_adte: {2x1 cell}
         EndDate: {2x1 cell}
          TCLOSE: {2x1 cell}
    NEGOTIABLEMV: {2x1 cell}
       TOTMKTCAP: {2x1 cell}
        TURNRATE: {2x1 cell}

说明:
如果查询基本面数据接口的查询字段出错,则直接返回错误(1017 错误)

# get_fundamentals_n查询固定长度基本面数据

函数原型:

[data] = get_fundamentals_n( table, symbols, count, end_date, fields )

说明:

参数名 类型 说明
table char 表名,只支持单表查询. 具体表名及 fields 字段参考 财务数据文档
symbols cell 标的代码, 多个代码可用 ,(英文逗号)分割, 也支持 ['symbol1', 'symbol2'] 这种列表格式
count char 每个股票数据的数量
end_date char 结束时间, (YY-MM-DD 格式)
fields str 查询字段 (必填)

示例

data = get_fundamentals_n('trading_derivative_indicator',{ 'SHSE.600000','SZSE.000001'}, '2017-04-01', 3,  {'TCLOSE','NEGOTIABLEMV','TOTMKTCAP','TURNRATE'})

返回值:

data =

         symbols: {2x1 cell}
        pub_adte: {2x1 cell}
         EndDate: {2x1 cell}
          TCLOSE: {2x1 cell}
    NEGOTIABLEMV: {2x1 cell}
       TOTMKTCAP: {2x1 cell}
        TURNRATE: {2x1 cell}

说明:

# get_instruments查询最新交易标的最新基本信息

查询最新交易标的信息,有基本数据及最新日频数据

函数原型:

[ data] = get_instruments( symbols ,exchanges, sec_types, fields)

说明:

参数名 类型 说明
symbols cell 标的代码, 多个代码可用 ,(英文逗号)分割, 也支持 ['symbol1', 'symbol2'] 这种列表格式
exchanges char 交易所代码, 多个交易所代码可用 ,(英文逗号)分割, NULL 表示所有
secTypes mat 标的类型, 1: 股票, 2: 基金, 3: 指数, 4: 期货, 5: 期权, 8:可转债, 10: 期货连续合约,只能输入单个品种
fields int 查询字段,默认表示所有

示例

data = get_instruments({'SZSE.000001'},'SZSE',1)

返回值:

data =

  Columns 1 through 8

    'symbol'         'sec_level'    'is_suspended'    'multiplier'    'margin_ratio'    'settle_price'    'position'    'pre_close'
    'SZSE.000001'    [        1]    [           0]    [         1]    [           1]    [           0]    [       0]    [   9.9600]

  Columns 9 through 13

    'pre_settle'    'upper_limit'    'lower_limit'    'adj_factor'    'created_at'
    [         0]    [    10.9600]    [     8.9600]    [  117.1530]    '2018-09-13'

# get_history_instruments查询交易标的历史基本信息

返回指定 symbols 的标的日频历史数据

函数原型:

[ data ] = get_history_instruments( symbols, start_date,end_date, fields )

说明:

参数名 类型 说明
symbols string 标的代码, 多个代码可用 ,(英文逗号)分割,也支持 ['symbol1', 'symbol2'] 这种列表格式, 是必填参数
startDate char 开始时间 (YY-MM-DD 格式)
endDate char 结束时间 (YY-MM-DD 格式)
fields cell 查询字段,默认表示所有

示例

[ data ] = get_history_instruments({'SZSE.000001','SZSE.000002'}, '2018-04-19', '2018-06-19')

返回值:


data =

         symbols: {2x1 cell}
      created_at: [1x41 double]
       sec_level: [2x41 double]
    is_suspended: [2x41 double]
      multiplier: [2x41 double]
    margin_ratio: [2x41 double]
    settle_price: [2x41 double]
        position: [2x41 double]
       pre_close: [2x41 double]
      pre_settle: [2x41 double]
     upper_limit: [2x41 double]
     lower_limit: [2x41 double]
      adj_factor: [2x41 double]

# get_instrumentinfos查询交易标的基本信息

获取到交易标的基本信息

函数原型:

[ data]  = get_instrumentinfos ( symbols, exchanges, sec_types, names, fields )

说明:

参数名 类型 说明
symbols cell 标的代码, 多个代码可用 ,(英文逗号)分割, 也支持 ['symbol1', 'symbol2'] 这种列表格式
exchanges char 交易所代码, 多个交易所代码可用 ,(英文逗号)分割, NULL 表示所有
secTypes mat 标的类型, 1: 股票, 2: 基金, 3: 指数, 4: 期货, 5: 期权, 8: 可转债, 10: 期货连续合约,只能输入单个品种
names char 查询名称,默认所有名称字符
fields int 查询字段,默认表示所有

示例

[ data ] = get_instrumentinfos ({'SZSE.000001'},'SZSE')

返回值:

data =

    'symbol'         'sec_type'    'exchange'    'sec_id'    'sec_name'    'price_tick'    'listed_date'    'delisted_date'
    'SZSE.000001'    [       1]    'SZSE'        '000001'    '平安银行'    [    0.0100]    '1991-04-02'     '2037-12-31'

# get_constituents查询指数成份股信息

函数原型:

instruments = get_constituents(index, trade_date)

参数:

参数名 类型 说明
index char 指数代码
trade_date char 结束时间 (YY-MM-DD 格式)

示例:

instruments1 = get_constituents('SHSE.000300', '2020-10-29');

返回值:

instruments1 =

  301×3 cell 数组

    {'created_at'}    {'symbol'     }    {'weight'}
    {'2020-09-30'}    {'SHSE.600999'}    {[0.4900]}
    {'2020-09-30'}    {'SHSE.601238'}    {[0.0500]}
    {'2020-09-30'}    {'SZSE.002241'}    {[0.5600]}
    {'2020-09-30'}    {'SZSE.002032'}    {[0.0800]}
    {'2020-09-30'}    {'SHSE.600362'}    {[0.0900]}
    {'2020-09-30'}    {'SHSE.600703'}    {[0.3300]}
    {'2020-09-30'}    {'SHSE.600585'}    {[0.8100]}
    {'2020-09-30'}    {'SHSE.601138'}    {[0.1700]}
    {'2020-09-30'}    {'SHSE.600221'}    {[0.1200]}
    {'2020-09-30'}    {'SHSE.600061'}    {[0.1600]}
    {'2020-09-30'}    {'SZSE.000977'}    {[0.1900]}
    {'2020-09-30'}    {'SZSE.002673'}    {[0.1000]}
    {'2020-09-30'}    {'SZSE.000876'}    {[0.3600]}
    {'2020-09-30'}    {'SHSE.600115'}    {[0.1400]}
    {'2020-09-30'}    {'SHSE.600741'}    {[0.2400]}
    {'2020-09-30'}    {'SHSE.601398'}    {[1.0600]}
    {'2020-09-30'}    {'SHSE.601186'}    {[0.2300]}
    {'2020-09-30'}    {'SHSE.600928'}    {[0.0400]}
    {'2020-09-30'}    {'SHSE.601888'}    {[1.3300]}
    {'2020-09-30'}    {'SZSE.002410'}    {[0.4000]}
	......

# get_industry查询行业板块成分股

函数原型:

[ data] = get_industry( code )

说明

参数名 类型 说明
code char 行业代码 不区分大小写(仅支持输入单一代码)

示例:

[ data] = get_industry( 'j6')

返回值

data =

    'SHSE.600000'
    'SHSE.600016'
    'SHSE.600030'
    'SHSE.600036'
    'SHSE.600053'
    'SHSE.600061'
    'SHSE.600109'
    'SHSE.600155'
    'SHSE.600291'
    'SHSE.600318'
    ……

# get_trading_dates查询交易日历表

函数原型:

[ data ] = get_trading_dates( exchange, start_date, end_date )

说明

参数名 类型 说明
exchange char 见交易市场代码
start_date char 开始时间 (YY-MM-DD 格式)
end_date char 结束时间 (YY-MM-DD 格式)

示例

[ data ] = get_trading_dates('SZSE', '2018-01-01', '2018-08-30')

返回值

data =

    datestr: {1x163 cell}
    datenum: [1x163 double]

说明: 返回值会返回不同格式的日期类型,字符格式和 matlab 数值格式

# get_previous_trading_date查询上一个交易日

函数原型:

[ data ] = get_previous_trading_date( exchange, date )

说明

参数名 类型 说明
exchange char 见交易市场代码
start_date char 当前日期(YY-MM-DD 格式)

示例

[ data ] = get_previous_trading_date('SZSE',  '2018-08-30')

返回值

data =

    datestr: '2018-08-28'
    datenum: 7.3709e+05

# get_next_trading_date查询下一个交易日

函数原型:

[ data ] = get_next_trading_date(exchange, date)

示例

[ data ] = get_next_trading_date('SZSE',  '2018-08-31')

返回值

data =

    datestr: '2018-09-02'
    datenum: 7.3706e+05

# get_dividend查询分红送配信息

函数原型:

 = get_dividend(symbol, start_date, end_date=None)

示例

[ data ] = get_dividend({'SHSE.600000'},'2015-01-01', '2018-08-31')

返回值

data =

    'SHSE.600000'    [0.7570]    [0]    [     0]    [0]    [0]    '2015-06-22'
    'SHSE.600000'    [0.5150]    [0]    [0.1000]    [0]    [0]    '2016-06-22'
    'SHSE.600000'    [0.2000]    [0]    [0.3000]    [0]    [0]    '2017-05-24'
    'SHSE.600000'    [0.1000]    [0]    [     0]    [0]    [0]    '2018-07-12'

# get_continuous_contracts获取主力连续合约

函数原型:

[data] = get_continuous_contracts(csymbol, start_date=None, end_date=None)

示例

get_continuous_contracts({'SHFE.AG'}, '2018-07-01', '2018-08-01')

返回值

data =

    'symbol'         'created_at'
    'SHFE.ag1812'    '2018-06-30'
    'SHFE.ag1812'    '2018-07-01'
    'SHFE.ag1812'    '2018-07-02'
    'SHFE.ag1812'    '2018-07-03'
    'SHFE.ag1812'    '2018-07-04'
    'SHFE.ag1812'    '2018-07-05'
    'SHFE.ag1812'    '2018-07-06'
    'SHFE.ag1812'    '2018-07-07'
    'SHFE.ag1812'    '2018-07-08'
    'SHFE.ag1812'    '2018-07-09'
    ……
上次更新: 1/26/2024, 2:04:11 PM