Files
claude_dev 3fbe6c9be5 feat: 纳入 VeighNa 4.4.0 上游源码作为版本参考
- 添加 vnpy_v4.4.0/ 目录到版本控制
- 删除嵌入的 .git 目录避免嵌套仓库
- 添加 README_SANGUO.md 说明来源和用途
- 更新 .gitignore 移除 vnpy_v4.4.0/ 忽略规则

上游代码信息:
- 项目: VeighNa 量化交易平台
- 版本: 4.4.0
- 来源: https://github.com/vnpy/vnpy

用途: 版本参考、代码学习、差异对比、离线开发

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 21:40:21 +08:00

65 lines
1.7 KiB
Python

"""
Cross Section Operators
"""
import polars as pl
from .utility import DataProxy
def cs_rank(feature: DataProxy) -> DataProxy:
"""Perform cross-sectional ranking"""
df: pl.DataFrame = feature.df.select(
pl.col("datetime"),
pl.col("vt_symbol"),
pl.col("data").rank().over("datetime")
)
return DataProxy(df)
def cs_mean(feature: DataProxy) -> DataProxy:
"""Calculate cross-sectional mean"""
df: pl.DataFrame = feature.df.select(
pl.col("datetime"),
pl.col("vt_symbol"),
pl.col("data").mean().over("datetime")
)
return DataProxy(df)
def cs_std(feature: DataProxy) -> DataProxy:
"""Calculate cross-sectional standard deviation"""
df: pl.DataFrame = feature.df.select(
pl.col("datetime"),
pl.col("vt_symbol"),
pl.col("data").std().over("datetime")
)
return DataProxy(df)
def cs_sum(feature: DataProxy) -> DataProxy:
"""Calculate cross-sectional sum"""
df: pl.DataFrame = feature.df.select(
pl.col("datetime"),
pl.col("vt_symbol"),
pl.col("data").sum().over("datetime")
)
return DataProxy(df)
def cs_scale(feature: DataProxy) -> DataProxy:
"""Scale the feature by the sum of absolute values in the cross section"""
abs_feature = abs(feature)
sum_abs = cs_sum(abs_feature)
df_merged: pl.DataFrame = feature.df.join(sum_abs.df, on=["datetime", "vt_symbol"], suffix="_sum")
df: pl.DataFrame = df_merged.with_columns(
pl.when(pl.col("data_sum") != 0)
.then(pl.col("data") / pl.col("data_sum"))
.otherwise(0)
.alias("data")
).select(["datetime", "vt_symbol", "data"])
return DataProxy(df)