3fbe6c9be5
- 添加 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>
44 lines
1.2 KiB
Python
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)
|