基于米筐量化平台的多因子量化选股策略实现

基于米筐量化平台的多因子量化选股策略实现

很久没有发布技术性文章,首先致敬B站“跟着迪哥学CV”,这篇文章是结合最新米筐API,对他一课讲解的复现。米筐量化平台新的API和旧版本有很多差异,docs文档中讲的也不够详细,导致一些同学在学习米筐量化平台策略代码开发时出现很多错误。简单写了一个多因子组合打分选股的代码,可以直接复制到米筐策略平台上执行。如果是使用PyCharm进行本地化部署,选股部分核心代码也粘贴出来供大家参考。因为没有优化,代码中难免出现一些啰嗦或不够精简的地方,请大家谅解。
文章后面有一些回测结果图片,只是说明可了代码结果运行顺畅,不是投资依据,没有参考价值。
文章附送了米筐13411个因子的名称,有兴趣并且有好机器的同学,可以继续扩大因子研究,希望能取得比我好的成绩。
一、米筐策略平台代码

# 可以自己import我们平台支持的第三方python模块,比如pandas、numpy等。
import rqdatac 
import numpy as np
import pandas as pd
from pandas import DataFrame as df
from rqfactor.utils import rolling_window
from rqfactor.rolling import RollingWindowFactor
from rqdatac import get_factor
from datetime import datetime
from rqdatac import get_fundamentals
# 在这个方法中编写任何的初始化逻辑。context对象将会在你的算法策略的任何方法之间做传递。
def init(context):
    # 在context中保存全局变量
    #context.s1 = "000001.XSHE"
    context.stocks = index_components('000300.XSHG')
    scheduler.run_monthly(rebalance,1)
    # 实时打印日志
    #logger.info("RunInfo: {}".format(context.run_info))

def rebalance(context,bar_dict):
    stocks = set(get_stocks(context))
    holdings = set(get_holdings(context))
    to_buy = stocks - holdings
    to_sell = holdings - stocks
    for stock in to_sell:
        order_target_percent(stock,0)
    if len(to_buy) == 0:
        return
    average_value = context.portfolio.portfolio_value/len(to_buy)
    
    for stock in to_buy:
        order_target_value(stock,average_value)

def get_holdings(context):   #获取当前账户中有什么股票
    positions = context.portfolio.positions
    holdings = []
    for position in positions:
        if positions[position].quantity > 0:
           holdings.append(position)
    return holdings

def get_stocks(context):
    #净资产收益率,越高越好
    # df_return_on_equity = get_factor(context.stocks, 'return_on_equity', '20240801', '20241231')
    df_return_on_equity = get_factor(context.stocks, 'return_on_equity')
    df_return_on_equity = df_return_on_equity.groupby(level = 'order_book_id').sum()
    ##每股收益EPS越高越好
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值