Files
NewStock/main/utils/__pycache__/indicators.cpython-313.pyc

42 lines
4.3 KiB
Plaintext
Raw Normal View History

2025-06-05 20:21:01 +08:00
<EFBFBD>
<00>6AhO<00> <00><><00>SSKrSSKrSS\R"S5S4S\R
S\S\S \S
\S \R
4 S jjrg) <0A>N<>g{<14>G<EFBFBD>z<EFBFBD>?<3F><><00><00>df<64>N_days<79>risk_free_rate_annual<61>annualization_factor<6F>min_periods_for_std<74>returnc<00><>^^^^^ <09>UnURSS/S9nURS5SR5US'US- m UU U4SjmUU4SjnURSS S
9RU5nU$) u<>
高效计算每只股票在每个交易日未来 N 日的年化夏普比率和索提诺比率作为训练的Label。
函数会获取未来 N 天的每日收益率序列,并基于此序列计算夏普/索提诺。
Args:
df (pd.DataFrame): 输入 DataFrame需包含 'ts_code', 'trade_date', 'close' 列。
'close' 列必须是股票收盘价。
N_days (int): 未来考察的天数。例如N_days=5 表示考察未来5个交易日。
risk_free_rate_annual (float): 年化无风险利率。
annualization_factor (float): 用于将日收益率转化为年化收益率的因子 (例如 np.sqrt(252))。
min_periods_for_std (int): 计算标准差所需的最小有效数据点数。
如果未来N天有效数据少于此值则 Label 为 NaN。
Returns:
pd.DataFrame: 原始DataFrame新增 'sharpe_ratio_label' 和 'sortino_ratio_label' 列。
注意:数据末尾 N_days 行的 Label 将为 NaN。
<EFBFBD>ts_code<64>
trade_date)<01>by<62>closezp c trc<00><>><03>[UR55T
:a [R[R4$UT -
nUR 5nUR 5n[RnUS:waX#- T-nXT :n[RnUR (d=[R"[R"UT -
S-55nUS:waX'- T-nXF4$)u<>
辅助函数:计算单个滚动窗口内的夏普和索提诺比率。
这个函数将被 apply 调用于每个 (N_days) 收益率序列。
rr)<08>len<65>dropna<6E>np<6E>nan<61>mean<61>std<74>empty<74>sqrt) <0B>returns_series<65>excess_returns<6E>mean_excess_return<72>std_dev_returns<6E>sharpe<70>downside_returns<6E>sortino<6E>downside_deviationr <00>daily_risk_free_rater
s <20><><EFBFBD><EFBFBD>2/mnt/d/PyProject/NewStock/main/utils/indicators.py<70>_calculate_metrics_for_window<6F>Pcalculate_sharpe_sortino_labels_efficient.<locals>._calculate_metrics_for_window's<><00><><00>
<0F>~<7E>$<24>$<24>&<26> '<27>*=<3D> =<3D><15>6<EFBFBD>6<EFBFBD>2<EFBFBD>6<EFBFBD>6<EFBFBD>><3E> !<21>'<27>*><3E>><3E><0E>,<2C>0<>0<>2<><1A>(<28>,<2C>,<2C>.<2E><0F><13><16><16><06> <1A>a<EFBFBD> <1F>(<28>:<3A>>R<>R<>F<EFBFBD>*<2A>;O<>*O<>P<><18><14>&<26>&<26><07><1F>%<25>%<25>!#<23><17><17><12><17><17>2B<32>EY<45>2Y<32>\]<5D>1]<5D>)^<5E>!_<> <1E>!<21>Q<EFBFBD>&<26>-<2D>B<>FZ<46>Z<><07><15><EFBFBD><1E>c<00>>><02>[R/[U5-n[R/[U5-n[[U5T-
5H>nUSRUS-US-T-R 5nT"U5upVXQU'XbU'M@ XS'X S'U$)ui
对单只股票的数据帧进行处理,计算其每个日期的未来 N 日夏普/索提诺比率。
<EFBFBD>pct_chg<68><00>sharpe_ratio_label<65>sortino_ratio_label)rrr<00>range<67>ilocr) <09>stock_df_group<75> sharpe_labels<6C>sortino_labels<6C>i<>future_pct_chgsrr rr$s <20><>r#<00>_apply_metrics_per_stock<63>Kcalculate_sharpe_sortino_labels_efficient.<locals>._apply_metrics_per_stockds<><00><><00><1C><16><16><08>3<EFBFBD>~<7E>#6<>6<> <0A><1C>&<26>&<26><18>C<EFBFBD><0E>$7<>7<><0E><17>s<EFBFBD>><3E>*<2A>V<EFBFBD>3<>4<>A<EFBFBD>-<2D>Y<EFBFBD>7<><<3C><<3C>Q<EFBFBD>q<EFBFBD>S<EFBFBD>1<EFBFBD>Q<EFBFBD>3<EFBFBD>v<EFBFBD>:<3A>N<>U<>U<>W<>O<EFBFBD><<3C>O<EFBFBD>L<>O<EFBFBD>F<EFBFBD> &<26>!<21> <1C> '<27>1<EFBFBD> <1D>5<>0=<3D>+<2B>,<2C>0><3E>,<2C>-<2D><1D>r&F)<01>
group_keys)<04> sort_values<65>groupby<62>
pct_change<EFBFBD>apply)
rrrr r
<00>df_copyr3<00> df_resultr$r"s
` `` @@r#<00>)calculate_sharpe_sortino_labels_efficientr<s<><00><><00>0<11>G<EFBFBD><16>!<21>!<21>i<EFBFBD><1C>%><3E>!<21>?<3F>G<EFBFBD><1F><EFBFBD><EFBFBD>y<EFBFBD>1<>'<27>:<3A>E<>E<>G<>G<EFBFBD>G<EFBFBD><14>1<>3<EFBFBD>6<><18><1F>z<1E>2<18><0F><0F> <09>e<EFBFBD><0F><<3C>B<>B<>C[<5B>\<5C>I<EFBFBD>
<15>r&) <09>pandas<61>pd<70>numpyrr<00> DataFrame<6D>int<6E>floatr<<00>r&r#<00><module>rDsm<00><01><13><12><14>#'<27>"$<24>'<27>'<27>#<23>,<2C> <20> ~<15>
<EFBFBD> <0C> <0C>~<15> <0F>~<15>!<21>~<15> <20> ~<15>
<1D> ~<15> <08>\<5C>\<5C> ~r&