File tree 1 file changed +7
-6
lines changed
1 file changed +7
-6
lines changed Original file line number Diff line number Diff line change @@ -692,7 +692,7 @@ def neutralize_single_factor(f_name: str) -> pd.Series:
692
692
return pd .concat ([data_neu , concat_data [other_cols ]], axis = 1 )
693
693
694
694
695
- def market_neutralize (x : pd .Series ) -> pd .Series :
695
+ def market_neutralize (x : pd .Series , long_only = False ) -> pd .Series :
696
696
"""
697
697
市场组合中性化:
698
698
(1) 对所有股票减去其截面上的因子均值
@@ -703,16 +703,17 @@ def market_neutralize(x: pd.Series) -> pd.Series:
703
703
"""
704
704
mean = x .groupby (level = 0 ).mean ()
705
705
x -= mean
706
- abs_sum = abs (x ).groupby (level = 0 ).sum ()
706
+ if long_only : # 考虑到A股有做空限制, 因此将权重为负的股票(即做空的股票)的权重调整为0(即纯多头), 并相应调整多头的权重
707
+ x [x .values < 0 ] = 0
708
+ abs_sum = x [x .values > 0 ].groupby (level = 0 ).sum ()
709
+ else :
710
+ abs_sum = abs (x ).groupby (level = 0 ).sum ()
707
711
x /= abs_sum
708
712
return x
709
713
710
714
711
715
def get_factor_portfolio (feature : pd .Series , label : pd .Series , long_only : bool = False ) -> pd .Series :
712
- x_neu = market_neutralize (feature )
713
- if long_only :
714
- x_neu [x_neu < 0 ] = 0 # 考虑到A股有做空限制, 因此将权重为负的股票(即做空的股票)的权重调整为0(即纯多头)
715
- x_neu *= 2
716
+ x_neu = market_neutralize (feature , long_only = long_only )
716
717
X = pd .DataFrame ({"feature" : x_neu , "label" : label })
717
718
X .dropna (inplace = True )
718
719
X ["factor_return" ] = X ["feature" ] * X ["label" ]
You can’t perform that action at this time.
0 commit comments