Files
sanguo_vnpy_v2/vnpy_v4.4.0/vnpy/alpha/dataset/ta_function.py
T
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

44 lines
1.2 KiB
Python

"""
Technical Analysis Operators
"""
import talib
import polars as pl
import pandas as pd
from .utility import DataProxy
def to_pd_series(feature: DataProxy) -> pd.Series:
"""Convert to pandas.Series data structure"""
series: pd.Series = feature.df.to_pandas().set_index(["datetime", "vt_symbol"])["data"]
return series
def to_pl_dataframe(series: pd.Series) -> pl.DataFrame:
"""Convert to polars.DataFrame data structure"""
df: pl.DataFrame = pl.from_pandas(series.reset_index().rename(columns={0: "data"}))
return df
def ta_rsi(close: DataProxy, window: int) -> DataProxy:
"""Calculate RSI indicator by contract"""
close_: pd.Series = to_pd_series(close)
result: pd.Series = talib.RSI(close_, timeperiod=window) # type: ignore
df: pl.DataFrame = to_pl_dataframe(result)
return DataProxy(df)
def ta_atr(high: DataProxy, low: DataProxy, close: DataProxy, window: int) -> DataProxy:
"""Calculate ATR indicator by contract"""
high_: pd.Series = to_pd_series(high)
low_: pd.Series = to_pd_series(low)
close_: pd.Series = to_pd_series(close)
result: pd.Series = talib.ATR(high_, low_, close_, timeperiod=window) # type: ignore
df: pl.DataFrame = to_pl_dataframe(result)
return DataProxy(df)