社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

年化25.7%,通过斜率拟合度对全球核心ETF评分策略在线上可查看参数(python代码+数据)

七年实现财富自由 • 2 月前 • 90 次点击  
原创内容第811篇,专注量化投资、个人成长与财富自由。
今天是星球一周一度发布代码和日子:
aitraderv4.5,重点更新,
1、EPO仓位管理优化算子
2、本周提及的策略
3、ETF历史数据更新到最新。
4、其他一些问题修复。
代码+数据下载地址:AI量化实验室——2025量化投资的星辰大海
今天再发布一个“会员专属”的策略,是个人比较喜欢的。
年化25.7%。
通过界面查看参数:
重点是这个排序规则:
看似简单的参数,其实是代码里我们做了大量的工作:
@calc_by_symbol
def trend_score(closeperiod=25):
    """
    向量化计算趋势评分:年化收益率 × R平方
    :param close: 收盘价序列(np.arraypd.Series
    :param period: 计算窗口长度,默认25
    :return趋势评分数组,长度与输入相同,前period-1位为NaN
    """
    if len(close) < period:
        return np.full_like(closenp.nan)

    y = np.log(close)
    windows = np.lib.stride_tricks.sliding_window_view(ywindow_shape=period)
    x = np.arange(period)

    预计算固定值
    n = period
    sum_x = x.sum()
    sum_x2 = (x ** 2).sum()
    denominator = n * sum_x2 - sum_x ** 2

    滑动窗口统计量
    sum_y = windows.sum(axis=1)
    sum_xy = (windows * x).sum( axis=1)

    回归系数
    slope = (n * sum_xy - sum_x * sum_y) / denominator
    intercept = (sum_y - slope * sum_x) / n

    年化收益率
    annualized_returns = np.exp(slope * 250) - 1

    # R平方计算
    y_pred = slope[:, None] * x + intercept[:, None]
    residuals = windows - y_pred
    ss_res = np.sum(residuals ** 2axis=1)

    sum_y2 = np.sum(windows ** 2axis=1)
    ss_tot = sum_y2 - (sum_y ** 2) / n
    r_squared = - (ss_res / ss_tot)
    r_squared = np.nan_to_num(r_squarednan=0.0)  处理零方差情况

    综合评分
    score = annualized_returns * r_squared

    对齐原始序列长度
    full_score = np.full_like(ynp.nan)
    full_score = pd.Series(index=close.index)
    full_score[period - 1:] = score
    return full_score

整体策略运行的代码,在这里:
from bt_algos_extend import TaskEngine


def ranking_ETFs():
    t = Task()
    t.name = '基于ETF历史评分的轮动策略'
    排序
    t.period = 'RunDaily'
    t.weight = 'WeighEqually'
    t.order_by_signal = 'trend_score(close,25)'
    t.start_date = '20180101'
    #t.end_date = '20240501'

    t.symbols = [
        '518880.SH',  黄金ETF(大宗商品)
        '513100.SH',  纳指100(海外资产)
        '159915.SZ',  创业板100(成长股,科技股,中小盘)
        '510180.SH',  上证180(价值股,蓝筹股,中大盘)
    ]
    t.benchmark = '510300.SH'
    return t

res = Engine().run(ranking_ETFs())
import matplotlib.pyplot as plt
print(res.stats)
from matplotlib import rcParams

rcParams['font.family'] = 'SimHei'
#res.plot_weights()
res.prices.plot()
plt.show()
吾日三省吾身
人生,唯有自渡。
不如意事常八九,可与人言无二三。
代码和数据下载:AI量化实验室——2025量化投资的星辰大海

AI量化实验室 星球,已经运行三年多,1500+会员。

aitrader代码,因子表达式引擎、遗传算法(Deap)因子挖掘引等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)
deap系统重构,再新增一个新的因子,年化39.1%,卡玛提升至2.76(附python代码)

低风险中等收益(年化15.59%,夏普比1.12)的投资策略,主要投资于小市值股票和基金(python代码+数据)

aitrader_v4.4含本周策略及代码发布,webapp上线。(python代码及数据)

近五年年化23%,最大回撤14.26%,基于历史评分因子和EPO优化权重的ETF轮动策略(python代码+数据)

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/179609
 
90 次点击