(同花顺量化)10日涨幅大于0小于35_、下午大单净流入、rsi小于65

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

问财量化选股策略逻辑

选股逻辑:选出RSI小于65,下午大单净流入,10日涨幅大于0小于35的股票。

选股逻辑分析

该选股策略综合利用了技术指标和市场情绪,通过RSI指标判断股票被低估,通过下午大单净流入判断市场情绪向好,通过涨幅判断股票有一定的增长性。但该选股策略忽略了一些基本面因素,例如公司业绩和行业前景等因素。

有何风险?

该选股逻辑主要依赖于技术指标和市场情绪,忽略了股票的基本面,例如公司业绩和行业前景等因素。同时,过度依赖代码筛选,可能存在选出股票不具备长期投资价值的风险。

如何优化?

可以结合基本面因素进行筛选,如利润增长率、市净率等,以降低选股风险。同时,可以考虑引入其他技术指标,如均线、MACD等,对选股策略进行优化。

最终的选股逻辑

选出下午大单净流入,10日涨幅大于0小于35,RSI小于65的股票。

同花顺指标公式代码参考

C2: AFTERNOON(NETFLOW) > 0
C3: DAYTYPE
C4: EMA(CLOSE,10)/REF(EMA(CLOSE,10),1)-1 >0 AND EMA(CLOSE,10)/REF(EMA(CLOSE,10),1)-1 <0.35
C5: LEFT(CODE,2) NOT IN ('30','00')
SELECT * FROM (
SELECT STOCK_LIST.*,
GET_RANKING() AS RANKING
FROM STOCK_LIST) RESULT
WHERE C1 AND C2 AND C3 AND C4 AND C5
ORDER BY RANKING DESC 

python代码参考

import pandas as pd
import akshare as ak
import talib


def get_ranking(df):
    df = df[df['成交量'] > 0]
    df = df[df['下午净流入'] > 0]
    df = df[df['RSI'] < 65]
    df = df[(df['10日涨幅'] > 0) & (df['10日涨幅'] < 0.35)]
    df = df[~df['代码'].str.startswith(('30', '00'))]
    stocks_em = ak.stock_zh_a_daily_em_alpha(indicator="涨幅排名")
    stocks_list = stocks_em['名称']
    df['RANKING'] = df['名称'].apply(lambda x: stocks_list.index(x) + 1 if x in stocks_list else 0)
    df = df[df['RANKING'] > 0]
    df.sort_values(by='RANKING', ascending=True, inplace=True)
    return df.head(5)


def get_stock_list():
    stock_list_df = ak.stock_zh_a_spot_em()
    stock_list_df['10日涨幅'] = 0
    for code in stock_list_df['代码']:
        k_data_df = ak.stock_zh_a_daily_em(symbol=code, adjust="qfq")
        if len(k_data_df) < 10:
            continue
        k_data_df['10日涨幅'] = ((k_data_df['收盘'] - talib.EMA(k_data_df['收盘'], timeperiod=10)) / talib.EMA(k_data_df['收盘'], timeperiod=10)).shift(1)
        stock_list_df.loc[stock_list_df['代码'] == code, '10日涨幅'] = k_data_df['10日涨幅'].iloc[-1]
    stock_lhb_df = ak.stock_em_hsgt_lhb()
    stock_lhb_df = stock_lhb_df[stock_lhb_df['日期'] == ak.stock_zh_a_spot_trade_history_sina()[0]]
    stock_lhb_df = stock_lhb_df[stock_lhb_df['类型'] == '买入']
    stock_lhb_df.rename(columns={'买入金额': '龙虎榜买入金额'}, inplace=True)
    stock_lhb_df['股票代码'] = stock_lhb_df['股票代码'].apply(lambda x: x.split('.')[0])
    stocks_list = pd.merge(stock_list_df, stock_lhb_df, left_on='代码', right_on='股票代码', how='left')
    stocks_list['昨日龙虎榜'] = stocks_list['龙虎榜买入金额'].apply(lambda x: 'Y' if x > 0 else 'N')
    stocks_list.drop(columns=['股票代码', '龙虎榜买入金额'], inplace=True)
    result_df = pd.DataFrame()
    for code in stocks_list['代码']:
        k_data_df = ak.stock_zh_a_daily_em(symbol=code, adjust="qfq")
        k_data_df = k_data_df[k_data_df['成交量'] > 0]
        if len(k_data_df) < 10:
            continue
        rsi = talib.RSI(k_data_df['收盘'], timeperiod=14)
        if rsi.iloc[-1] >= 65:
            continue
        net_flow = ak.stock_individual_em_ggt_flow(code)
        if net_flow.iloc[-1]['净流入额'] <= 0:
            continue
        if stocks_list[stocks_list['代码'] == code]['昨日龙虎榜'].iloc[0] != 'Y':
            continue
        result_df = result_df.append(k_data_df)
    result_df['10日涨幅'] = ((result_df['收盘'] - talib.EMA(result_df['收盘'], timeperiod=10)) / talib.EMA(result_df['收盘'], timeperiod=10)).shift(1)
    result_df = get_ranking(result_df)
    return result_df
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论