三分钟入门量化(十):小市值策略(聚宽)-万三是多少手续费

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%年化收益来说,这个回撤有点大,而且回撤时间较长,如果无法接受长期回撤的话需慎用。

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

回测数据:

旋风冲锋策略说明

实盘数据:

『旋风冲锋』策略半年实盘数据大公开!

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

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

欧大师别墅门窗

铝合金门窗

系统门窗代理

上一篇: 三分钟了解电力市场——灵活多变的报价方式-博弈五段一瓶多少钱
下一篇: 三分钟判断一只基金值不值得买#金融-基金査询
相关推荐

猜你喜欢