您可以自行,快速创建自己的可实盘策略。
我们花30秒来配置经典的“大小盘趋势轮动策略”。
第一步,选择投资标的池,这里我们选择:沪深300ETF和创业板ETF。
第二步,配置交易规则:
这里我们只引入一个因子,就是20日动量,命名为roc_20。
第三步:(保持默认值即可)
搞定:
界面代码发下(今天或明天打包发布):AI量化实验室——2024量化投资的星辰大海
import streamlit as st import requests import pandas as pd from engine.task import Task from engine.engine import Engine url = 'http://ailabx.com/api/funds' @st.cache_data def get_funds(): datas = requests.get(url).json() dict_data = {item['symbol']: item['name'] + '({})'.format(item['symbol']) for item in datas} return dict_data task = Task() def select_funds(): def _select_funds_format(x): return get_funds()[x] symbols = st.multiselect(label='请选择基金:', options=list(get_funds().keys()), format_func=lambda x: _select_funds_format(x)) task.symbols = symbols def select_period(): periods = {'RunDaily': '每天运行', 'RunWeekly': '每周运行', 'RunMonthly': '每月运行', 'RunQuarterly': '每季度运行', 'RunYealy': '每年运行', 'RunDays': '自定义天数'} def _period_format(x): return periods[x] period = st.selectbox(label='请选择调仓周期', index=0, options=list(periods.keys()), format_func=lambda x: _period_format(x)) if period == 'RunDays': days = st.number_input(label='请输入天数', min_value=1, max_value=365) task.algo_period_days = days task.algo_period = period def select_weights(): weights = { 'WeightEqually': '等权分配', 'WeightFix': '固定权重', 'WeightERC': '风险平价' } def _weight_format(x): return weights[x] weight = st.selectbox(label='请选择权重分配', options=list(weights.keys()), format_func=lambda x: _weight_format(x)) if weight == 'WeightFix': fix_weigths = st.text_input(label='请输入权重(逗号分隔)', value='[]') task.algo_weight_fix = eval(fix_weigths) task.algo_weight = weight def add_features(): col1, col2 = st.columns(2) with col1: features = st.text_area(label='因子表达式') task.features = features.split('\n') with col2: feature_names = st.text_area(label='因子名称') task.feature_names = feature_names.split('\n') def buy_and_sell_rules(): col1, col2 = st.columns(2) with col1: buy_rules = st.text_area(label='买入规则') task.rules_buy = buy_rules.split('\n') with col2: sell_rules = st.text_area(label='卖出规则') task.rules_sell = sell_rules.split('\n') def order_by(): order_by = st.selectbox(label='排序因子', options=task.feature_names) task.order_by = order_by def backtest(): if st.button(label='开始回测'): e = Engine(task) e.run() df = e.get_df_equities() ratio = e.get_ratios(df) orders_df = e.get_orders_df() st.write(ratio) print(ratio) st.line_chart(df)
后端功能大重构进展比较顺利,后面还会有一些小细节的持续改进。
回归Quantlab,本周要发布的源代码版本是V3.7。
用户可以低代码创建自己的策略,进一步降低使用门槛。数据在服务下载,当然大家可以自行下载到本地。
ETF选择,可以检索名称或者symbol:
def select_funds():
def _select_funds_format(x):
return get_funds()[x]
symbols = st.multiselect(label='请选择基金:', options=list(get_funds().keys()), format_func=lambda x:_select_funds_format(x) )
st.write(symbols)
选择调仓周期:
def select_period(): periods = {'RunDaily': '每天运行', 'RunWeekly': '每周运行', 'RunMonthly': '每月运行', 'RunQuarterly': '每季度运行', 'RunYealy': '每年运行', 'RunDays': '自定义天数'} def _period_format(x): return periods[x] period = st.selectbox(label='请选择调仓周期', index=0, options=list(periods.keys()), format_func=lambda x: _period_format(x)) if period == 'RunDays': days = st.number_input(label='请输入天数', min_value=1, max_value=365) st.write('每{}天凋仓'.format(days)) st.write('您选择调仓周期:{}'.format(period))
我们来演示一个完整的流程:
年化10%其实真的挺容易的!
系统整体代码及数据下载:AI量化实验室——2024量化投资的星辰大海
因子挖掘
关于因子挖掘这条线,之前咱们发布DeepAlpha,DeepAlpha通用因子挖掘:支持GPlearn遗传算法和深度强化学习挖掘因子(代码+数据下载)
业界主流的两种机器挖因子的模式都涵盖了:遗传算法和深度强化学习。
不过底层使用了Qlib的数据存储。
很多同学问何时可以简化这部分处理,其实方案一直都有。但我当前却想跳过这一步。
为何?
无论是遗传算法还是强化学习,都是机器“暴力”搜索参考及函数空间,去寻找满足fitness的表达式。
在如此低信噪比的金融数据里,过拟合基本是定论。
不可解释性,不稳定性,导致这一块不好用。
所以,很多私募仍然在使用传统人工构造因子的逻辑。
我在想——有没有可能把二者结合起来呢?
直到看到这篇研报,之前分析过:研报拆解:大语言模型LLM和多智能体(Multi-Agents)实现量价因子挖掘框架
让大模型用Few-shot方式学习前人发布过的好的因子,解释这些因子。然后“仿写”,然后通过因子分析给出反馈,改进,这个持续迭代去优化和挖掘新的因子。——这是星球目前要尝试的方向,也代表着未来。
吾日三省吾身
做商业必环,用户价值为先。
用户要学习量化,学会量化,会用系统,获得策略,得到收益。
历史文章:
研报拆解:大语言模型LLM和多智能体(Multi-Agents)实现量价因子挖掘框架
年化29%,夏普比1.26:红利与创成长趋势轮动策略(代码+数据下载)
每日一策略:斜率动量与RSRS择时(代码+数据)以及基于Django的量化社区开发
AI量化策略商城核心逻辑实现——创业板动量择时策略为例(代码+数据)
AI量化平台产品化Quantlabv3.6发布:日拱一卒,功不唐捐。(更新优惠券)
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103474
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!