Quantlab3.6代码发布

简单到,我在后台直接录入一段简单的json即可:

图片

吾日三省吾身

选择当然大于努力,但努力本身就是最好的选择。

这不是绕口令,现在很多人把所谓努力无用论来解释自己的躺平,躺得非常心安理得。

我想这也并非宇辉本意。

适度焦虑是有益于人类社会总体进步的。

为什么要说这个呢?因为去年底“差点”接受了做一个“普通人”也挺好的观点。————结果差点焦虑症犯了。

没错,多数人的数终其一生就是个世俗意义上的普通人。

但你的奋半,努力与追求,让这个过程变得唯一且有意义。

有时候就是想看看,我们自己的潜力有多大。

把AI量化平台化,这个想法好多年了。至少可以追溯到2016年。

从django/flask/fastapi,mysql/mongo。设计过多种数据表结构。

做回测引擎,整理金融数据,挖掘因子,做过很多努力。

当然很多是走了弯路,但人生每一步都算数,都有意义。

这就是探索。

这一次,平台化第6天,已经有了不错的进展。回归于

django+mysq+myngo+apscheduler。思路很清晰,框架基本落成,需求细节还有不少。

用户登录与注册功能,之前很多次,到这一步就有很多细节没有完成。——其实我们总是高估1-2年的成就,而低估5-10年的潜力。做事情也是,折腾几天就觉得好慢,进而就“不了了之”。

策略定时任务,策略创建(bootstrap+jquery就可以搞定)。之前在这一步也思考并探索了好多种方案。

我相信,下周仍然会有不少进展: 

(策略超市相关)

1、后台提交策略,展现策略列表。

2、定时任务执行策略,api驱动执行策略。

3、策略详情页。

4、用户可以订阅策略。

(论坛相关)

1、flask的密码与django的加密是否一致?

2、之前绑定的会员信息导入。——email字段,用户名字段,密码字段,其他信息同步至profile。

3、贴子,分类,标签,转,评,赞,浏览建模

4、贴子导入。

5、文章列表页,详情页。

(发布相关)

1、切换到mySql数据库。

2、docker/docker-compose准备。

4、gunicorn+nginx+django部署。

心中有目标,不必也无法做所谓长期计划,一次写一周差不多。方向是明确的,尽快起而行之。

今天的几项工作:

1、策略模板统一化,统一的json,部分策略模板。

2、创业板择时策略,本地回测。 

3、网页策略回测。 

4、网页策略保存。 

5、Django-Apscheduler,调度策略运行,结果入mongo。 

6、代码发布。

策略配置统一化后的代码:

 几点改进,统一一个模板,可以配置所有策略。

数据加载统一走“universe”文件夹,不区分etf,股票,指数还是期货。

class Task:
    name: str = '策略名称'
    desc: str = '策略描述'

    # 标的池
    symbols: list[str] = field(default_factory=list)

    algo_period: str = 'RunDaily'
    algo_period_days: int = 20  # 仅当RunDays时需要

    # 规则选标的:当rules_buyrules_sell至少有一条规则时,添加SelectBySignal算子, 在SelectAll之后
    rules_buy: list[str] = field(default_factory=list)  # roc(close,20)>0.08
    at_least_buy: int = 1
    rules_sell: list[str] = field(default_factory=list)  # roc(close,20)<0
    at_least_sell: int = 1

    # 排序算子:当order_by不为空时,在选股之后,添加SelectTopK算子
    order_by: str = ''  # 比如roc(close,20),或者 roc(close,20)+ slope(close,20)
    topK: int = 1
    dropN: int = 0
    b_ascending: bool = False  # 默认降序

    # 仓位分配,默认等权
    algo_weight: str = 'WeightEqually'
    algo_weight_fix: list = field(default_factory=list)  # WeightFix时需要

    feature_names: list = field(default_factory=list)  # roc(close,20)
    features: list = field(default_factory=list)  # roc_20


    def load_datas(self):
        logger.info('开始加载数据...')  #
        loader = CSVDataloader(DATA_DIR.joinpath('universe'), self.symbols, start_date=self.start_date,
                               end_date=self.end_date)
        df = loader.load(fields=self.features, names=self.feature_names)
        df['date'] = df.index
        df.dropna(inplace=True)
        return df

        return None

    def get_algos(self):
        algos = []
        algos.append(self._parse_period())
        algos.append(SelectAll())
        if len(self.rules_buy) or len(self.rules_sell):
            algos.append(SelectBySignal(rules_buy=self.rules_buy,
                                        buy_at_least_count=self.at_least_buy,
                                        rules_sell=self.rules_sell,
                                        sell_at_least_count=self.at_least_sell
                                        ))

        if len(self.order_by):
            algos.append(SelectTopK(factor_name=self.order_by, K=self.topK, drop_top_n=self.dropN,
                                    b_ascending=self.b_ascending))

        algos.append(self._parse_weights())
        return algos

在新模板下,实现“创业板择时策略”——是不是更加简洁了?

from engine.engine import Engine
from engine.task import Task

t = Task()
t.name = '创业板动量择时'
t.symbols = ['159915.SZ']  # 创业板指数
t.features = ['roc(close,20)']
t.feature_names = ['roc_20']

t.rules_buy = ['roc_20>0.08']
t.rules_sell = ['roc_20<0']

图片

图片

年化20%, 回撤18.8%,还不错的——动量策略,永远的神。

代码在这里:

图片

3、我们在网页系统里测试一下看看效果:

在咱们网站上回测结果一样:

图片

4、策略发布到网站后台:

5、Django-APScheduler自动调度策略。

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

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

相关推荐

发表回复

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