(supermind量化策略)task17/a/换手率3%-12%、涨跌幅×超大单净量、反

用户头像神盾局量子研究部
2023-08-30 发布

问财量化选股策略逻辑

选股逻辑:选择换手率在3%到12%之间,涨跌幅乘以超大单净量大于0,反包。

选股逻辑分析

该选股策略在前一个策略基础上增加了反包指标的筛选条件。反包是指股价在短期内大幅波动后,回归到中长期一定均衡水平的现象,属于技术面的一个重要指标。同时,该选股策略中的指标筛选条件相对简单,具有一定的可操作性和易实现性。

有何风险?

这个选股策略直接选取了换手率、涨跌幅乘以超大单净量和反包等指标作为选股条件,没有考虑到基本面因素和行业的因素,存在一定的主观性和不确定性。同时,反包指标的使用需要具有技巧性,容易出现诱导性的情况。因此,选股结果不一定符合市场预期,存在一定风险。

如何优化?

可以加入与基本面和行业相关的指标,如市盈率、市净率、股息率、行业排名等,以更全面地考虑选股因素。同时,应该对股票所处行业进行适当的分析,选择更具有竞争力的标的。此外,也可以将反包指标与其他技术指标结合使用以提高选股的准确性。

最终的选股逻辑

选择换手率在3%到12%之间,涨跌幅乘以超大单净量大于0,同时符合反包指标为选股范围。

同花顺指标公式代码参考

以下是同花顺指标所需公式:

选股公式:
-- 计算反包指标
REF_HIGH := REF(HIGH,1);
REF_LOW := REF(LOW,1);
S_RANGE := (HIGH - LOW) / REF(CLOSE,1);
L_RANGE := (MAX(HIGH,REF_HIGH) - MIN(LOW,REF_LOW)) / REF(CLOSE,1);
RANGE := MAX(S_RANGE,L_RANGE);
RANGE_1 := REF(RANGE,1);
RANGE_2 := REF(RANGE,2);
RANGE_3 := REF(RANGE,3);
Rp := 0.1;
FinalRange:= ((RANGE*2 + RANGE_1 + RANGE_2 + RANGE_3)/5)*Rp + ((RANGE_1 + RANGE_2 + RANGE_3)/3)*(1-Rp);

-- 计算选股
SELECT STOCK_SYMBOL FROM (
    SELECT STOCK_SYMBOL AS code, FinalRange AS Score FROM 
        (
            SELECT STOCK_SYMBOL AS code FROM StkBasInfo WHERE MarketValue < 100000000 AND FINFOURL NOT NULL AND FloatMarketValue < 10000000000
        ) SI INNER JOIN (
            SELECT STOCK_SYMBOL AS code FROM CandlesDay WHERE Cdl[:1] = LAST AND TIME = [TIME-1] AND Year(DATE) = YEAR(TODAY) AND VOL >= 1000000 AND VOL < 100000000 AND TURNOVER_RATIO >= 3 AND TURNOVER_RATIO <= 12
        ) CD ON SI.code = CD.code INNER JOIN (
            SELECT STOCK_SYMBOL AS code, (C*Big)/10000 AS SuperVolume FROM CandlesDay WHERE Cdl[:1] = LAST AND TIME = [TIME-1] AND Year(DATE) = YEAR(TODAY) AND VOL >= 1000000 AND VOL < 100000000
        ) SV ON CD.code = SV.code INNER JOIN (
            SELECT STOCK_SYMBOL AS code, 
                ((HIGH-LOW)/REF(CLOSE,1)) / ((REF(HIGH,1)-REF(LOW,1))/REF(CLOSE,1)) AS RB
            FROM CandlesDay WHERE Cdl[:5] = LAST AND TIME = [TIME-5] AND Year(DATE) = YEAR(TODAY)
        ) RB ON SV.code = RB.code AND RB.RB < 0.9
        ORDER BY Score DESC
        LIMIT 10

Python代码参考

以下是Python代码实现该选股策略:

import pandas as pd
from typing import List
from datetime import datetime, timedelta

def select_stock(data: pd.DataFrame, n=10) -> List[str]:
    selected_stocks = []
    for code, df in data.groupby(level=0):
        df = df.sort_values('trade_time', ascending=True)
        if (df['float_shares'].iloc[-1] / 1000000000 <= 100) and (df['close'].iloc[-1] > 5) and \
           (df['volume'].iloc[-1] / df['volume'].iloc[-6:-1].mean() > 3) and \
           (df['turnover_rate'].iloc[-1] > 3) and (df['turnover_rate'].iloc[-1] < 12) and \
           (df['pct_chg'].iloc[-1] * abs(df['buy_volume'].iloc[-1] - df['sell_volume'].iloc[-1]) / 10000 > 0) and \
           ((df['high'] - df['low']).iloc[-1] / df['close'].iloc[-2] > 0) and \
           ((df['high'] - df['low']).iloc[-2] / df['close'].iloc[-3] > 0) and \
           ((df['high'] - df['low']).iloc[-3] / df['close'].iloc[-4] > 0) and \
           ((df['high'] - df['low']).iloc[-4] / df['close'].iloc[-5] > 0) and \
           ((df['high'] - df['low']).iloc[-5] / df['close'].iloc[-6] > 0) and \
           ((df['high'] - df['low']).iloc[-1] / (df['high'].iloc[-6:].max() - df['low'].iloc[-6:].min()) < 0.9):
            s_weight = df['turnover_rate'].mean() * df['volume'].mean() / (df['close'].iloc[-1] * 10000)
            selected_stocks.append((code, s_weight))
    selected_stocks.sort(key=lambda x: x[1], reverse=True)
    selected_stocks = selected_stocks[:n]
    return [x[0] for x in selected_stocks]
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

    select_sentence = '市值小于100亿' #选股语句。

    模板如何使用?

    点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。


    ## 如果有任何问题请添加 下方的二维码进群提问。
    ![94c5cde12014f99e262a302741275d05.png](http://u.thsi.cn/imgsrc/pefile/94c5cde12014f99e262a302741275d05.png)
收益&风险
源码

评论