(同花顺量化)10天内涨停天数大于2_、至少5根均线重合的股票、振幅大于1

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

问财量化选股策略逻辑

该选股策略包括三个条件:

  • 振幅大于1;
  • 至少5根均线重叠的股票;
  • 10天内涨停天数大于2。

选股逻辑分析

该选股策略在价格形态的控制上更加严格,需要股票出现相对明显的上涨趋势和强劲的市场热度,有可能筛选出一些短期涨幅较大的股票。此外,该策略对与均线和振幅的筛选条件和前面的策略类似,具有较强的稳定性和可操作性。

有何风险?

该策略可能会忽略掉一些慢涨股票和阶段性回调的股票,过于依赖短期市场热度和涨停板现象,需谨慎操作。此外,过于严格的技术条件会导致筛选出来的股票数量偏少,不能像其他量化选股策略一样有效地防范市场风险。

如何优化?

为了提高选股策略的准确性和稳健性,可以在价格形态和市场热度方面加入更多指标进行优化。可以考虑加入技术类指标,例如相对强弱指数、协整模型等,以及参考基本面数据进行策略补充。此外,可以适当放宽热度、涨停板和均线等指标的限制,以扩大筛选范围。总之,需要根据实际市场变化不断优化策略。

最终的选股逻辑

综合分析和前几个策略建议,建议该选股策略的逻辑为:

  • 振幅大于1;
  • 至少5根均线重叠;
  • 近10天内涨停天数大于2;
  • 相对强弱指数大于0.7;
  • 市盈率小于30。

同花顺指标公式代码参考

  • 日线振幅:(HIGHEST(high,20)-LOWEST(low,20))/REF(CLOSE,1);
  • 均线:MA(CLOSE,M),M为参数,可以自行设置。

python代码参考

import pandas as pd 
import tushare as ts 
import talib

def get_stock_pool(date):
    # 获取所有股票代码
    df = ts.get_stock_basics()
    codes = df.index.tolist()

    result = pd.DataFrame()

    for code in codes:
        # 上市不足60天的股票忽略
        if (pd.to_datetime(date) - pd.to_datetime(df.loc[code]['timeToMarket'])).days <= 60:
            continue

        # 规模筛选
        total_mv = df.loc[code]['totalAssets'] * df.loc[code]['pb']
        if total_mv < 2e8:
            continue

        bars_all = ts.get_k_data(code, '2022-01-01', date)

        if bars_all is None or bars_all.empty or len(bars_all) < 2:
            continue
        
        # 20日均线和120日均线
        close = bars_all['close'].values
        ma_20 = talib.MA(close, timeperiod=20)
        ma_120 = talib.MA(close, timeperiod=120)
        is_ma_up = ma_20[-1] > ma_120[-1]

        high, low, close = bars_all['high'].values, bars_all['low'].values, bars_all['close'].values
        amplitude = (high - low) / close[:-1]
        is_amplitude_large = amplitude.max() > 0.008

        # 至少5根均线重叠
        ma_5 = talib.MA(close, timeperiod=5)
        ma_10 = talib.MA(close, timeperiod=10)
        ma_20 = talib.MA(close, timeperiod=20)
        ma_30 = talib.MA(close, timeperiod=30)
        ma_count = len(set([ma[-1] for ma in [ma_5, ma_10, ma_20, ma_30]]))
        is_ma_converge = ma_count >= 5

        # 近10天内涨停天数大于2
        up_limit_days_10 = len(bars_all[bars_all['p_change'] == 10])
        is_up_limit_days_large = up_limit_days_10 > 2
        
        # 相对强弱指数大于0.7
        rsi = talib.RSI(close, timeperiod=14)[-1]
        is_rsi_up = rsi > 70

        # 市盈率小于30
        pe = df.loc[code]['pe']
        is_pe_low = pe < 30

        if is_amplitude_large and is_ma_converge and is_up_limit_days_large and is_rsi_up and is_pe_low:
            result = result.append({'code': code, 'name': df.loc[code]['name'], 'price': bars_all['close'].iloc[-1], 'vol': df.loc[code]['volume']},ignore_index=True)

    result = result.sort_values(by=['vol'], ascending=False)
    return result

注:此函数用于在某个日期获取备选股票池,返回dataframe,包括代码、名称、最新价格、热度等信息。其中涉及的均线、振幅、市值、相对强弱指数、市盈率等指标可以参考TALib和tushare。具体市值筛选和指标选取标准可根据实际需求选取。

    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论