# 量化排名，rank举例

By [KeepLearning](https://paragraph.com/@keeplearning-2) · 2023-03-21

---

一直对量化的排名有点糊涂，今天搞清楚一下。

    df['mean'] = df['close'].rolling(n).mean()
    df['std'] = df['close'].rolling(n).std(ddof=0)
    df['upper'] = df['mean'] + 2 * df['std']
    df['lower'] = df['mean'] - 2 * df['std']
    df['count'] = 0
    df.loc[df['close'] > df['upper'], 'count'] = 1
    df.loc[df['close'] < df['lower'], 'count'] = -1
    df[factor_name] = df['count'].rolling(n).sum()
    
    ('Boll_count', True, [34], 0.5),
    

candle\_begin\_time symbol close 因子 Boll\_count\_\[34\] Boll\_count\_\[34\]_rank Adosc_\[34\] Adosc\_\[34\]\_rank

30 2023-03-20 08:00:00 BNBUSDT 332.62 4.00 1.0 3.0 0.846631 5.0 31 2023-03-20 08:00:00 BTCDOMUSDT 1680.20 3.75 8.0 5.0 1.000000 2.5 32 2023-03-20 08:00:00 BTCUSDT 27694.40 3.25 3.0 4.0 1.000000 2.5 33 2023-03-20 08:00:00 DEFIUSDT 598.40 1.75 -3.0 1.0 1.000000 2.5 34 2023-03-20 08:00:00 ETHUSDT 1728.27 2.25 -1.0 2.0 1.000000 2.5

BTCDOMUSDT bollcount根据K线算出来的值是8，也就是Boll\_count\_\[34\]的值。在5个币种种值最大，('Boll\_count', True, \[34\], 0.5), 我们设置的是True，True的意思是值越大，排名的数值页就越大，所以它Boll\_count\_\[34\]_rank的值是5，在所有5个_Boll\_count\_\[34\]_rank排名中值最大。算因子的时候是5.0\*0.5，可以看到True的时候，这个最终的因子算出来也越大。最后就是因子的排序，这个没有True和False的概念（应该也是可以设置的），默认是做多因子最小的，做空因子最大的。_

所以刚才('Boll\_count', True, \[34\], 0.5),设置为True，表示这个因子算出来的值越大，这个因子的排名值也越大，然后就是算出来的最终因子也越大，最终因子_默认是做多因子最小的，做空因子最大的，所以相当于做空这个因子。_

_然后再看Boll count的含义，看定义是突破上轨Bollcount记为1，突破下轨记为-1，按常理说是个趋势指标，但是设置为True，则是个反转指标。说明突破上轨越多，我就越要做空它。_

相当于设置为True的话，单因子算出来的值越大，我就做空它。

设置为False的话，因子算出来的值越大，我就做多它。

---

*Originally published on [KeepLearning](https://paragraph.com/@keeplearning-2/rank)*
