原创内容第859篇,专注智能量化投资、个人成长与财富自由。vnpy新版的alpha模块挺好的。
咱们之前也是参考qlib的因子表达式,设计了自己的因子库。
不过我们是基于pandas来做的,vnpy这一版是根据polors,rust的库,性能更好。而且的alpha158复现了。同时拆出了最经典的线性,梯度提升树以及深度模型。值得分析一下。
核心代码我实现了一下,并用直接读我本地的csv:
import polars as pl
from datetime import datetime
from pathlib import Path
from alpha.dataset.utility import DataProxy
from assets import logger
from loguru import logger
def 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.df
def 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_df
from config import DATA_DIR_QUOTES
df = 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%+的策略,每周五迭代一次,代码和数据在星球全部开源。