【优矿】多因子策略

本文详细介绍了优矿平台的量化策略,包括回测参数、账户配置、策略核心方法如initialize、handle_data、post_trading_day,以及下单函数。示例代码展示了如何创建简单的回测策略和多因子选股策略,包括单因子分析、附加值分析和多因子对冲。此外,还探讨了多因子模型的构建步骤,如因子选取、有效性检验和组合构建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文就示例代码讲解优矿中常用的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 回测参数

具体参数的api文档请关注官方,你可以永远相信它。
在这里插入图片描述

  • 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分钟调仓

1.3 账户配置

具体参数的api文档请关注官方,你可以永远相信它。

优矿回测框架的交易账户配置函数,优矿最新框架支持多种交易品种,多个交易账户同时进行回测。
在这里插入图片描述
单个账户配置:

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是策略的核心部分,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m 宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值