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 !')
```