(同花顺量化)15分钟周期MACD绿柱变短_、PE_0、rsi小于65

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

问财量化选股策略逻辑

选股逻辑:选取RSI小于65、PE大于0,15分钟周期MACD绿柱变短的股票。

选股逻辑分析

该选股策略是在RSI和PE的基础上加入了技术面指标MACD,通过观察15分钟周期MACD绿柱的长度,筛选出短期趋势反转或回调后可能有反弹机会的股票。

有何风险?

选择15分钟周期进行选股可能会较易受到噪音的影响,且相对于较长周期如日线、周线等,更容易出现短期波动,因此需要加强风险控制。

如何优化?

可以考虑选取多个周期的MACD指标同时进行判断,同时结合其他技术面指标如KDJ等进行筛选,增加选股得票的可信度。

最终的选股逻辑

选取RSI小于65、PE大于0,多周期MACD均绿柱变短,结合技术面和基本面指标,综合考虑选出潜力较大的股票。

同花顺指标公式代码参考

  • RSI:RSI(14)
  • PE:pe_ttm
  • MACD:MACD(12, 26, 9)

Python代码参考

import pandas as pd
import tushare as ts
import talib

def get_stock_list(rsi_threshold=65, pe_threshold=0, macd_periods=[15], universe_threshold=0, top_n=5):
    stock_list = pd.DataFrame(columns=['股票代码', '名称', '流通股本'])
    for _, row in ts.get_today_all().iterrows():
        symbol = row['code']
        if not (symbol.startswith('300') or symbol.startswith('688')):
            if symbol.startswith('60') or symbol.startswith('00'):
                if symbol[0] == '6':
                    symbol = 'sh' + symbol
                else:
                    symbol = 'sz' + symbol
                try:
                    rsi = talib.RSI(ts.get_k_data(symbol, end=datetime.date.today())['close'], timeperiod=14)[-1]
                    if rsi > rsi_threshold:
                        continue

                    if float(row['pe_ttm']) < pe_threshold:
                        continue

                    macd_data = ts.get_k_data(symbol, ktype='15', end=datetime.date.today())[['close']]
                    for period in macd_periods:
                        macd_data[f'macd_{period}'] = talib.MACD(macd_data['close'], fastperiod=12, slowperiod=26, signalperiod=9)[2]
                        macd_data[f'diff_{period}'] = talib.MACD(macd_data['close'], fastperiod=12, slowperiod=26, signalperiod=9)[0]
                        macd_data[f'dealine_{period}'] = talib.MACD(macd_data['close'], fastperiod=12, slowperiod=26, signalperiod=9)[1]

                        if macd_data[f'macd_{period}'].iloc[-1] > 0:
                            continue

                        n_index = 0
                        while macd_data[f'diff_{period}'].iloc[-1-n_index] > macd_data[f'dealine_{period}'].iloc[-1-n_index]:
                            n_index += 1
                            if n_index >= len(macd_data):
                                break

                        if n_index <= 2:
                            stock_list = stock_list.append({'股票代码': symbol[:6], '名称': row['name'], '流通股本': row['totals'] * 10000}, ignore_index=True)
                            break
                except:
                    continue

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

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

    模板如何使用?

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


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

评论