(supermind策略)换手率3%-12%、100亿市值以内的无亏损企业、三个技术指标同

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

问财量化选股策略逻辑

选股逻辑为:在换手率3%-12%、市值100亿以内、无亏损的A股中,选择三个技术指标(如MACD、KDJ、RSI)同时金叉的个股进行投资。

选股逻辑分析

该选股逻辑通过技术指标的选股方式,筛选出同时表现出短期和长期均线或震荡指标呈现买入信号的个股,以此降低投资风险。

有何风险?

该选股逻辑仅注重个股的技术面表现,无法评估基本面和市场整体因素的影响,忽略了公司财务状况、市场宏观经济、政策环境等影响,容易对市场风险和公司股价的长期变化造成忽略和误判。

如何优化?

应该根据公司的经营情况和市场整体性做出综合判断,加强基本面和市场因素的分析和建模,重视公司财务状况、前景、竞争状况、行业关键指标及政策环境等影响因素。在技术指标的基础上,综合考虑多维度的因素指标,制定更全面、更科学的选股策略。

最终的选股逻辑

在符合换手率3%-12%、市值100亿以内、无亏损的A股中,选择同时出现三个技术指标(如MACD、KDJ、RSI)金叉信号的个股进行投资,并在此基础上,综合考虑市场因素和公司经营状况等关键因素,制定更全面、更科学的选股策略。

同花顺指标公式代码参考

选股公式:(CIRCMV <= 10000000000 AND SHELL = 0 AND TBD = 0 AND MACD(12,26,9) > REF(MACD(12,26,9), 1) AND KDJ(9,3,3) * KDJ(9,3,3) * KDJ_II(9,3) * KDJ_II(9,3,3) UPANDDOWN(60) < 0) ORDER BY CIRCMV DESC

Python代码参考

import pandas as pd
import tushare as ts

def get_good_stocks(N):
    good_list = []
    
    ts.set_token('your_token')
    pro = ts.pro_api()
    stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code')['ts_code']
    
    for ts_code in stock_list:
        if pro.namechange(ts_code=ts_code) and pro.namechange(ts_code=ts_code)['name'].iloc[0].find('ST') >= 0:  # 非ST股票
            continue
            
        market_data = pro.daily_basic(ts_code=ts_code, start_date='20220222', end_date='20220222', fields='ts_code, circ_mv, turnover_rate')
        if market_data.empty or market_data.iloc[-1]['circ_mv'] > 10000000000 or market_data.iloc[-1]['turnover_rate'] < 0.03 or market_data.iloc[-1]['turnover_rate'] > 0.12:
            continue
        
        k_data = pro.daily(ts_code=ts_code, start_date='20220215', end_date='20220222', fields='close')
        if k_data.empty:
            continue
        
        # 计算MACD指标
        macd_data = pd.DataFrame()
        macd_data['EMA12'] = pd.Series.ewm(k_data['close'], span=12, adjust=False).mean()
        macd_data['EMA26'] = pd.Series.ewm(k_data['close'], span=26, adjust=False).mean()
        macd_data['DIFF'] = macd_data['EMA12'] - macd_data['EMA26']
        macd_data['DEA'] = pd.Series.ewm(macd_data['DIFF'], span=9, adjust=False).mean()
        macd_data['MACD'] = 2 * (macd_data['DIFF'] - macd_data['DEA'])
        macd_trend = (macd_data['MACD'].iloc[-1] > macd_data['MACD'].iloc[-2])
        
        # 计算KDJ指标
        kdj_data = pd.DataFrame()
        kdj_data['LOW'] = k_data['low'].rolling(window=9, min_periods=9).min()
        kdj_data['HIGH'] = k_data['high'].rolling(window=9, min_periods=9).max()
        kdj_data['RSV'] = (k_data['close'] - kdj_data['LOW']) / (kdj_data['HIGH'] - kdj_data['LOW']) * 100
        kdj_data['K'] = pd.Series.ewm(kdj_data['RSV'], span=3, adjust=False).mean()
        kdj_data['D'] = pd.Series.ewm(kdj_data['K'], span=3, adjust=False).mean()
        kdj_data['J'] = 3 * kdj_data['K'] - 2 * kdj_data['D']
        kdj_trend = (kdj_data['K'].iloc[-1] > kdj_data['D'].iloc[-1]) & (kdj_data['D'].iloc[-1] > kdj_data['J'].iloc[-1])
        
        # 计算RSI指标
        rsi_data = pd.DataFrame()
        rsi_data['DIFF'] = k_data['close'].diff()
        rsi_data['DIFF'].iloc[0] = 0
        rsi_data['MAX'] = rsi_data['DIFF'].rolling(window=14, min_periods=14).apply(lambda x: max(x.tolist()))
        rsi_data['ABS'] = rsi_data['DIFF'].apply(abs)
        rsi_data['MA'] = rsi_data['ABS'].rolling(window=14, min_periods=14).mean()
        rsi_data['RSI'] = rsi_data['MA'] / rsi_data['MAX'] * 100
        rsi_trend = (rsi_data['RSI'].iloc[-1] > rsi_data['RSI'].iloc[-2])
        
        if macd_trend and kdj_trend and rsi_trend:
            good_list.append(ts_code)
    
    return good_list[:N]

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

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

    模板如何使用?

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


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

评论