(同花顺量化)2021年_、今日均线向上发散、rsi小于65

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

问财量化选股策略逻辑

选股逻辑:选取RSI小于65、今日均线向上发散、2021年涨幅排名前20%的股票。

选股逻辑分析

该选股逻辑同样考虑了股票价格的短期波动和长期趋势,同时还考虑了股票上涨的历史记录。RSI小于65、今日均线向上发散表明股票有一定的买入机会,2021年涨幅排名前20%表明该股票相比于市场平均水平有一定的业绩表现。

有何风险?

选股逻辑中涉及到的指标都较为短期,存在选到短期投机性股票的可能性。同时,2021年的业绩表现并不一定代表其未来的发展潜力,切勿盲目追高。

如何优化?

可以适当加入一些基本面指标,如市盈率、市净率等。同时,可以调整涨幅排名的比例,如将前30%或前40%作为选股标准,更好地平衡了业绩与估值因素。此外,可以对涨幅和股价等指标进行平滑处理,以避免市场波动对选股结果的影响。

最终的选股逻辑

选取RSI小于65、今日均线向上发散、2021年涨幅排名前30%的股票,并平均分配资金。

同花顺指标公式代码参考

  • RSI: RSI(14)
  • MA: MA(N)

Python代码参考

import pandas as pd
import tushare as ts
import datetime

def sort_by_turnover(stock_df):
    today_all_data = ts.get_today_all()
    today_all_data['流通市值'] = today_all_data['nmc'] / 100000000
    stock_df['流通市值'] = today_all_data['流通市值'][stock_df['股票代码'].apply(lambda x: x[2:])]
    stock_df = stock_df[stock_df['流通股本'] <= 5500000000]
    stock_df.sort_values(by='流通市值', ascending=False, inplace=True)
    return stock_df

def get_stock_list(rsi_threshold=65, ma_today_length=1, ma_short_length=10, ma_long_length=60, top_n=5, rank_threshold=0.3):
    stock_list = pd.DataFrame(columns=['股票代码', '名称', '流通股本'])
    start_date = datetime.date(2021, 1, 1)
    end_date = datetime.date(2022, 6, 30)
    for _, row in ts.get_today_all().iterrows():
        symbol = row['code']
        if row['code'][0] == '6':
            symbol = 'sh' + symbol
        else:
            symbol = 'sz' + symbol
        try:
            high, close, low = ts.get_hist_data(symbol, start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d'))[['high', 'close', 'low']].values[0]
            kline_today = ts.get_k_data(symbol=symbol, start=datetime.date.today()-datetime.timedelta(days=1), end=datetime.date.today())
            kline_past_25_days = ts.get_k_data(symbol=symbol, start=datetime.date.today()-datetime.timedelta(days=25), end=datetime.date.today())
            rank = (row['trade'] - row['pre_close']) / row['pre_close']
            if len(kline_today) == 0 or len(kline_past_25_days) == 0:
                continue
            open_price = kline_today.iloc[0]['open']
            pre_close_price = row['pre_close']
            if close <= talib.MA(close, timeperiod=ma_today_length).iloc[-1]:
                continue
            if abs(open_price - talib.MA(close, timeperiod=ma_short_length).iloc[-1]) > 0.02 * pre_close_price:
                continue
            if talib.STOCH(close, high=high, low=low)[-1][1] < talib.STOCH(close, high=high, low=low)[-2][1] and talib.STOCH(close, high=high, low=low)[-1][1] < talib.STOCH(close, high=high, low=low)[-1][2]:
                continue
            if RSI(close, timeperiod=14)[-1] > rsi_threshold:
                continue
            if rank < ts.get_hist_data(symbol, start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d'))['p_change'].quantile(1-rank_threshold):
                continue
            if close.iloc[-1] < talib.MA(close, timeperiod=ma_long_length).iloc[-1]:
                continue
            stock_list = stock_list.append({'股票代码': symbol, '名称': row['name'], '流通股本': row['totals'] * 10000}, ignore_index=True)
        except:
            continue

    stock_list = sort_by_turnover(stock_list)[:100]
    return stock_list[:top_n]
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论