(同花顺量化)2021年营收除2018年营收大于1

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

问财量化选股策略逻辑

选股逻辑:MACD零轴以上,高点为两日最高,2021年营收/2018年营收大于1.1。

选股逻辑分析

该选股逻辑结合技术指标和基本面指标进行选股,要求股票MACD零轴以上,高点为两日最高,且2021年营收/2018年营收大于1.1。此逻辑优化了选股策略中的基本面因素,更全面地反应了被选股票的绩效。故较之前方法更加具有综合性,适合中长线投资者使用。

有何风险?

该选股策略可能存在以下风险:

  1. 基于财务数据的营收增长率容易受到外界因素影响,例如宏观经济环境、行业政策等,存在一定误差。

  2. 基于财务数据的营收增长率只能反应部分公司绩效,不足全面反映公司绩效情况。

  3. 选股策略中的分母选取的过去2018年结算日末季度的营收不一定能反映公司的当前情况。

如何优化?

为减少风险,可以采用以下方式进行优化:

  1. 加入其他财务指标如利润增长率,资产负债率等指标,综合分析股票的基本面表现。

  2. 综合考虑因素后建立动态滚动时间轴,使策略能够避免被季节性和宏观影响而导致不准确。

  3. 确保财务数据的准确性和真实性。

最终的选股逻辑

优化后的选股逻辑如下:

选股逻辑:满足MACD零轴以上,高点为两日最高,2021年/2018年营收增长率大于1.1,同时加入其它基本面指标的辅助。

同花顺指标公式代码参考

  • MACD零轴以上:
    CROSS(JC, 0) AND DIFF > DEA

  • 高点为两日最高:
    H = HHV(HIGH,2)
    CROSS(H, REF(H, 1))

  • 2021年/2018年营收增长率大于1.1:
    DIV(SUM([COND(NOT(ISnull(COND(PERIOD=PERIOD.MINDAYS, growth_revenue, None)[0]) | ISnull(COND(PERIOD=PERIOD.MINDAYS,date=None),None))),CONDITION=COND(PERIOD=PERIOD.MINDAYS,growth_revenue,None)], 4), SUM([COND(date==date_adv(date, "-730"), revenue, None), CONDITION=(date>=date_adv(date, "-730"))], 4))

Python 代码参考

import pandas as pd
from jqdata import *
import talib as ta

def select_stock(context):
    q = query(
        valuation.code,
        valuation.market_cap,
        valuation.circulating_market_cap,
        stock_account.industry_code_name_1,
        fundamental.eps,
        indicator.inc_revenue_year_on_year
    ).filter(
        valuation.market_cap >= 500000000,
        valuation.circulating_market_cap >= 100000000,
        stock_account.exchanges != '北京A股'
    )
    df = get_fundamentals(q).sort_values(by=['market_cap', 'circulating_market_cap'])

    # MACD零轴以上
    macd_list = []
    for stock in df['code']:
        if df.loc[df['code'] == stock, 'macd'].iloc[-1] > 0:
            macd_list.append(stock)

    # 高点为两日最高
    top_point = []
    for stock in macd_list:
        x = attribute_history(stock, 2, '1d', ('high', 'close'))
        if x.high.iloc[-1] == max(x.high):
            top_point.append(stock)

    # 营收增长率大于1.1
    selected_stocks = []
    for stock in top_point:
        current_rev = df.loc[df['code']==stock, 'inc_revenue_year_on_year'].iloc[-1]
        prev_rev = df.loc[df['code']==stock, 'inc_revenue_year_on_year'].iloc[-3]
        if current_rev/prev_rev > 1.1:
            selected_stocks.append(stock)

    result = selected_stocks[:10]
    log.info("Chosen stocks:", result)
    return result
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论