今天我们来完成如下两个功能: 择时策略模板和streamlit实现GUI。
择时模板更为简单:
@dataclass class TaskPickTime(Task): # 择时策略模板 def get_algos(self): return [ RunAlways(), 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 ), WeightEqually(), Rebalance() ]
就是配置一下买入,卖出信号:
from engine.engine import Engine from engine.task import TaskPickTime task = TaskPickTime() task.benchmark = '159915.SZ' task.symbols = [ "159915.SZ"] task.features = [ "买入信号"] task.feature_names = ["买入信号"] task.rules_buy = ['信号>x']
task.rules_sell = ["信号<y"] e = Engine(task=task) e.run() e.stats()
回测结果:
年化19.7%,回测18.8%,远超创业板指数本身。
上面的参数,在一些平台是收费的,因此我没有直接贴出来。
大家可能好奇,这些最优参数怎么来的。
其实这就是下一步我们要做的事情——超参数优化。
使用机器学习,遗传算法等对参数空间进行搜索,找到最优化的参数集。——你发现,你改动参数,结果大概率会变差,因为这是我们优化的结果。
今天的第二项任务是streamlit做界面,有一个界面方便大家运行策略,分析结果。
大家可以下载代码自行体验:
星球每天给大家写实战代码、交付策略:
gui的核心代码如下:
import streamlit as st from streamlit_option_menu import option_menu from engine.engine import Engine from examples.strategies import task_list st.set_page_config(page_title='Quantlab - AI量化实验室', page_icon=":bar_chart:", layout='wide') #定义边栏导航 with st.sidebar: choose = option_menu('Quantlab-AI量化实验室',['策略回测','数据分析','机器学习'], icons=['house','book-half','book-half']) task = st.selectbox(label='请选择策略:', options=task_list()) if st.button('回测'): st.write('启动回测:' + task.name) with st.spinner('回测进行中,请稍后...'): e = Engine(task=task) e.run() df_all = e.get_df_equities() st.line_chart(df_all) df_ratios = e.get_ratios(df_all) st.write(df_ratios)
版本3.3是值得期待的版本,经过2023年一年的摸索,我们的思路基本成熟。
底层完全重构,从因子表在式,到因子挖掘,后续一系列功能都做得最大程度的复用与环环相扣。确保功能的连续性。
历史文章:
昨天花一天时间,把回测引擎主体重写了。
性能提升不是一星半点。
确实是代码读多的好处,把各家所长精华都消化了,缺点尽量规避。
今天的计划:
1、轮动模板迁移过来。
2、补充orders ,trades细节。
3、调试stats细节。
使用examples/scripts下的脚本下载所需要的ETF日线数据(注意这里都是后复权的)。
轮动策略的模板同样简洁:
@dataclass class TaskRolling(Task): # 轮动策略模板 def get_algos(self): return [ self._parse_period(), 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 ), SelectTopK(factor_name=self.order_by, K=self.topK, drop_top_n=self.dropN, b_ascending=self.b_ascending), self._parse_weights(), Rebalance() ]
算法每天盘后运行,先是信号选股,把rsrs标准分<0的过滤掉,然后按20天动量斜率排序,择期最大者持有。
策略配置如下:
from engine.engine import Engine from engine.task import TaskRolling task = TaskRolling() task.benchmark = '510300.SH' task.symbols = [ "513100.SH", "159934.SZ", "510880.SH", "159915.SZ",] task.features = [ "roc(close,20)", "slope(close,20)", "slope_pair(high,low,18)", "zscore(rsrs_18,600)",] task.feature_names = [ "roc_20", "slope_20", "rsrs_18", "rsrs_norm",] task.rules_buy = [] task.rules_sell = ["rsrs_norm<0"] task.order_by = 'slope_20' e = Engine(task=task) e.run() e.stats()
策略表现:
策略代码在如下位置:
大家可以前往星球下载,
A股市场开年以来可是相当震撼。
上午表现还可以,群里一片哀嚎。
这个时候,大类资产配置的优势就体现出来了 。
万物皆周期,投资尤是。
按自己的规划和交易系统走,不忘初心。
在目前的规划里,深度强化学习本身也是用于挖因子,不过,有quant4.0的版本里,端对端且跳过因子挖掘,或者说通过模型直接学习价量中的信息,这在图像识别和自然语言处理里,已经实现了。
神经网络能自动提取股票原始量价数据中的特征,实现端到端的因子挖掘和因子合成。注意力机制在多数场景下有效。
我们基于策略模板,尽量把开发量简化。
当前已经重构了大类资产配置模板,轮动模型,明天是择时模板,机器因子合成模板,属于轮动策略的一个分支,然后就是多策略组合。
之后是因子挖掘,jplearn, 深度强化学习端对端,因子评价等。
还有就是超参数优化,包括暴力穷举,机器学习,遗传算法超参数优化等。
历史文章:
去掉底层回测引擎,完全自研,增加超参数优化,因子自动挖掘,机器模型交易。
自动挖因子,自动超参数优化,多策略组合与全天候实盘——Quantlab的2024进化路线图
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103571
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!