研报复现:期货截面遗传算法因子挖掘 | 创业板布林带策略(年化13.2%)

原创文章第621篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。

这篇研报,已经在星球同步,代码(明天周五)提交

图片

原研报是自己改进了gplearn,我使用deap框架来做

1、整理41支期货的主连合约数据:

图片

2、函数算子实现:

图片

图片

算子分为几类:

一元非滑动类,这类最简单,直接使用np的函数就可以了,代码在expr_unary.py里。

然后一元滑动类的函数很多——主要都是时间序列滑动窗口(rolling)的统计类,比如均值,中位数,偏度,峰度,最大,最小值,排序等等。

import numpy as np
import pandas as pd
from .expr_utils import calc_by_symbol, calc_by_date


@calc_by_symbol
def ts_delay(se: pd.Series, periods=5):  # 滞后N天的序列
    return se.shift(periods=periods)


@calc_by_symbol
def ts_delta(se: pd.Series, periods=20):  # 当前序列与滞后N天之差
    se_result = se - se.shift(periods=periods)
    return se_result


@calc_by_symbol
def ts_mean(se: pd.Series, d):
    return se.rolling(window=d).mean()


@calc_by_symbol
def ts_median(se: pd.Series, d):
    return se.rolling(window=d).median()


@calc_by_symbol
def ts_pct_change(se: pd.Series, N):
    return se / se.shift(N) - 1


@calc_by_symbol
def ts_max(se: pd.Series, periods=5):
    return se.rolling(window=periods).max()


@calc_by_symbol
def ts_min(se: pd.Series, periods=5):
    return se.rolling(window=periods).min()


@calc_by_symbol
def ts_maxmin(X, d):
    return (X - ts_min(X, d)) / (ts_max(X, d) - ts_min(X, d))


@calc_by_symbol
def ts_sum(se: pd.Series, N):
    ret = se.rolling(N).sum()
    return ret


@calc_by_symbol
def ts_std(se, periods=5):
    return se.rolling(window=periods).std()


@calc_by_symbol
def ts_skew(X, d):
    return X.rolling(window=d).skew()


@calc_by_symbol
def ts_kurt(X, d):
    return X.rolling(window=d).kurt()


@calc_by_symbol
def ts_argmin(se: pd.Series, periods=5):
    return se.rolling(periods, min_periods=2).apply(lambda x: x.argmin())


@calc_by_symbol
def ts_argmax(se: pd.Series, periods=5):
    return se.rolling(periods, min_periods=2).apply(lambda x: x.argmax())


@calc_by_symbol
def ts_argmaxmin(X, d):
    return ts_argmax(X, d) - ts_argmin(X, d)


@calc_by_symbol
def ts_rank(se: pd.Series, periods=9):
    ret = se.rolling(window=periods).rank(pct=True)
    return ret

# @calc_by_symbol
# def ts_product(se: pd.Series, d):
#     return se.rolling(window=d).apply(np.product)
#
#

迭代结果:

图片

写了个notebook在这里:

图片

最终挖掘出来的因子如下图示(大家可以自行增减算子函数):

图片

代码下载:AI量化实验室——2024量化投资的星辰大海

01 每日策略

今天我们来配置一个经典的策略——创业板布林带策略

我们实现两个指标:布林带上下轨,使用内置的函数bbands_up(close,20), bbands_down(close,20)即可。

然后交易信号分别为:bbands_up>close, close<bbands_down。

已经发布到服务器:

图片

图片

03 Deap因子挖掘——单因子分析

Alpha5的因子表达式为ts_dema(ts_median(ts_cov(open, volume,21),21),15),它同样可以归属为量价相关性类因子。

它描述了开盘价与成交量的相关性中枢的移动平均水平。

图片

按研报的计算,是得不到相应的结果的:

没有单调性

图片

图片

IC值是负向的,但IC不显著:

图片

而且,你换个时间区间,得出的结果差异性会很大,比如你从20100101来始算,或者结束时间算到当下最新,结果都会不一样。

——金融量化,并不是一门严格的科学。

历史文章:

看《逆行人生》,你应该了解的财务安全与财务自由逻辑

长期年化收益45.9%:兼顾高成长与低波动的趋势轮动策略(附python代码)

AI量化实验室——2024量化投资的星辰大海

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值