(supermind量化策略)task17/a/换手率3%-12%、买一量>卖一量、三个技

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

问财量化选股策略逻辑

选股逻辑为:选择换手率在3%~12%、买一量大于卖一量、同时满足三个技术指标金叉的股票。

选股逻辑分析

该选股策略不仅考虑了交易活跃度和市场需求,还考虑了股票的技术面情况,通过同时金叉三个技术指标可以进一步筛选出强势股票,有助于获取更好的收益。

有何风险?

该选股逻辑仍然比较简单,可能无法全面反映公司的基本面情况,同时可能存在过度拟合的情况,把优秀的历史表现当做未来的基础。

如何优化?

可以选取更多或者更细致的技术指标;同时引入公司财务和业绩等基本面指标到选股策略中进行筛选。

最终的选股逻辑

在众多股票中选择换手率在3%~12%之间、买一量大于卖一量、且同时满足三个技术指标(如MACD、KDJ、RSI等)金叉的股票。

同花顺指标公式代码参考

SELECT * FROM
    (SELECT * FROM
        -- 选出换手率在3%~12%之间的股票
        (SELECT * FROM stock_info WHERE TURNOVER_RATIO > 3 AND TURNOVER_RATIO < 12)
        -- 选出挂买一量大于卖一量的股票
        WHERE BUY1_VOLUME > SELL1_VOLUME)
    -- MACD金叉
    WHERE MACD>DIF AND REF(MACD,DAY1)<REF(DIF,DAY1) AND REF(MACD,DAY2)<REF(DIF,DAY2)
    -- KDJ金叉
    AND KDJ_K>REF(KDJ_K,DAY1) AND KDJ_K>REF(KDJ_D,DAY1) AND REF(KDJ_K,DAY1)<REF(KDJ_D,DAY1)
    -- RSI金叉
    AND RSI>REF(RSI,DAY1) AND RSI<REF(RSI,DAY2) AND REF(RSI,DAY1)<REF(RSI,DAY2);

python代码参考

import pandas as pd
import tushare as ts

def select_stocks():
    pro = ts.pro_api()

    # 查询挂带大量大于卖一量的股票
    market_df = pro.market_detail(symbol='', trade_date='20220422')
    df1 = market_df[(market_df['bid_vol'] > market_df['ask_vol'])]

    # 查询三个技术指标同时金叉的股票
    daily_df = pro.daily(ts_code='', trade_date='20220422', ma=[5,10,30], factors=['macd', 'kdj', 'rsi'])
    df2 = pd.DataFrame()
    for code in daily_df['ts_code'].unique():
        code_df = daily_df[daily_df['ts_code'] == code]
        if len(code_df) > 3:
            if (code_df.iloc[-3]['macd'] > code_df.iloc[-3]['macdsignal']) \
                    & (code_df.iloc[-2]['macd'] < code_df.iloc[-2]['macdsignal']) \
                    & (code_df.iloc[-1]['macd'] < code_df.iloc[-1]['macdsignal']) \
                    & (code_df.iloc[-1]['kdj_k'] > code_df.iloc[-2]['kdj_k']) \
                    & (code_df.iloc[-1]['kdj_k'] > code_df.iloc[-2]['kdj_d']) \
                    & (code_df.iloc[-2]['kdj_k'] < code_df.iloc[-2]['kdj_d']) \
                    & (code_df.iloc[-1]['rsi'] > code_df.iloc[-2]['rsi']) \
                    & (code_df.iloc[-1]['rsi'] > code_df.iloc[-3]['rsi']) \
                    & (code_df.iloc[-2]['rsi'] < code_df.iloc[-3]['rsi']):
                df2 = df2.append(code_df.iloc[-1])
    
    # 筛选出换手率在3%~12%之间的股票
    df3 = pd.merge(df1, df2[['ts_code', 'close']], on='ts_code', how='inner')
    df3 = pd.merge(df3, df2[['ts_code', 'turnover_rate']], on='ts_code', how='inner')
    df3 = df3[(df3['turnover_rate'] > 3) & (df3['turnover_rate'] < 12)]

    # 查询股票的市值和资金净流入情况
    basic_df = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date,market,market_capitalization')
    moneyflow_df = pro.moneyflow(trade_date='20220422', fields='ts_code,in_df')
    df4 = pd.merge(basic_df, moneyflow_df, on='ts_code', how='inner')
    df4 = pd.merge(df3[['ts_code', 'turnover_rate']], df4, on='ts_code', how='inner')

    # 合并所有指标,返回选股结果
    return df4.sort_values(by=['market_capitalization'], ascending=False).head(20)['ts_code']
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论