三分钟入门量化(十):小市值策略(聚宽)

hello,我是毛豆。本系列用最精简的代码和案例带你快速入门量化,只讲最干的干货,想要学习量化又不知道该如何上手的小伙伴赶紧看过来!

前期回顾:

三分钟入门量化(一):行情数据获取&绘制k线图

三分钟入门量化(二):Tushare Pro数据接口介绍

三分钟入门量化(三):计算收益率

三分钟入门量化(四):行情数据统计分析

三分钟入门量化(五):收益率的推断统计

三分钟入门量化(六):相关性分析

三分钟入门量化(七):回归分析

三分钟入门量化(八):资本资产定价模型

三分钟入门量化(九):小市值策略(本地)

上一期我们使用python在本地实现了小市值策略,但没有考虑到实际仓位分配不均等、交易手续费、滑点等问题,因此测算结果不是很精准。今天继续分享如何使用第三方量化平台做策略回测。

聚宽回测框架

我们以聚宽为例,先看一下回测框架。

首先登录到聚宽官网,选择策略研究-策略列表,点击新建策略,选择股票策略。

图片

点击后进入到聚宽的回测环境中,界面展示如下:

图片

由于我们选择的是股票策略,这里官方已经为我们搭建好了股票策略的基本回测框架,分为4个代码块,分别如下:

1.初始化函数initialize()

图片

用于设置一些环境参数,比如:

set_benchmark():设置参照基准,一般选用沪深300作为参考;

log.set_level():设置输出日志级别;

set_order_cost():设置印花税、交易佣金,手续费默认为万分之三,印花税为千分之一;

run_daily():定时任务,用于设置策略什么时候运行、以及运行频率。

除了run_daily()之外,也可以使用handle_data()指定策略的运行频率。handle_data()每个单位时间会调用一次, 如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次。需要注意的是,同一策略中不要同时使用run_daily和handle_data。

2.开盘前运行函数

图片

开盘前我们往往需要预先设定好备选股池,因此这里主要实现选股逻辑。最简单的方式就是直接指定股票代码,示例中指定备选股为平安银行。在run_daily()中指定time='before open',代表运行时间为开盘前(9:00)。

3.开盘中运行函数

图片

开盘中我们需要对备选股和持仓股进行监控,一旦备选股符合买入条件就开仓,持仓股符合卖出条件就清仓。其中order_value()、order_target()为下单函数,用于实现下单功能。在run_daily()中指定time='open',按天回测运行时间为09:30:00,按分钟回测运行时间为每分钟的第1秒。

4.收盘后运行函数

图片

收盘后我们可以打印出当天的交易记录,或者同步当天的某些特定信息。在run_daily()中指定time='after close',代表运行时间为收盘后(15:00)半小时内。

上面的几个函数中都带有默认参数context、g。这两个对象都是回测环境中官方已经为我们构建好的,其中context用于存放用户的账户信息、时间信息等,比如:

context.portfolio: 存放账户信息,包括账户总资金、可用资金、持仓股、仓位等等;

context.current_dt:存放当前时间;

g用于存放用户自定义的各类全局变量。

总体来说回测框架清晰简明,用户只需要在此基础上新增自己的功能模块即可,而我们需要实现的任何功能都可以通过各类数据接口来达成。聚宽提供了丰富的数据接口,每个数据接口在官方给出的API文档中都有详细的说明,即用即查,非常方便。

比如编写小市值策略需要用到的市值数据,在股票数据-财务数据中可以查看到数据接口为get_fundamentals():

图片

筛选出市值在20-30亿的股票,实现方式如下:

q = query(
            valuation.code,
            valuation.market_cap
        ).filter(
            valuation.market_cap.between(20,30)
        )

# 选出低市值的股票,构成buylist
df = get_fundamentals(q)

下面我们在回测环境中实现完整的小市值策略。

小市值策略聚宽实现

首先定义初始化函数,在这里可以预先定义好用于市值筛选的query语句,其功能为筛选出市值在20-30亿之间的股票并排序;设置持仓股为10只,设置调仓频率为每月1次。

# 导入函数库
from jqdata import *

# 初始化函数,设定基准等等
def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    #定义用于市值筛选的query对象
    g.q = query(valuation.code,valuation.market_cap).filter(valuation.market_cap.between(20,30)).order_by(valuation.market_cap.asc())
    # 定义持仓数量
    g.N = 10 
    # 每月运行一次
    run_monthly(trade, 1)

接下来实现交易函数,其功能为卖出持仓股,买入备选股。

def trade(context):
    #筛选初市值在20-30亿之间的股票并按市值升序排序
    df = get_fundamentals(g.q)
    buylist =list(df['code'])
    #过滤停牌股票
    buylist = filter_paused_stock(buylist)
    #选择其中市值最小的10只
    buylist = buylist[:g.N]
    #持仓股卖出,如果持仓股在备选股中则不用卖
    for security in context.portfolio.positions:
        if security not in buylist:
            order_target_value(security, 0)
    #备选股买入,如果备选股在持仓股中则不用买
    buylist=[i for i in buylist if i not in context.portfolio.positions]
    if len(buylist)>0:
        #每只股资金
        cash = context.portfolio.available_cash/len(buylist)
        ## 买入股票
        for security in buylist:
            order_value(security, cash)

单独写一个函数,用于过滤停牌股:

# 过滤停牌股票
def filter_paused_stock(stock_list):
    current_data = get_current_data()
    return [stock for stock in stock_list if not current_data[stock].paused]

写好之后我们设置回测时间为2023-01-01至2023-07-01、回测金额为100000、回测频率为每天,点击运行回测:

图片

查看收益概述:

图片

年化收益38.74%,最大回撤8.06%,累计收益、夏普比率、胜率等指标也都计算好了。曲线中蓝线为策略收益,红线为基准收益。

点击查看交易详情可以看到具体交易了哪些股、盈亏如何:

图片

当然,回测时间太短是无法评估策略是否长期有效的。我们可以修改回测时间为2013.01.01-2023.07.01,重新回测:

图片

10年16倍!长期收益不错,但最大回撤也上升到了33.99%。相比于32.29%年化收益来说,这个回撤有点大,而且回撤时间较长,如果无法接受长期回撤的话需慎用。

毛豆实盘使用的超短线高频量化策略『旋风冲锋』,经历了数十个版本的回测调优,不仅有着超高的年化收益,而且严格控制回撤,实盘效果也非常好。

回测数据:旋风冲锋策略说明icon-default.png?t=N6B9https://mp.weixin.qq.com/s?__biz=Mzk0MzQzMjc0NQ==&mid=2247483912&idx=1&sn=22ebf8962b663be518dbf648a043eec3&chksm=c332b74ef4453e583295f1c30fff9d4824d34353d1e2485ea62d4be7bbaa31307121e6060816&token=658742839&lang=zh_CN&scene=21#wechat_redirect

实盘数据:『旋风冲锋』策略半年实盘数据大公开!icon-default.png?t=N6B9http://mp.weixin.qq.com/s?__biz=Mzk0MzQzMjc0NQ==&mid=2247497573&idx=1&sn=87dc047f462302886df970e13c77524b&chksm=c3314223f446cb3590e80d4f416f7cefc91769cf7b4fbe51916dfe12b52d92d66fb44452bd20&scene=21#wechat_redirect

图片

以上是今天的全部干货内容,本文主要目的是阐述如何通过聚宽平台做策略回测,小市值策略本身如何这里不过多评价,每个人的风险偏好与投资风格不同,适合自身的策略才是最好的策略。

本文是『三分钟入门量化』系列的最后一篇文章,后续毛豆还会分享更多量化相关文章,也会在每个交易日继续和大家分享旋风冲锋策略的实盘情况,欢迎大家点赞关注。

猜你喜欢

转载自blog.csdn.net/weixin_37475278/article/details/131742660