Py学习  »  Python

策略的年化又创新高,近两年达290%,在qmt及掘金平台均有复现代码,交叉验证没有未来函数(python策略代码下载)

七年实现财富自由 • 7 月前 • 160 次点击  
原创内容第859篇,专注智能量化投资、个人成长与财富自由。

vnpy新版的alpha模块挺好的

咱们之前也是参考qlib的因子表达式,设计了自己的因子库。

不过我们是基于pandas来做的,vnpy这一版是根据polors,rust的库,性能更好。而且的alpha158复现了。同时拆出了最经典的线性,梯度提升树以及深度模型。值得分析一下。

核心代码我实现了一下,并用直接读我本地的csv:

import polars as plfrom datetime import datetimefrom pathlib import Pathfrom alpha.dataset.utility import DataProxyfrom assets import loggerfrom loguru import loggerdef calculate_by_expression(df: pl.DataFrame, expression: str) -> pl.DataFrame:    from alpha.dataset.ts_function import (  # noqa        ts_delay,        ts_min, ts_max,        ts_argmax, ts_argmin,        ts_rank, ts_sum,        ts_mean, ts_std,        ts_slope, ts_quantile,        ts_rsquare, ts_resi,        ts_corr,        ts_less, ts_greater,        ts_log, ts_abs    )    # Extract feature objects to local space    d: dict = locals()    for column in df.columns:        # Filter index columns        if column in {"date""symbol"}:            continue        # Cache feature df        column_df = df[["date""symbol", column]]        d[column] = DataProxy(column_df)    # Use eval to execute calculation    other: DataProxy = eval(expression, {}, d)    # Return result DataFrame    return other.dfdef load_df_from_csvs(folder_path: Path, symbols: list[str], start: datetime | str,                      end: datetime | str):    dfs: list = []    for s in symbols:        # Check if file exists        file_path: Path = folder_path.joinpath(f"{s}.csv")        if not file_path.exists():            logger.error(f"File {file_path} does not exist")            continue        # Open file        df: pl.DataFrame = pl.read_csv(file_path,dtypes={'date': pl.Utf8})        print(df)        # Filter by date range        df = df.filter((pl.col("date") >= start) & (pl.col("date") <= end))        # Specify data types        df = df.with_columns(            pl.col("open").cast(pl.Float32),            pl.col("high").cast(pl.Float32),            pl.col("low").cast(pl.Float32),            pl.col("close").cast(pl.Float32),            pl.col("volume").cast(pl.Float32),        )        # Check for empty data        if


    
 df.is_empty():            continue        dfs.append(df)    # Concatenate results    result_df: pl.DataFrame = pl.concat(dfs)    return result_dffrom config import DATA_DIR_QUOTESdf = load_df_from_csvs(DATA_DIR_QUOTES, symbols=['510300.SH','159915.SZ'],start='20100101',end='20250417')print(df)result = calculate_by_expression(df, 'close/ts_delay(close,5)-1')#df = result.to_pandas()#df.sort_values(by='date', ascending=True, inplace=True)print(result)

计算还是比较优雅的,

def ts_delay(feature: DataProxy, window: int) -> DataProxy:    """Get the value from a fixed time in the past"""    df: pl.DataFrame = feature.df.select(        pl.col("date"),        pl.col("symbol"),        pl.col("data").shift(window).over("symbol")    )    return DataProxy(df)

over比groupby更优雅,类似大数据里的patition。

网站上策略计算已经更新:

有同学的策略达到290%了。

http://ailabx.com/mall可查看。

市场这么震荡着,大类资产配置,持续全仓进行,低买高卖。
跌时赚股,涨时赚钱。——这才是最稳妥的。
“低估分散不深研”,对于普通人其实真的是有道理的。
但很多人总指望以小博大,违背的投资之道,也违背资本市场之本意。
当然我这里主要说的是主观交易,如果是量化投资另当别论。
量化投资,用机器和算法执行规则,就算换取流动性,那也是有价值的,本身也是一种被动收入。
但盯盘炒股的普通人,确实理解不了。——为啥不做量化呢?
“AI量化实验室“星球就是这么一个初心。
帮忙普通人,真正上手量化投资,投资应该简单且愉快的事情。
在做量化的人眼中,压根不需要”全职“。
我们提供工具,工具即服务。也提供代码,有研发能力的同学可以拿代码继续修改。
vnpy最新的代码,类似于插件化的架构,代码可读性还是挺好的,而且性能不错,比backtrader快不少。
核心工程代码量挺小,其余模块都是按需导入。
代码和数据下载:AI量化实验室——2025量化投资的星辰大海

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

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

扩展  •  历史文章   

EarnMore(赚得更多)基于RL的投资组合管理框架:一致的股票表示,可定制股票池管理。(附论文+代码)

年化收益200%+的策略集 | 实时板块资金热力图 「aitrader 5.0系统代码发布」

年化19.66%,回撤12%的稳健策略|manus的启发:基于大模型多智能体的智能投研系统(python代码+数据)

年化30.24%,最大回撤19%,综合动量多因子评分策略再升级(python代码+数据)

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

stock-pandas,一个易用的talib的替代开源库。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181240