一、基本框架
分为三个部分
1 | # 第一部分:策略参数 |
1.策略参数
关于universe(证券池):下单与历史数据获取只能限于universe中的证券。
1 | universe = {'600000.XSHG'} #某一支股票 |
关于refreash_data:策略运行的时间,与freq一起使用
1 | refresh_rate = n #表示n个freq运行一次策略 |
关于max_history_window:数据获取的历史跨度
默认支持回溯100天数据,如果需要获取大于100天前的数据,需要指定。
2.交易用户配置
- 使用字典完成账户创建,赋值给accounts
- key为自定义用户名,value为使用AccountConfig类生成的账户实例
1 | #定义账户参数 |
二、重要API
1.context(策略运行环境)
- 表示测量有哪些环境,包含运行时间、行情等内容,还可以用于存储策略中生成的临时数据的存储
- 测量框架在启动时创建Context实例,并以参数形式传递给initialize(context)和handle_rate(context),用于测量调度
- 在回测时,context包含有哪些时间、回测参数、回测运行时数据等。模拟交易时,包含运行时间、模拟交易参数、实时运行数据等;
context对象的实现和方法
1 | #属性 |
context.method
context.get_universe(asset_type,exclude_halt=False)获取符合条件的当天上市状态的资产池
1
2
3
4
5
6
7
8
9
10#使用
universe = context.get_universe()
asset_type #获取指定资产类型的universe
#参数范围
#'stock':股票 'exchange_fund':场内基金列表
#'index':指数成分股列表 'otc_fund':场外基金列表
#'futures':期货合约列表 'base_futures':普通期货合约列表
#'continuous_futures':连续期货合约列表
exclude_halt = False #去除资产池中的停盘股票,仅适用于股票返回的是股票列表(list)
context.history(symbol,attribute,time_range,freq=’1d’,style=’sat’,rtype=’frame’)获取K线、因子等时间序列数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14#example;
data = context.history(['600000.XSHG'],'closePrice',10,freq='1d',rtype='frame',style='sat')
#参数说明
symbol #需要获取的证券list,支持单个证券与证券list
attribute #需要获取的属性,支持单个值或属性list
#'openPrice':前复权开盘开盘价 'highPrice':前复权最高价
#'lowPrice':前复权最低价 'close_price':前复权收盘价
#'preClosePrice':前复权前收盘价 'turnoverVol':前复权成交量
#'turnoverValue':前复权成交额 'PE','PB'等优矿因子库因子
time_range #所需回溯的历史K线图条数,和freq属性相对应
freq #K线图周期,支持'1d','1m','5m','15m','30m','60m'等周期
style #数据返回类型,可以选择'ast','sat'或'tas'三种
#a:attribute,s:symbol,t:time
rtype #返回值的数据类型,可以选择'frame'或'array'返回的是一个dict
2.StockAccount(账户)
StockAccount表示交易账户,在参数初始化时创建
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#使用
account = context.get_account('self_account') #获取账户信息
#account属性
account.cash #当前账户可用资金
account.porforlio_value #账户资产价值
#account方法
account.get_position() #获取账户指定资产的position实例
account.get_positions() #获取所有资产的position实例
account.order() #进行下单委托
account.order_to() #通过下单,将某个股票的持仓调整到多少手
account.order_pct() #根据账户总价值,按一定比例下单
account.order_pct_to() #通过下单,将某个股票的持仓调整到持有总价值的一定比例
account.close_all_position() #卖掉所有持仓下单实例:
1
2
3
4
5for stock in universe:
account.order(stock,100) #买一手
account.orderto(stock,100) #买到十手
account.order_pct(stock,0.1) #买入总价值的0.1
account.order_pct_to(stock,0.1) #买入股票到总价值的0.1
account.method
account.get_position(symbol)获取指定资产的持仓信息,没有持仓则返回None
1
position = account.get_position('600000.XSHG')
account.get_positions(exclude_halt=False)获取所有持仓,返回字典,key为证券代码,value为position实例
account.order(symbol,amount,price=0,otype=’market’)
1
2
3
4#symbol:需要交易的证券代码,包含后缀的字符串
#amount:需要交易的证券代码为symbol的证券数量,正表示买入,负表示卖出
#price:下限价单是的下单价格(仅日内策略可用)
#otype:交易指令类型,可选'market'(市价单)和'limit'(限价单)(仅在日内交易时可用限价单)account.order_to(symbol,amount,price=0,otype=’market’)类似于order
account.order_pct(symbol,pct)当前总价值的percent
account.order_pct_to(symbol,pct)到当前总价值的percent
3.position
属性
1
2
3
4
5position.amount #持仓数量
position.available_amount #可卖出的持仓数量
position.profile #持仓浮动盈亏(随市场价格实时变动)
position.coast #平均持仓成本
position.value #持仓市值(随市场价格实时变动)