文档
测试

1、ContextInfo

POST

0、ContextInfo对象介绍

# ContextInfo ContextInfo 是策略运行环境对象,是 init() 和 handlebar() 这两个基本方法必传参数,里面包括了终端自带的属性和方法,==还可以添加自定义属性==。 *注:除特殊标明外,以下函数均支持回测和实盘/模拟运行模式。

1)设定股票池 ContextInfo.set_universe()

# 设定股票池 ContextInfo.set_universe() 用法: ContextInfo.set_universe(stocklist) 释义: 设定股票池 参数: list 返回: 无 示例: ```python def init(ContextInfo): stocklist = ['000300.SH','000004.SZ'] ContextInfo.set_universe(stocklist) ```

2)设定交易账号 ContextInfo.set_account()

# 设定交易账号 ContextInfo.set_account() 用法: ContextInfo.set_account(account) 释义: 设定交易账号,并将该账号用于之后的交易主推订阅。 *注: 一、可多次调用以设置多个账号,应在init中进行设置完毕,init执行后再设置将不再订阅交易主推; 二、调用passorder传入账号为空时会使用最后一次设置的账号作为下单账号。 参数: string 返回: 无 示例 ```python def init(ContextInfo): account = '6000000223' ContextInfo.set_account(account) ```

3)设定回测起止时间 ContextInfo.start / ContextInfo.end

# 设定回测起止时间 ContextInfo.start / ContextInfo.end 用法: ContextInfo.start / ContextInfo.end 释义: 设定回测起止时间,标准格式如”2009-07-14 01:13:30”,读写 *注: 一、此函数只支持回测模式; 二、仅在init中设置生效,应在init中设置完毕; 三、缺省值为策略编辑界面设定的回测时间范围; 四、回测起止时间也可在策略编辑器的回测参数面板中设置,若两处同时设置,则以代码中设置的值为准; 五、结束时间小于等于开始时间则计算范围为空。 参数: 无 返回: 无 示例: ```python def init(ContextInfo): ContextInfo.start = '2012-06-06 10:00:00' ContextInfo.end = '2013-08-08 14:30:00' ```

4)设定回测初始资金 ContextInfo.capital

# 设定回测初始资金 ContextInfo.capital 用法: ContextInfo.capital 释义: 设定回测初始资金,读写,默认为 1000000 *注:此函数只支持回测模式。回测初始资金也可在策略编辑器的回测参数面板中设置,若两处同时设置,则以代码中设置的值为准。 参数: 无 返回: number 示例: ```python def init(ContextInfo): ContextInfo.capital = 10000000 def handlebar(ContextInfo): print(ContextInfo.capital) ```

5)设定策略回测滑点 ContextInfo.set_slippage()

# 设定策略回测滑点 ContextInfo.set_slippage() 用法: ContextInfo.set_slippage(slippageType, slippage) 释义: 设定策略回测滑点,默认值 0.00 *注:此函数只支持回测模式。回测滑点也可在策略编辑器的回测参数面板中设置,若两处同时设置,则以代码中设置的值为准。 参数: slippageType:滑点类型,可选值: 0:tick跳数设置滑点 1:按照固定值(价格)设置滑点 2:价格比例设置滑点 slippage:滑点值 返回: 无 示例: ```python def init(ContextInfo): # 按照固定值(价格)设置滑点值为 0.01 ContextInfo.set_slippage(1, 0.01) ```

6)设定策略回测各种手续费率 ContextInfo.set_commission()

# 设定策略回测各种手续费率 ContextInfo.set_commission() 用法: ContextInfo.set_commission(commissionType, commissionList) 释义: 设定策略回测各种手续费率,默认类型值 0 按比例,默认值 0.000 *注:此函数只支持回测模式。回测各种手续费率也可在策略编辑器的回测参数面板中设置,若两处同时设置,则以代码中设置的值为准。 参数: commissionType:number,可选值: 0:按比例 1:按每手(股) commissionList:list,包含六个值,commissionList = [open_tax, close_tax, open_commission, close_commission, close_tdaycommission, min_commission] open_tax:买入印花税 close_tax:卖出印花税 open_commission:开仓手续费; close_commission:平仓(平昨)手续费 close_tdaycommission:平今手续费 min_commission:最少手续费 ==*注:如果只填写一个参数则代表输入的参数值赋值给 open_commission = close_commission = close_today_commission,其他的值均为 0,这时 commissionType 为 0== 返回: 无 示例1: ```python def init(ContextInfo): # 万三 commission = 0.0003 # 设定开仓手续费和平仓手续费以及平今手续费均为 0.0003,其余为 0 ContextInfo.set_commission(commission) ``` 示例2: ```python def init(ContextInfo): commissionList = [0,0.0001, 0.0003, 0.0003, 0, 5] # 设定买入印花税为 0,卖出印花税为 0.0001,开仓手续费和平仓(平昨)手续费均为万三,平今手续费为 0,最小手续费为 5 ContextInfo.set_commission(0, commissionList) ```

7)获取股票池中的股票 ContextInfo.get_universe()

# 获取股票池中的股票 ContextInfo.get_universe() 用法: ContextInfo.get_universe() 释义: 获取股票池中的股票 参数: 无 返回: list 示例: ```python def handlebar(ContextInfo): print(ContextInfo.get_universe()) ```

8)获取当前周期 ContextInfo.period

# 获取当前周期 ContextInfo.period 用法: ContextInfo.period 释义: 获取当前周期,即基本信息中设置的默认周期,只读 参数: 无 返回: string,返回值含义: ‘1d’:日线 ‘1m’:1分钟线 ‘3m’:3分钟线 ‘5m’:5分钟线 ‘15m’:15分钟线 ‘30m’:30分钟线 ‘1h’:小时线 ‘1w’:周线 ‘1mon’:月线 ‘1q’:季线 ‘1hy’:半年线 ‘1y’:年线 示例: ```python def handlebar(ContextInfo): print(ContextInfo.period) ```

9)获取当前运行到 K 线索引号 ContextInfo.barpos

# 获取当前运行到 K 线索引号 ContextInfo.barpos 用法: ContextInfo.barpos 释义: 获取当前运行到 K 线索引号,只读,索引号从0开始 参数: 无 返回: number 示例: ```python def handlebar(ContextInfo): print(ContextInfo.barpos) ```

10)获取当前图 K 线数目 ContextInfo.time_tick_size

# 获取当前图 K 线数目 ContextInfo.time_tick_size 用法: ContextInfo.time_tick_size 释义: 获取当前图 K 线数目,只读 参数: 无 返回: number 示例: ```python def handlebar(ContextInfo): print(ContextInfo.time_tick_size) ```

11)判定是否为最后一根 K 线 ContextInfo.is_last_bar()

# 判定是否为最后一根 K 线 ContextInfo.is_last_bar() 用法: ContextInfo.is_last_bar() 释义: 判定是否为最后一根 K 线 参数: 无 返回: bool,返回值含义: True:是 False:否 示例: ```python def handlebar(ContextInfo): print(ContextInfo.is_last_bar()) ```

12)判定是否为新的 K 线 ContextInfo.is_new_bar()

# 判定是否为新的 K 线 ContextInfo.is_new_bar() 用法: ContextInfo.is_new_bar() 释义: 某根 K 线的第一个 tick 数据到来时,判定该 K 线为新的 K 线 参数: 无 返回: bool,返回值含义: True:是 False:否 示例: ```python def handlebar(ContextInfo): print(ContextInfo.is_new_bar()) ```

13)判定股票是否停牌 ContextInfo.is_suspended_stock()

# 判定股票是否停牌 ContextInfo.is_suspended_stock() 用法: ContextInfo.is_suspended_stock(stockcode.market) 释义: 判定股票是否停牌 参数: 股票市场和代码 返回: bool,返回值含义: True:停牌 False:未停牌 示例: ```py def handlebar(ContextInfo): print(ContextInfo.is_suspended_stock('600004.SH')) ```

14)判定给定股票代码是否在指定的板块中 is_sector_stock()

# 判定给定股票代码是否在指定的板块中 is_sector_stock() 用法: is_sector_stock(sectorname, market, stockcode) 释义: 判定给定股票代码是否在指定的板块中 参数: sectorname:string,板块名 market:string,市场 stockcode:string,股票代码 返回: bool,返回值含义: True:在板块中 False:不在板块中 示例: ```py def handlebar(ContextInfo): print(is_sector_stock('沪深300','SH','600000')) ```

15)判定给定股票是否属于某个类别 is_typed_stock()

# 判定给定股票是否属于某个类别 is_typed_stock() 用法: is_typed_stock(stocktypenum, market, stockcode) 释义: 判定给定股票是否属于某个类别 参数: stocktypenum:number,类别标号,如股票类别标号为100003,详细见[5.3. 附录3 is_typed_stock 函数证券分类表](# 5.3. 附录3 is_typed_stock 函数证券分类表),或者见 xtstocktype.lua 文件 market:string,市场 stockcode:string,股票代码 返回: number,返回值含义: 1:True 0:False 示例: ```py def handlebar(ContextInfo): print(is_typed_stock(100003,'SH','600000')) ```

16)判定给定股票代码是否在指定的行业分类中 get_industry_name_of_stock()

# 判定给定股票代码是否在指定的行业分类中 get_industry_name_of_stock() 用法: get_industry_name_of_stock(industryType, stockcode) 释义: 判定给定股票代码是否在指定的行业分类中 参数: industryType:string,行业类别,有 ‘CSRC’ 和 ‘SW’ 两种 stockcode:string,形式如 ‘stockcode.market’,如 ‘600000.SH’ 返回: string:对应行业名,找不到则返回空 string 示例: ```py def handlebar(ContextInfo): print(get_industry_name_of_stock('SW','600000.SH')) ```

17)获取当前图代码 ContextInfo.stockcode

# 获取当前图代码 ContextInfo.stockcode 用法: ContextInfo.stockcode 释义: 获取当前图代码,只读 参数: 无 返回: string:对应主图代码 示例: ```py def handlebar(ContextInfo): print(ContextInfo.stockcode) ```

18)获取当前主图复权处理方式 ContextInfo.dividend_type

# 获取当前主图复权处理方式 ContextInfo.dividend_type 用法: ContextInfo.dividend_type 释义: 获取当前主图复权处理方式 参数: 无 返回: string,返回值含义: ‘none’:不复权 ‘front’:向前复权 ‘back’:向后复权 ‘front_ratio’:等比向前复权 ‘back_ratio’:等比向后复权 示例: ```py def handlebar(ContextInfo): print(ContextInfo.dividend_type) ```

19)获取当前主图市场 ContextInfo.market

# 获取当前主图市场 ContextInfo.market 用法: ContextInfo.market 释义: 获取当前主图市场,只读 参数: 无 返回: string:对应主图市场 示例: ```py def handlebar(ContextInfo): print(ContextInfo.market) ```

20)根据代码获取名称 ContextInfo.get_stock_name()

# 根据代码获取名称 ContextInfo.get_stock_name() 用法: ContextInfo.get_stock_name(‘stockcode’) 释义: 根据代码获取名称 参数: stockcode:股票代码,如’000001.SZ’,缺省值 ‘ ‘ 默认为当前图代码 返回: string(GBK编码) 示例: ```py def handlebar(ContextInfo): print(ContextInfo.get_stock_name('000001.SZ')) ```

21)根据代码返回对应股票的上市时间 get_open_date()

# 根据代码返回对应股票的上市时间 get_open_date() 用法: get_open_date(‘stockcode’) 释义: 根据代码返回对应股票的上市时间 参数: stockcode:股票代码,如’000001.SZ’,缺省值 ‘ ‘ 默认为当前图代码 返回: number 示例: ```py def handlebar(ContextInfo): print(ContextInfo.get_open_date('000001.SZ')) ```

22)表示当前是否开启回测模式 ContextInfo.do_back_test

# 表示当前是否开启回测模式 ContextInfo.do_back_test 用法: ContextInfo.do_back_test 释义: 设定是否开启回测模式,只读,默认值为 False 参数: 无 返回: bool 示例: ```py def handlebar(ContextInfo): print(ContextInfo.do_back_test) ```

23)获取回测基准 ContextInfo.benchmark

# 获取回测基准 ContextInfo.benchmark 用法: ContextInfo.benchmark 释义: 获取回测基准,只读 *注:此函数只支持回测模式。 参数: 无 返回: string 示例: ```py def handlebar(ContextInfo): print(ContextInfo.benchmark) ```

24)设定回测系统输出日志显示级别 ContextInfo.data_info_level

# 设定回测系统输出日志显示级别 ContextInfo.data_info_level 用法: ContextInfo.data_info_level 释义: 设定回测平台输出日志显示级别,默认是0,可设置的值有: ==0 信息, 1 警告, 2 错误, 3 致命==,根据设定显示大于等于该级别的日志 *注:此函数只支持回测模式。 参数: 无 返回: 无 示例: ```py def init(ContextInfo): # 显示'错误'级别以上的信息 ContextInfo.data_info_level = 2 ```

25)获取某个记录类型对应的某个时刻的记录情况 get_result_records()

# 获取某个记录类型对应的某个时刻的记录情况 get_result_records() 用法: get_result_records (recordtype, index, ContextInfo) 释义: 获取某个记录类型对应的某个时刻的记录情况。 *注:模型回测时有效,获取的为回测面板中的记录结果 参数: Recordtype:string,面板类型,可选值: ‘buys’:买入持仓 ‘sells’:卖出持仓 ‘holdings’:当前持仓 ‘historysums’:历史汇总 ‘dealdetails’:交易明细 index:number,当前主图对应 K 线索引 ContextInfo:PythonObj,Python对象,这里必须是ContextInfo 返回: list,返回的 list 结构中包含 0 个或多个 Python 对象,该 Python 对象内含如下属性值: market:string,市场代码 stockcode:string,合约代码 open_close:number,期货开平:1 开 0 平;股票: 1 买 0 卖 direction:number,方向:1 多 -1 空;回购:1 逆回购 -1 正回购 trade_price:number,持仓成本 current_price:number,最新价,持仓中用这个价 profit:number,持仓盈亏 position:number,仓位数量 current_weight:number,仓位权重[暂无有效数据] benefit_weight:number,盈利占比权重,记录类型是 ‘historysums’ 时有效 holding_periods:number,累计持仓天数,记录类型是 ‘historysums’ 时有效 buy_sell_times:number,交易次数,记录类型是 ‘historysums’ 时有效 commission:number,手续费 trade_balance:number,成交额或市值 operate_type:number,操作类型,记录类型是 ‘dealdetails’ 时有效 trade_date:number,交易日期,毫秒标记,记录类型是 ‘dealdetails’ 时有效 示例: ```py def handlebar(ContextInfo): index = ContextInfo.barpos print(get_result_records('buys', index, ContextInfo)) ```

26)设置定时器 run_time()

# 设置定时器 run_time() 用法: run_time(funcName, period, startTime, market) 释义: 设置定时器 *注:回测模式时,run_time()没有意义 参数: funcName:回调函数名 period:重复调用的时间间隔,’5nSecond’表示每5秒运行1次回调函数,’5nDay’表示每5天运行一次回调函数,’500nMilliSecond’表示每500毫秒运行1次回调函数 startTime:表示定时器第一次启动的时间,如果要定时器立刻启动,可以设置历史的时间 回调函数参数: ContextInfo:策略模型全局对象 示例: ```py #此例为自2019-10-14 13:20:00后每5s运行一次myHandlebar import time def init(ContextInfo): ContextInfo.run_time("myHandlebar","5nSecond","2019-10-14 13:20:00","SH") def myHandlebar(ContextInfo): print('hello world') def handlebar(ContextInfo): pass ```

27)停止处理函数 stop()

# 停止处理函数 stop() 用法: stop(ContextInfo) 释义: PY策略模型关闭停止前运行到的函数,复杂策略模型,如中间有起线程可通过在该函数内实现停止线程操作。 *注:PY策略可不用该函数 参数: ContextInfo:策略模型全局对象 示例: ```py def stop(ContextInfo): print( 'strategy is stop !') ```