原创内容第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 ( 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 ) d: dict = locals() for column in df.columns: if column in {"date", "symbol"}: continue column_df = df[["date", "symbol", column]] d[column] = DataProxy(column_df) other: DataProxy = eval(expression, {}, d) 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: file_path: Path = folder_path.joinpath(f"{s}.csv") if not file_path.exists(): logger.error(f"File {file_path} does not exist") continue df: pl.DataFrame = pl.read_csv(file_path,dtypes={'date': pl.Utf8}) print(df) df = df.filter((pl.col("date") >= start) & (pl.col("date") <= end)) 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), ) if
df.is_empty(): continue dfs.append(df) 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')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可查看。
市场这么震荡着,大类资产配置,持续全仓进行,低买高卖。“低估分散不深研”,对于普通人其实真的是有道理的。但很多人总指望以小博大,违背的投资之道,也违背资本市场之本意。当然我这里主要说的是主观交易,如果是量化投资另当别论。量化投资,用机器和算法执行规则,就算换取流动性,那也是有价值的,本身也是一种被动收入。但盯盘炒股的普通人,确实理解不了。——为啥不做量化呢?帮忙普通人,真正上手量化投资,投资应该简单且愉快的事情。我们提供工具,工具即服务。也提供代码,有研发能力的同学可以拿代码继续修改。vnpy最新的代码,类似于插件化的架构,代码可读性还是挺好的,而且性能不错,比backtrader快不少。代码和数据下载:AI量化实验室——2025量化投资的星辰大海AI量化实验室 星球,已经运行三年多,1600+会员。
aitrader代码,因子表达式引擎、遗传算法(Deap)因子挖掘引擎等,支持vnpy,qlib,backtrader和bt引擎,内置多个年化30%+的策略,每周五迭代一次,代码和数据在星球全部开源。