创业板指布林带突破策略:年化12.8%,回撤20%+| Alphalens+streamlit单因子分析框架(代码+数据)

Quantlab3.3(这个版本兼容2.x主体,更简洁,性能更高,代码更易读,总之,建议大家尽快更新):

先上图——策略回测:

图片

图片

单因子分析(Alphalens-reloaded+streamlit整合):

图片

图片

1、底层重写:全自研回测。

2、支持streamlit gui:支持可视化回测、单因子分析。

3、带三大策略模板(大类资产配置,轮动和择时),附四个示例策略。

4、改造alphalens,并与streamlit进行整合,可方便进行单因子分析。

大家一定按照附件的目录结构,python3.9的环境。

安装 pip install -r requirements.txt。然后单独安装ta-lib:

pip install libs/TA_Lib-0.4.24-cp39-cp39-win_amd64.whl。

运行main.py即可。

图片

今日计划: 

1、静待花开策略。 

2、stock ranker 1.0代码(lightgbm l2r)实现。

今天同样来做一个轮动策略——静待花开。

发现在一些平台,这个策略的参数需要打赏才能获得了。之前写过,在3.3我们刷新一下:

“静待花开的聚宝盆”策略重构

def Rolling_flower():
    task = TaskRolling()
    task.name = '轮动策略-全球大类资轮动-静待花开'
    task.benchmark = '510300.SH'
    task.start_date = '20150115'
    task.symbols = [
    '511220.SH',  # 城投债
    '512010.SH',  # 医药
    '518880.SH',  # 黄金
    '163415.SZ',  # 兴全商业
    '159928.SZ',  # 消费
    '161903.SZ',  # 万家行业优选
    '513100.SH'  # 纳指
]  # 证券池列表

    task.features = ["因子" ]
    task.feature_names = ["因子名"]

    task.rules_buy = ['买入信号']
    task.rules_sell = ["卖出信号"]

    task.order_by = '排序因子'
    task.topK = 8
    return task

图片

年化13.9%,回撤15%。大家前往星球下载代码体验。

 

第2件事情,还实现StockRanker,为后续多因子机器学习做好准备。

def train(self, x_train, y_train, q_train, model_save_path):
    '''
    模型的训练和保存
    :param x_train:
    :param y_train:
    :param q_train:
    :param model_save_path:
    :return:
    '''

    train_data = lgb.Dataset(x_train, label=y_train, group=q_train)
    params = {
        'task': 'train',  # 执行的任务类型
        'boosting_type': 'gbrt',  # 基学习器
        'objective': 'lambdarank',  # 排序任务(目标函数)
        'metric': 'ndcg',  # 度量的指标(评估函数)
        'max_position': 10,  # @NDCG 位置优化
        'metric_freq': 1,  # 每隔多少次输出一次度量结果
        'train_metric': True,  # 训练时就输出度量结果
        'ndcg_at': [10],
        'max_bin': 255,
        # 一个整数,表示最大的桶的数量。默认值为 255lightgbm 会根据它来自动压缩内存。如max_bin=255 时,则lightgbm 将使用uint8 来表示特征的每一个值。
        'num_iterations': 200,  # 迭代次数,即生成的树的棵数
        'learning_rate': 0.01,  # 学习率
        'num_leaves': 31,  # 叶子数
        # 'max_depth':6,
        'tree_learner': 'serial',  # 用于并行学习,‘serial’:单台机器的tree learner
        'min_data_in_leaf': 30,  # 一个叶子节点上包含的最少样本数量
        'verbose': 2  # 显示训练时的信息
    }
    gbm = lgb.train(params, train_data, valid_sets=[train_data])  # 这里valid_sets可同时加入train_dataval_data
    gbm.save_model(model_save_path)

传统排序学习的代码都比较简洁,与分类和回归不同之处在于,排序学习还需要一个qtrain的数据。这个咱们明天细说。

昨天已经完成:

1、择时模板:带创业板动量策略1份。

2、stramlit gui,支持选择策略并回测。

今日计划: 

1、择时-通道突破策略。 

2、streamlit显示orders, trades,并检查结果。 

3、参考alphalens,引入单因子分析框架。

大家不必着急,按星球惯例,咱们是每周至少迭代一次,最晚明天更新代码。Quantlab3.3是值得期待的,全新架构与思路。

今天第一个任务是择时策略里,需要使用到talib的布林带:

def bbands_up(close, timeperiod=20, nbdevup=2, nbdevdn=2):
upper_band, middle_band, lower_band = talib.BBANDS(close, timeperiod=timeperiod, nbdevup=nbdevup, nbdevdn=nbdevdn)
return upper_band

def bbands_down(close, timeperiod=20, nbdevup=2, nbdevdn=2):
upper_band, middle_band, lower_band = talib.BBANDS(close, timeperiod=timeperiod, nbdevup=nbdevup, nbdevdn=nbdevdn)
return lower_band

使用咱们的策略模板,也非常简单:

def PickTime_bbands():
    task = TaskPickTime()
    task.name = '择时策略-创业板-布林带'
    task.benchmark = '159915.SZ'
    task.symbols = ["159915.SZ"]

    task.features = ["bbands_up(close,20,2)","bbands_down(close,20,2)"]
    task.feature_names = ["bbands_up","bbands_down"]

    task.rules_buy = ['close>bbands_up']
    task.rules_sell = ["close<bbands_down"]
    return task

运行结果如下:

图片

年化12.8%,回撤20%+,比基准还是好不少。

今天第2项工作把交易详情打印出来:

图片

今天的第3项工作——单因子分析框架:

传统量化主要基于规则,规则策略的优化空间就是——超参数优化,这个咱们后面会专项支持。当然机器学习模型驱动也需要超参数优化,这是通用的功能。

而AI量化的基础是——因子。

所以,我们开始建立因子分析框架。

Alphalens是比较成熟,当然现在已经年久失修的框架。

代码在datafeed/alphalens里:

图片

之前咱们也写过alphalens相关的文章:

因子特征工程:alphalens库深度解析

elif choose == "单因子分析":
    from config import DATA_DIR

    instru = DATA_DIR.joinpath('instruments')
    import os

    files = os.listdir(instru.resolve())
    filename = st.selectbox('请选择投资标的集合:', options=files)
    with open(instru.joinpath(filename).resolve(), 'r') as f:
        symbols = f.readlines()

    symbols = [s.replace('\n','') for s in symbols]
    st.write(symbols)
    factor_expr = st.text_input('请输入因子表达式', value='slope(close,20)')
    if st.button('加载数据并计算因子值'):
        from datafeed import CSVDataloader

        loader = CSVDataloader(DATA_DIR.joinpath('etfs'), symbols)
        df = loader.load(fields=[factor_expr], names=['factor_name'])
        factor_df = df[['symbol', 'factor_name']]
        factor_df.set_index([factor_df.index, 'symbol'], inplace=True)
        close_df = df.pivot_table(values='close', index='date', columns='symbol')
        st.write(factor_df)
        st.write(close_df)

        from datafeed.alphalens.utils import get_clean_factor_and_forward_returns
        results = get_clean_factor_and_forward_returns(factor_df, close_df)
        st.write(results)

        from datafeed.alphalens.streamit_tears import create_full_tear_sheet
        create_full_tear_sheet(results)

加载因子值,和收盘价:

图片

图片

图片

代码在最后检查中,最晚明天提交至星球。

择时策略:年化19.7%,回测18.8%——创业板指数动量择时策略(最优超参数是如何优化的)。

还有3位同学加入后就涨价了。

【就要提价了,进度93%】AI量化实验室——2024量化投资的星辰大海

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

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

相关推荐

发表回复

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