(supermind量化投资)task13/a/元宇宙、昨日股价大于250日均线、非ST(

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

问财量化选股策略逻辑

该选股策略包括五个条件:元宇宙、昨日股价大于250日均线、非ST、10点之前筛选出当天涨停股票、五部涨停战法。通过先筛选符合要求股票,再通过个股的当前情况判断其是否符合五部涨停战法标准,选择符合要求的个股进行投资。

选股逻辑分析

该选股策略主要通过以下五个条件选择符合要求的个股进行投资:

  1. 元宇宙:选择热门板块中的个股
  2. 昨日股价大于250日均线:判断个股目前的价格是否接近长期均线及相对稳定
  3. 非ST:排除ST股票,减小风险
  4. 10点之前筛选出当天涨停股票:通过关注个股的放量情况,筛选出当天涨幅较大的个股
  5. 五部涨停战法:通过判断个股当天的开盘价、第一、第二次涨停的时间及涨幅等情况,确认个股是否符合五部涨停战法标准。

综合以上五个条件,选择符合要求的个股进行投资。

有何风险?

  1. 选股逻辑可能存在过度拟合、过度优化导致未来表现下降的风险;
  2. 五部涨停战法属于短期操作,风险较大;
  3. 选股逻辑过于依赖当天市场情况,可能会受到市场波动影响较大。

如何优化?

  1. 加入其他指标,如市盈率、市净率等;
  2. 增加涨跌停限制,避免停牌或者涨跌停带来的误判;
  3. 增加机器学习算法对选股逻辑进行优化。

最终的选股逻辑

该选股策略选择元宇宙板块中、股票均价站在五日均线之上、非ST、10点之前筛选出当天涨停股票、符合五部涨停战法的个股作为投资目标。

同花顺指标公式代码参考

元宇宙:GNBK("gnxq")

昨日股价大于250日均线:C >= MA(250)

非ST:stflag = 0

10点之前筛选出当天涨停股票:

  • 涨幅排名前10%的个股
  • 开盘价高于昨日收盘价
  • 当前价位在第一次涨停前的80%以上

五部涨停战法:

  1. 首次涨停:涨幅大于9.5%
  2. 第二次涨停:涨幅大于10%
  3. 第三次涨停:涨幅大于10%
  4. 第四次涨停:涨幅大于10%
  5. 第五次涨停:涨幅大于10%

Python代码参考

import pandas as pd
import tushare as ts

def stock_selector():
    ts.set_token('your_token')
    pro = ts.pro_api()

    # 获取所有元宇宙板块中的个股
    gnxq = pro.index_basic(
        fields='category',
        identifying_code='9650',
        market='SSE'
    )
    gnxq_stocks = gnxq.loc[gnxq['category'] == 'GN023']

    data_selected = pd.DataFrame()
    for code in gnxq_stocks['con_code']:
        df = pro.query('stock_basic', ts_code=code, fields=['name','list_date'])
        ts_data = ts.pro_bar(
            ts_code=code,
            adj='qfq',
            start_date='20220111',
            end_date='20220111'
        )
        if len(ts_data) > 0 and ts_data.iloc[-1]['close'] >= ts_data.iloc[-1]['close'].rolling(5).mean()[4] and ('ST' not in df['name'].values[0]) and (df['list_date'].values[0] < '20150101'):
            try:
                limit_data = ts.pro_bar(
                    ts_code=code,
                    adj='qfq',
                    start_date='20220110',
                    end_date='20220110'
                )
                if len(limit_data) > 0 and (limit_data['open'][0] > ts_data.iloc[-1]['close']) and (limit_data['pct_chg'][0] > 9.5) and (limit_data['open'][0] / ts_data.iloc[-1]['close'] > 1.8) and (limit_data['high'][0] / limit_data['low'][0] < 1.15):
                    limit_data = ts.pro_bar(
                        ts_code=code,
                        adj='qfq',
                        start_date='20220111',
                        end_date='20220111'
                    )
                    if len(limit_data) > 0 and (limit_data['pct_chg'][0] > 10) and ((limit_data.index[0] - ts_data.index[-1]).days == 1) and (limit_data['high'][0] / limit_data['low'][0] < 1.15):
                        limit_data = ts.pro_bar(
                            ts_code=code,
                            adj='qfq',
                            start_date='20220112',
                            end_date='20220112'
                        )
                        if len(limit_data) > 0 and (limit_data['pct_chg'][0] > 10) and ((limit_data.index[0] - ts_data.index[-1]).days == 2) and (limit_data['high'][0] / limit_data['low'][0] < 1.15):
                            limit_data = ts.pro_bar(
                                ts_code=code,
                                adj='qfq',
                                start_date='20220113',
                                end_date='20220113'
                            )
                            if len(limit_data) > 0 and (limit_data['pct_chg'][0] > 10) and ((limit_data.index[0] - ts_data.index[-1]).days == 3) and (limit_data['high'][0] / limit_data['low'][0] < 1.15):
                                limit_data = ts.pro_bar(
                                    ts_code=code,
                                    adj='qfq',
                                    start_date='20220114',
                                    end_date='20220114'
                                )
                                if len(limit_data) > 0 and (limit_data['pct_chg'][0] > 10) and ((limit_data.index[0] - ts_data.index[-1]).days == 4) and (limit_data['high'][0] / limit_data['low'][0] < 1.15):
                                    data_selected = data_selected.append(df)
            except:
                continue

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

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

    模板如何使用?

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


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

评论