获取数据
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', '60s', '300s', '900s' 等, 默认'1d', 详情见股票行情数据 | 
| 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', '60s', '300s', '900s' 等, 默认'1d', 详情见股票行情数据 | 
示例
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]
说明:
- 若输入包含无效标的代码,无效代码对应的数据为空
 - 仅在策略实时运行模式下获取行情tick快照数据,其他情况下数据为0
 - fields用于选择需要的字段,取较少的字段可以大幅提高取数效率
 
history - 查询固定时间历史行情
按起始日期区间查询历史行情数据
函数原型:
[ data ] = history( symbols, frequency, start_time, end_time,adjust, adjust_end_time)
说明:
| 参数名 | 类型 | 说明 | 
|---|---|---|
| symbols | cell | 查询代码, 如{'symbol1', 'symbol2'} | 
| frequency | char | 频率, 支持 'tick', '1d', '60s'等, 默认 '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', '60s'等, 默认 '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: 期权, 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: 期权, 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, fields)
参数:
| 参数名 | 类型 | 说明 | 
|---|---|---|
| code | char | 行业代码 不区分大小写 | 
示例
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'
    ……