创业板ETF动量择时:年化21%,最大回撤18%​,以及DeepAlphaGen强化学习因子代码发布

社群下一步要为量化入门同学,打造一个可以免安装,直接使用的AI量化平台。

我们还是从ETF开始,原因是新的投资者,从ETF,大类资产开始,总是不错的选择,甚至于,如果你不是,也不想成为专业投资者,只能享受投资复利的话,使用ETF就够多了。

当市场越来越有效的时候,alpha甚至消失,剩下市场beta也就是分享资本市场成本带来的收益。

ETF一共有1000多支,不过没有必要同步所有数据。

比如跟踪中证500指数的ETF就是20多支,当然有些做了增强。从咱们量化的角度,选择严格跟踪指数的ETF,因此,一般选择交易量最大的即可。

from django.db import models
from django.urls import reverse


class Tag(models.Model):
name = models.CharField(max_length=255, unique=True)

def __str__(self):
return self.name

class Meta:
verbose_name = 'ETF标签'
verbose_name_plural = verbose_name


class ETF(models.Model): symbol = models.CharField(max_length=20, verbose_name='基金代码') name = models.CharField(max_length=60, verbose_name='基金名称', null=True) found_date = models.DateField(verbose_name='成立日期', null=True) tags = models.ManyToManyField(Tag, related_name='etfs', blank=True) benchmark = models.CharField(max_length=500, verbose_name='比较基准代码', null=True, blank=True) def __str__(self): return '{}({})'.format(self.name, self.symbol) def get_absolute_url(self): print('abs') return reverse('etfs') class Meta: verbose_name = '场内基金-ETF' verbose_name_plural = verbose_name

图片

选择投资标的:

图片

配置交易规则:

图片

目前看,从极简的技术选型看,后端使用django+ninjia,可以完美支持管理系统,对于手工入,配置相关信息,可以用极少的代码,获得一个管理系统。

而回测系统,前端交互比较复杂,使用vue+elementUI是个好的选择,但不想引入nodejs的复杂性,直接使用cdn的模式引入。

吾日三省吾身

人生之境遇,很多时候是自身连续选择的结果。

而这些选择,是由我们底层的价值观决定的。

有人激进,有人中庸。

无它,都是选择,自己认为对就好,不要拧巴。

一次时间投入,可以长期使用的产品,服务,总是值得投入。

产品化,服务化,创造价值。

我们聚焦在ETF领域,可以大类资产配置,可以轮动,可以择时,可以高频也可以引入机器学习算法交易。

今天来一个比昨天还简单的策略,创业板ETF动量择时:年化21%,最大回撤18%。

图片

图片

创业板择时策略代码如下:

def gen_cy_picktime():
    proj = ProjConfig()
    proj.name = '创业板动量择时'
    proj.commission = 0.0001
    proj.slippage = 0.0001
    proj.symbols = ['159915.SZ']  # 证券池列表
    proj.benchmark = '159915.SZ'
    proj.start_date = '20100101'
    proj.data_folder = 'etfs'  # 这里指定data/数据目录

    fields = ['roc(close,20)']
    names = ['roc_20']
    proj.fields = fields
    proj.names = names

    # 这里是策略算子列表
    proj.algos.append(
        AlgoConfig(name=SelectBySignal().name, kwargs={'rules_buy': ['roc_20>0.08'], 'rules_sell': ['roc_20<-0.0']})

    )
    #proj.algos.append(
    #    AlgoConfig(name=SelectTopK().name, kwargs={'factor_name': 'roc_20'})
    #)
    proj.algos.append(AlgoConfig(name=WeightEqually().name))
    proj.algos.append(AlgoConfig(name=Rebalance().name))

    return proj

昨天的策略,再优化一下,年化20.3%,就两个标的:沪深300ETF和创业板ETF两个宽基ETF。

图片

大家选择“大小盘轮动”策略即可:

图片

代码在个位置:

图片

之前的文章提及的DeepAlphaGen:

DeepAlphaGen:强化学习的因子组合挖掘:框架代码+数据下载

代码在如下目录:

图片

代码已经同步至星球:

【优惠券】知识星球与开源项目:万物之中,希望至美

图片

吾日三省吾身

“凡事发生必有利于我”。

上周开始,眼晴不舒服,初步判断是干眼症。

想来,沉浸式写代码,做研究,用眼过度。

停下来,思考方向,人的精力真的很有限,专注做好能力圈的一点事情就好。

做有积累的事情,尽量自动化。一次时间投入,多次复用的事情。

如无必要,勿增实体。

投资应该是轻松,愉悦,甚至是略显无聊的事情,它不需要你特别努力,也不是你努力就有用的。关键是你要做对的事情,方向对就好。

后续的重心:

Dagster盘后更新数据,在线的, SAAS化的回测系统,不排除可转接对实盘。数据上会专注把ETF先搞扎实,当然技术栈,框架,因子挖掘,我相信都是通用的,大家愿意用在股票上,期货上,甚至加密货币上,都是可以的。

后端的框架应该还是Django,如果需要前后端分离,会使用django-ninja 一个类似fastapi的框架。前端暂时不想引入nodejs,太麻烦,还是喜欢bootstrap(jquery)的老方式。

我们那个年代的程序员,对于SEO是有执念的,也不知道有没有用。

SAAS版本AI量化回测系统,最大的挑战在于,任务可能需要异步运行,当然django也有celery这样的框架。

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103752
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注