今天的几项工作:
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_buy或rules_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自动调度策略。
历史文章:
AI量化策略平台化:Django-Allauth会员管理(代码+数据)
原创文章第462篇,专注“AI量化投资、个人成长与财富自由”。
按惯性每周五咱们会迭代版本,今天也不例外。
年前咱们更新到quantlab3.6:
Quantlab3.5代码发布:因子表达式及Alpha158因子库实现 | 超参数优化(代码+数据)
本周的重点是gplearn在因子挖掘上的应用,重点是CTA场景。
gplearn遗传算法应用于CTA因子挖掘:手把手教程(代码+数据下载)
gplearn系列:使用因子rank ic评估因子性能(代码+数据)
大家知道,原生的GPLearn并不适合挖掘因子,主要存在以下几个问题:
1、gplearn只支持单标的,在CTA策略单标的可以,但单标的下挖掘的因子,很容易过拟合。
2、内置的函数不适合金融量化因子,需要自己扩展。而且原生的扩展,不支持常数项,比如SMA(10),这个10就是常数。
3、原生的fitness是ic和Rank IC,不支持夏普比或者卡玛比率这种。
4、而且网上能用的代码有限,版本鱼龙混杂,不成体系,或者文档不全。
5、传统的因子挖掘方法大多基于遗传规划(Genetic Programming)方法,这类方法具有收敛速度慢、超参数难以调优等局限;
网上的代码都是“暴改”之后的,且没有文档,demo未必能跑通。
我给大家跑通了一份,但是基于qlib的,与DeepAlpha同构,后续以这份代码为蓝本了。
大家直接pip install -r requirements.txt即可(python 3.8)
基于A股的qlib数据也会打包给大家,置于~/.qlib/qlib_data/cn_data_rolling目录下:
代码已经发布至星球:AI量化实验室——2024量化投资的星辰大海
1、支持GPLearn, DSO以及强化学习的版本。
2、数据目前的A股全量数据,qlib格式。
3、支持多支股票同时挖掘。
4、支持多因子联合评测。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103502
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!