本文就示例代码讲解优矿中常用的API接口
文章目录
优矿简介
- 一站式量化研究平台
海量金融大数据+多资产策略研究+高性能回测与模拟交易+专业风险模型+高效优化器+丰富归因分析。 - 海量金融大数据
提供各类资产的财务、因子、主题、宏观行业特色大数据,以及量化场景下的PIT数据,保障量化过程不引入未来数据。 - 多资产回测框架
股票、期货、指数、场内外基金等多资产多策略回测。丰富的衍生工具,保证多因子策略、事件驱动等快速实现。 - 本地SDK
支持云端数据与本地的交互。云端使用的大数据,及本地自定义数据,可自动双向对接,实现与本地现有环境的无缝集成。 - 量化因子库
提供400+量化因子库,除了传统的投资因子等,还提供了特色Alpha因子,例如分析师评级、分析师盈利预测等。 - 风险模型
接轨国际化风险模型算法,采用优质原始数据,提供10种风格因子、28种行业因子,全面揭示市场行业风险。
1.开始第一个策略回测
1.1 注册账号
登录优矿注册账号
注册完成之后,点击开始研究。
新建策略,自动生成策略回测模板
示例代码:
start = '2017-01-01' # 回测起始时间
end = '2018-01-01' # 回测结束时间
universe = DynamicUniverse('HS300') # 证券池,支持股票、基金、期货、指数四种资产
benchmark = 'HS300' # 策略参考标准
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
# 配置账户信息,支持多资产多账户
accounts = {
'fantasy_account': AccountConfig(account_type='security', capital_base=10000000)
}
def initialize(context):
pass
# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def handle_data(context):
previous_date = context.previous_date.strftime('%Y-%m-%d')
# 获取因子PE的的历史数据集,截止到前一个交易日
hist = context.history(symbol=context.get_universe(exclude_halt=True), attribute='PE', time_range=1, style='tas')[previous_date]
# 将因子值从小到大排序,并取前100支股票作为目标持仓
signal = hist['PE'].order(ascending=True)
target_position = signal[:100].index
# 获取当前账户信息
account = context.get_account('fantasy_account')
current_position = account.get_positions(exclude_halt=True)
# 卖出当前持有,但目标持仓没有的部分
for stock in set(current_position).difference(target_position):
account.order_to(stock, 0)
# 根据目标持仓权重,逐一委托下单
for stock in target_position:
account.order(stock, 10000)
1.2 回测参数
-
start、end
回测开始和结束时间,日线数据只能回测到2007年1月1日,分钟级别数据只能回测到2009年1月1日。值得注意的是,参数格式必须是“YYYY-MM-DD”和”YYYYMMDD“,并且在设置start和end的时候需要考虑到max_history_window引入的提前量,例如max_history_window=30时,start最早只能是2007-2-15。 -
universe证券池
策略回测的证券池,下单与历史数据获取都是限制于universe中的证券。支持全部的A股、全部可以在二级市场交易的ETF和LOF。
有两种获取证券的方式,固定的资产列表和动态的证券池。
universe = ['000001,XSHF','600000.XHSG'] # 静态证券池
universe = DynamicUniverse('HS300')
- apply_fitter
将筛选条件作用于动态证券池。 - benchmark参考标准
支持5个常用指数板块"SHCI,SH50,SH180,HS300,ZZ500",支持个股"000001.XSHE" - freq和refresh_rate策略运行频率
- refresh_rate(日线)有三种取值:
- 使用整数1表示每个交易日调仓策略
- 使用Weekly(1)表示每周第一个交易日调仓
- 使用Monthly(1,-1)表示每个月第一个和最后一个交易日调仓
- refresh_rate(分钟线)有三种取值:
- 使用(1,2)表示每个交易日每隔2分钟进行调仓
- 使用(2,[‘10:30’,“14:30”])表示每2个交易日制定特定时间调仓
- 使用(Weekly(1,-1),[‘10:30’,“14:30”])表示周第一个和最后一个交易日指定时间调仓
- 使用(Monthly(1),120)表示每个月第一个交易日,间隔120分钟调仓
- refresh_rate(日线)有三种取值:
1.3 账户配置
优矿回测框架的交易账户配置函数,优矿最新框架支持多种交易品种,多个交易账户同时进行回测。
单个账户配置:
accounts = {
'security_account': AccountConfig(account_type='security', capital_base=10000000, position_base = {
'600000.XSHG':1000}, cost_base = {
'600000.XSHG':10.05}, commission = Commission(buycost=0.001, sellcost=0.002, unit='perValue'), slippage = Slippage(value=0.0, unit='perValue'))
}
多个账户配置,Commission、Slippage
可以对多账户进行全局配置:
# 对两个账户进行全局的交易费用和滑点设置
commission = Commission(buycost=0.001, sellcost=0.002, unit='perValue')
slippage = Slippage(value=0.0, unit='perValue')
accounts = {
'security_account1': AccountConfig(account_type='security', capital_base=10000000, position_base = {
'600000.XSHG':1000}, cost_base = {
'600000.XSHG':10.05}, commission = commission, slippage = slippage),
'security_account2': AccountConfig(account_type='security', capital_base=20000000, position_base = {
'600000.XSHG':2000}, cost_base = {
'600000.XSHG':10.05}, commission = commission, slippage = slippage)
}
具体字段含义,请查看官方文档。
1.4 策略基本方法
1.4.1 initialize策略初始化函数
initialize是您实现策略初始化环境的函数,用于设置一些全局变量信息,该函数只在策略初始化时运行一次。
1.4.2 handle_data策略运行逻辑
您可以在handle_data中实现策略运行逻辑,策略框架会根据初始化配置的策略算法运行频率调用该函数进行策略调仓,handle_data是策略的核心部分,