(i问财选股策略)换手率3%-12%_、2021年营收除2018年营收大于1

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

问财量化选股策略逻辑

选股逻辑:MACD零轴以上、2021年营收/2018年营收大于1.1、换手率3%-12%。
选股逻辑作为第一个段落放入标题为 ## 问财量化选股策略逻辑 的段落中。分析以上的选股逻辑(每个逻辑以 "," 进行分隔),分析选股的逻辑(放入标题为 ## 选股逻辑分析 的段落),有什么风险?(放入标题为 ## 有何风险? 的段落)如何优化?(放入标题为 ## 如何优化? 的段落),并最终给出完善选股逻辑(放入标题为 ## 最终的选股逻辑 的段落),请使用markdown格式。

选股逻辑分析

该选股逻辑继续基于MACD指标和营收比较,加入了一个针对换手率的要求。选取MACD零轴以上、2021年营收/2018年营收大于1.1且换手率在3%~12%区间的股票进行投资。换手率的要求考虑了短期内投资者对该公司的情绪波动,挑选相对稳定的股票。

有何风险?

以下是该选股逻辑可能存在的一些风险:

  1. 选股逻辑仍然过于依赖营收比较,没有对其他基本面因素进行充分的考虑。
  2. MACD指标不一定准确,存在滞后和虚假信号的情况,需要结合其他指标使用。
  3. 换手率要求可能导致筛选结果过于严格,筛选出的股票可能过少。

如何优化?

以下是对该选股逻辑的优化建议:

  1. 加入其他技术指标和基本面指标,比如市盈率、市净率等指标,以便更全面的评估股票质量和风险。
  2. 应该加强对换手率的理解和研究,了解换手率的变化趋势和影响因素。根据实际情况调整筛选要求。
  3. 注意选股结果的多样性,避免股票过于集中在某一行业,风险过于集中。

最终的选股逻辑

选股结果包含MACD零轴以上、2021年营收/2018年营收大于1.1且换手率在3%~12%区间的股票。

同花顺指标公式代码参考

  • 选股公式:

SYMBOLINDUSTRYCATEGORY(1413) <> '投资公司' AND SYMBOLINDUSTRYCATEGORY(1413) <> '证券' AND SYMBOLINDUSTRYCATEGORY(1413) <> '银行' AND
CROSS(MACD(12,26),0) AND
REF(JAQS_SALES_OPER_REV, 4)/REF(JAQS_SALES_OPER_REV, 20) > 1.1 AND
HHV(BARSLAST(HIGH/REF(CLOSE,1)-1+1),5)<0.12 AND MAX(BARSLAST(VOLUME),5)>=1000000

python代码参考

def initialize(context):
    set_benchmark('000300.XSHG')
    set_commission(PerTrade(buy_cost=0.0003, sell_cost=0.0003, min_cost=5))
    set_slippage(PriceSlippage(0.002))
    set_option('avoid_future_data', True)
    g.capital_base = context.portfolio.starting_cash

def select_stock(context):
    stock_list = get_index_stocks('000300.XSHG')
    selected = []
    for stock in stock_list:
        if not is_element_of_valid_industry(context, stock):
            continue
        h = attribute_history(stock, 21*20, '1d', ('open', 'close', 'high', 'low', 'volume'), df=True)
        has_limit_up = max(h['close'][-20:]) / min(h['close'][-20:]) >= 1.0995
        # 预处理营收数据
        if len(h) < 21*20 or h['close'][-1] < 5 or h.isnull().values.any():
            continue
        fiscal_year_2018 = get_fiscal_quarter(h, 2018, 12)
        fiscal_year_2021 = get_fiscal_quarter(h, 2021, 12)
        if fiscal_year_2018 == fiscal_year_2021:
            continue
        revenue_ratio = fiscal_year_2021 / fiscal_year_2018
        # 选股
        if talib.CROSS(talib.MACD(h['close'], fastperiod=12, slowperiod=26, signalperiod=9), 0)[-1] \
                and revenue_ratio > 1.1 and 0.03 <= hhv_ratio(h) <= 0.12 \
                and talib.MAX(h['volume'][-5:], timeperiod=5)[-1] >= 1000000:
            selected.append(stock)
    return selected

def is_element_of_valid_industry(context, stock):
    if 'SYMBOLINDUSTRYCATEGORY' not in context.tdays[-1].asof_date.strftime('%Y-%m-%d'):
        data = get_fundamentals(query(
            SYMBOLINDUSTRYCATEGORY
        ).filter(
            SYMBOLINDUSTRYCATEGORY != '投资公司',
            SYMBOLINDUSTRYCATEGORY != '证券',
            SYMBOLINDUSTRYCATEGORY != '银行',            
            SEC_LISTED_DATE < context.now - timedelta(days=2*365)            
        ), date=context.now.strftime('%Y%m%d'))
        context.tdays[-1][data['symbol']] = data['SymbolIndustryCategory']
    return context.tdays[-1][stock] is not None

def get_fiscal_quarter(h, year, quarter):
    fiscal_quarter = h[
        (h.index.year == year) & (h.index.month >= quarter * 3 - 2) & (h.index.month <= quarter * 3)][-1:]
    return fiscal_quarter['close'].iloc[0]

def hhv_ratio(h):
    # 需求 5 天换手率不得超过 12%
    hhv_high = max(h['high'][-5:])
    hhv_ratio = hhv_high / h['close'][-1] - 1
    return hhv_ratio

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

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

        模板如何使用?

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


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

评论