Files
NewStock/main/factor/__pycache__/factor.cpython-310.pyc

51 lines
14 KiB
Plaintext
Raw Normal View History

2025-04-28 11:02:52 +08:00
o
s<>g\<00>@s,ddlZddlZddlZdd<03>Zdd<05>ZdS)<06>Nc!sH |j<00><01>dd<00><00>|jddgd<03>}|jddd<05>}d}|d|d|d |d
|d <|d |d ||d <|d|d|d<|d|d |d<|d|d t<04>|d <00>|||d<|d|d|d|d<|d|d|d||d<|d<00>d<15>|d<|d <00>d<15>|d<|d<00>d<15>|d<|d|d|d||d<|d|d|d||d<|d|d |d|}|d!t<04>d"|<03>|d#<|d <00>d<15>d$|d%<|d|d&k|d!d'k@|d|d k|d!d(k@|d|dk|d!d)k@|d|dk|d!d)k@g}gd*<2A>}tj ||d"d+<2B>|d,<|d|d k|d|dk@}|d |<06>
t <0B>|d-<|d!d.k<04>
t <0B>}|d ||d/<gd0<64>}d1} |d2d"k<04>
t <0B>|d3<|d2d"k<00>
t <0B>|d4<|d2d"k<04>
t <0B>|d5<|d2<00> |d2d"kd"<22>|d6<|d2<00> |d2d"kd"<22>|d7<t<04> |d6<00>|d8<t<04> |d7<00>|d9<|d3j| td| d:<00>d;<3B><02><10>}
|d6j| td| d:<00>d;<3B><02><10>} |d8j| td| d:<00>d;<3B><02><10>} |d4j| td| d:<00>d;<3B><02><10>} |d7j| td| d:<00>d;<3B><02><10>}|d9j| td| d:<00>d;<3B><02><10>}| |
}| |
}|t<04> |<11>}|<12> |
d:ktj<11>jd"d<<3C>}t<04>|<12>}|| }|| }|t<04> |<15>}|<16> | d:ktj<11>jd"d<<3C>}t<04>|<16>}|jd"d=d><3E>|d?<|jd"d=d><3E>|d@<|d?|d@|dA<|dA<00>tjtj gtj<11><02>d"<22>|dA<|d2jdBdC<64><01><18>jd"d=dD<64>|dE<|d2jdBdC<64><01><19>jd"d=dD<64>|dF<|d jd:dC<64><01><1A>|d jdGdC<64><01><1A>djd"d=d><3E>|dH<|d jdBdC<64><01><0F>jd"d=d><3E>}|d |k|dI<|dJjdKdC<64><01><1A>jd"d=d><3E>}|dJjdKdC<64><01><1B>jd"d=d><3E>}|dJ|||dL<|dJ|d:|k|dM<|dNjdKdC<64><01><1A>jd"d=d><3E>|dO<|dNjdBdC<64><01><0F>jd"d=d><3E>}|dN|k|dP<|<01>dQdR<64><00>|dS<|d <00><08>jdBdC<64><01><1B>|dT<|<01>dUdR<64><00>|dV<|<01>dWdR<64><00>|dX<|<01>dYdR<64><00>|dZ<t|j<00>|<01>d[dR<64><00>|d\<|<01>d]dR<64><00>|d^<|d<00>d_dR<64><00>|d`<|d<00>dadR<64><00>|db<|d<00>dcdR<64><00>|dd<|d<00>dedR<64><00>|df<|d<00>dgdR<64><00>|dh<|d<00>didR<64><00>|dj<|d<00>dkdR<64><00>|dl<|d<00>dmdR<64><00>|dn<|d<00>dodR<64><00>|dp<|dj<00>dqdR<64><00>|dr<|dl<00>dsdR<64><00>|dt<|dn<00>dudR<64><00>|dv<|dp<00>dwdR<64><00>|dx<|jddd<05>drjdd=dy<64>|dz<|jddd<05>dtjdd=dy<64>|d{<|jddd<05>dvjdd=dy<64>|d|<t<04>|d}<00>|d~<dB<64>d1<64>dB<64><02>fdd<7F><64>}|<01>|<1C>|d<><<00>fd<>d<EFBFBD><64>}|<01>|<1D>|d<><<00>fd<>d<EFBFBD><64>}|<01>|<1E>|d<><|<00>d<02>d<>jd=d<><64>|d<><d<>|d<>|d<>|d<><t<04> |d<>|d<>k|d|d<>|d<>|d<>d"<22>|d<><|<01>d<>dR<64><00>|d<><|jddd<05>d<>jd=d=dy<64>|d<><|d<00> d<>dR<64><00>|d<><|jddd<05>d<>jd=d=dy<64>|d<><|d|d<>k|d<><|d|d<>k|d<><|d<>jdGdd<><64><02><10>jd"d=d><3E>|d<><|d<>jdGdd<><64><02><10>jd"d=d><3E>|d<><d<>d<EFBFBD><64><00>|d<><00><1C>fd<>dR<64><08>|d<><t<04> |d|d&k|dNd:k@dd"<22>|d<><|d<00>d<>dR<64><00>|d<><d<>d<EFBFBD><64>}|<01>|<1F>|d<><d|d~|d&|d |d<><|d<00>d<>dR<64><00>|d<><|d<>|d<00> d<>dR<64><00>|d<><|<01>d<>dR<64><00>|d<><|d|dd|d <00> d<>dR<64><00>|d<><|dJ<00> d<>dR<64><00>|d<><|<01>d<>dR<64><00>|d<><|d jd1d<31><64>|d<><|d<>|d~|d<><|<01>d<>dR<64><00>|d<><|d<00>!d<15>|d<><|d<>|d<>jd"d<<3C>|d<><|d<>|d<>jd"d<<3C>|d<><|<01>d<>dR<64><00>|d<><|d<>|d<>|d<><|j"gd<><64>d=d<><64>|j"d<>gd=d<>d<EFBFBD><64>|j"gd<><64>d=d<>d<EFBFBD><64><00>fd<>|j<00><01>dd<00>D<00>} || fS)<29>N<EFBFBD>ts_code<64>
trade_date<EFBFBD>ZbyF)Z
group_keysg:<3A>0<EFBFBD><30>yE><3E>
buy_lg_vol<EFBFBD> buy_elg_vol<6F> sell_lg_vol<6F> sell_elg_vol<6F>lg_elg_net_buy_vol<6F>volZflow_lg_elg_intensity<74>
buy_sm_vol<EFBFBD> sell_sm_vol<6F>sm_net_buy_volZflow_divergence_diffZflow_divergence_ratio<69> total_buy_vol<6F>lg_elg_buy_prop<6F>Zflow_struct_buy_change<67>lg_elg_net_buy_vol_changeZflow_lg_elg_accel<65>
cost_95pct<EFBFBD> cost_5pct<63>closeZchip_concentration_range<67>
weight_avg<EFBFBD>
cost_50pctZ chip_skewness<73>
cost_15pct<EFBFBD> winner_raterZfloating_chip_proxy<78>dZcost_support_15pct_change<67>
cost_85pctg<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F><00>?)r<00><00><00>)<01>defaultZcat_winner_price_zoneZflow_chip_consistency<63>ffffff<66>?Zprofit_taking_vs_absorb)r r rrrZ"flow_lg_elg_intensity_rolling_highZ!flow_lg_elg_intensity_rolling_low<6F><00>pct_chg<68> _is_positive<76> _is_negativeZcat_is_positive<76> _pos_returns<6E> _neg_returns<6E>_pos_returns_sq<73>_neg_returns_sqr)<01> min_periods)<01>lowerT)<02>level<65>drop<6F>
upside_vol<EFBFBD> downside_volZ vol_ratio<69><00><01>window)r,Z return_skewZreturn_kurtosis<69>
<00>volume_change_rateZcat_volume_breakout<75> turnover_rater<00>turnover_deviationZcat_turnover_spike<6B> volume_ratioZavg_volume_ratioZcat_volume_ratio_breakoutcSstj|d<00>d<02><01><03>|jd<03>S)Nr
r!<00><01>index)<05>pd<70>Series<65>rolling<6E>meanr8<00><01>x<>r?<00>+E:\PyProject\NewStock\code\factor\factor.py<70><lambda><3E>sz$get_rolling_factor.<locals>.<lambda><3E> vol_spikeZ vol_std_5cS<00>0tjtj|dj|dj|djdd<05>|jd<06>S)N<>high<67>lowr<00><00>Z
timeperiodr7<00>r9r:<00>talibZATR<54>valuesr8r=r?r?r@rA<00><00>&<06><>atr_14cSrC)NrDrEr<00>rGr7rHr=r?r?r@rA<00>rKZatr_6cSs$tjt<02>|dj|dj<04>|jd<03>S)Nrr
r7)r9r:rIZOBVrJr8r=r?r?r@rA<00><00>$<00>obvcS<00> tjtj|djdd<03>|jd<04>S)NrOrMrGr7)r9r:rIZSMArJr8r=r?r?r@rA<00><00> <00>maobv_6cSrP)NrrrGr7)r9r:rIZRSIrJr8r=r?r?r@rA<00>rQZrsi_3cS<00>||<00>d<01>dS)Nr/r<00><01>shiftr=r?r?r@rA<00><00>Zreturn_5cSrS)Nr!rrTr=r?r?r@rA<00>rVZ return_20cS<00>|<00><00>jdd<02><01><02>S)Nr/r0<00><03>
pct_changer;<00>stdr=r?r?r@rA<00><00><00> std_return_5cSrW)N<>Zr0rXr=r?r?r@rA<00>r[<00> std_return_90cSs|<00>d<01><01><01>jdd<03><01><03>S)Nr2r]r0)rUrYr;rZr=r?r?r@rA<00><00><00>std_return_90_2cS<00>tjtj|jdd<02>|jd<03>S)Nr/rGr7<00>r9r:rI<00>EMArJr8r=r?r?r@rA<00><00>Z_ema_5cSra)N<> rGr7rbr=r?r?r@rA<00>rdZ_ema_13cSra)Nr!rGr7rbr=r?r?r@rA<00>rdZ_ema_20cSra)N<><rGr7rbr=r?r?r@rA<00>rdZ_ema_60cS<00>$t<00>||<00>d<01>dd<00>ddS)Nrr<00>fffff<66>L@<40>2<00><03>npZarctanrUr=r?r?r@rA<00>rN<00> act_factor1cSrg)Nrrrh<00>(rjr=r?r?r@rArN<00> act_factor2cSrg)Nrrrh<00>rjr=r?r?r@rArN<00> act_factor3cSrg)Nrrrhr2rjr=r?r?r@rArN<00> act_factor4)Z ascending<6E>pctZrank_act_factor1Zrank_act_factor2Zrank_act_factor3<72>circ_mv<6D> log_circ_mvcs|d<00><00><00><01>|d<00>S)NrDr
)r;<00>cov<6F><01>group)<01>window_high_volumer?r@<00>calculate_rolling_covsz1get_rolling_factor.<locals>.calculate_rolling_covrucs|d<00><00><00>S)Nru)<01>diffrv)<01> period_deltar?r@<00>calculate_delta_covsz/get_rolling_factor.<locals>.calculate_delta_covZ delta_covcs|d<00><00><00><01><01>S)Nr<00>r;rZrv)<01>window_close_stddevr?r@<00>calculate_stddev_close!sz2get_rolling_factor.<locals>.calculate_stddev_closeZ _stddev_close)rrZ _rank_stddev<65><76><EFBFBD><EFBFBD><EFBFBD>Zalpha_22_improvedrDrE<00>openZ alpha_003cSs|d<00>d<02><01>|d<00>S)Nrr/r
)r;<00>corrr=r?r?r@rA,<00>Z alpha_007cSs|<00>d<01><01><01>|<00>d<02><01><01>S)Nr/r!<00>r;<00>sumr=r?r?r@rA/rdZ alpha_013<31>up_limitZ cat_up_limit<69>
down_limitZcat_down_limit)r1r)Zup_limit_count_10dZdown_limit_count_10dcSsL||<00>||<00><01>k<03><02><00><01><03>d}||<00>||<00><01>k<03><02><00><01><03>d}||fS)u4
计算连续涨停/跌停天数。
r)<04>groupbyrUZcumsumZcumcount)ZseriesZconsecutive_upZconsecutive_downr?r?r@<00>calculate_consecutive_limits:s""z8get_rolling_factor.<locals>.calculate_consecutive_limitscs <00>|<00>dS)Nrr?r=)r<>r?r@rADs Zconsecutive_up_limitZ vol_breakcSs
|<00>d<01>S)Nr/)rYr=r?r?r@rAIs
Z weight_roc5cSs(|d<00><00>}|d<00><00>}|<01>d<03><01>|<02>S)Nrrr2)rYr;r<>)rwZ roc_closeZ
roc_weightr?r?r@<00> rolling_corrKs  z(get_rolling_factor.<locals>.rolling_corrZprice_cost_divergence<63>smallcap_concentrationcS<00>|<00>d<01><01><01>S<00>Nr!r}r=r?r?r@rAU<00>Z weight_std20cSr<>r<><00>r;r<r=r?r?r@rAVr<>Zcost_stabilitycSs|d<00>|d<00><01>d<03><01><02>S)Nrrr/)<03>gtr;r<>)<01>gr?r?r@rAYrdZhigh_cost_break_dayscSr<>)Nr2r<>r=r?r?r@rA]r<>Zliquidity_riskcSs|jdd<02><01><01>S)Nr!r0r}r=r?r?r@rA`<00><00> turnover_stdcSs|d|dS)Nr<4E>rtr?r=r?r?r@rAar<>Z mv_volatility)ZperiodsZ volume_growthZ mv_growthcSs<|d<00>|d<00><01>d<03><01><02>|d<00>|d<00><01>d<03><01><02>dS)NrDr<>rrEr)Zdivr;r<>r=r?r?r@rAis<<00>ar<61> pre_close<73>br_up<75>br_downcSs(|d<00>d<02><01><01>|d<00>d<02><01><01>dS)Nr<4E>rr<>rr<>r=r?r?r@rAos(<00>brZarbr)r<>r<>r<>r<>r<>)<02>columns<6E>inplace<63>ignore<72>r<>r<><00>errors)r#r$r%r&r'r(c<00>g|]}|<01>vr|<01>qSr?r?<00><02>.0<EFBFBD>col<6F><01> old_columnsr?r@<00>
<listcomp>yr<>z&get_rolling_factor.<locals>.<listcomp>)#r<><00>tolist<73> sort_valuesr<73>rkZsignrzZmaximumrYZselectZastype<70>int<6E>whereZsquarer;<00>maxr<78><00>nanZclip<69>sqrt<72> reset_index<65>replace<63>infZfillnaZskewZkurtr<rZ<00>apply<6C>printZrank<6E>log<6F> transformrUr,)!<21>dfZgrouped<65>epsilonZprice_dist_cost15Zconditions_winnerZchoices_winnerZprice_near_low_supportZhigh_winner_rate_flagZ cols_to_dropr1Zrolling_pos_countZrolling_pos_sumZrolling_pos_sum_sqZrolling_neg_countZrolling_neg_sumZrolling_neg_sum_sqZ pos_mean_sqZpos_meanZpos_varr-Z neg_mean_sqZneg_meanZneg_varr.Z
max_volumeZ mean_turnoverZ std_turnoverZmax_volume_ratioryr|rr<><00> new_columnsr?)r<>r<>r{r~rxr@<00>get_rolling_factors<>$<08>   <04>       

&""<02><02>
<EFBFBD>"<08><08><08><08>
<08><08> <08><08><08><08><08><08><08><08>      <08>  
<EFBFBD>
<EFBFBD>
<08>* <08><08><06> r<>cs|j<00><01>dd<00><00>|jddgd<03>}d}|d||d|d<|d|d |d
<t<03>|d <00>|d <|d d|dk|d<|d|d dgjdd<14>|d |d<|d dgjdd<14>|d|d |d<|d|d|d<|d|d|d<|d|d|d<|d |d!k|d"<|d#|d k|d$<|d%|d#k|d&<|d!|d |d#|d%|d'<|d!|d t<03>|d!d|d d<00>|d(<|d)|d*|d+<|d,|d*|d-<|d.|d*|d/<|d)|d0|d*|d1<|d,|d2|d*|d3<t<03>|d4<00>|d5<|d6|d7|d8|d9|d:<|d |d;|d<|d;|d=<|d>|d<|d<|d;|d?<|d@d|d>|d;|d8|d9|dA<|d |d6k|ddk@|dB<|d>|d;|dC|dD<d|d5|d6|d7|dE<|d |dFk|ddGk@|dHdIk@|dJ<|d@|d5|dK<|d |d5|dL<|d@d|d5|dM<|d |d5|dN<|d|d5|dO<|d@|d|d5|dP<dQdR<64>|jD<00>}|j|dSdTdU<64><00>fdVdR<64>|j<00><01>dd<00>D<00>}||fS)WNrrrrr3r5Zmomentum_factorr6r"Zresonance_factorrZ log_closer
rrBZ cat_vol_spikerDr<>r)<01>axisZuprEZdownrOrRZ obv_maobv_6r\r^Zstd_return_5_over_std_return_90r`Z#std_return_90_minus_std_return_90_2rnrlZcat_af2rpZcat_af3rqZcat_af4Z act_factor5Z act_factor6r<00>
net_mf_volZactive_buy_volume_largerZactive_buy_volume_bigr Zactive_buy_volume_smallrZbuy_lg_vol_minus_sell_lg_volrZbuy_elg_vol_minus_sell_elg_volrsrtrr<00>his_high<67>his_lowZ ctrl_strengthrrZ low_cost_devrZ asymmetryr4Z lock_factorZ cat_vol_breakrLZ cost_atr_adjr<6A>rg<00>?rr Zcat_golden_resonanceZmv_turnover_ratioZmv_adjusted_volumeZmv_weighted_turnoverZnonlinear_mv_volumeZmv_volume_ratioZ mv_momentumcSsg|] }|<01>d<00>r|<01>qS)<01>_)<01>
startswithr<EFBFBD>r?r?r@r<><00>r_z%get_simple_factor.<locals>.<listcomp>Tr<54>r<>cr<>r?r?r<>r<>r?r@r<><00>r<>) r<>r<>r<>rkr<>r<><00>minr<6E>r,)r<><00>alphaZ drop_columnsr<73>r?r<>r@<00>get_simple_factor~sb(($
<EFBFBD>$$$"<08>  
<02>
<08> r<>)Znumpyrk<00>pandasr9rIr<>r<>r?r?r?r@<00><module>s z