(同花顺量化)10天内涨停天数大于2_、资金强度由大到小、macd零轴以上

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

问财量化选股策略逻辑

选股逻辑:MACD零轴以上,资金强度由大到小,10天内涨停天数大于2的股票

选股逻辑分析

该选股逻辑在基于技术指标和市场环境的基础上,综合考虑了资金流向和市场热度的因素。通过涨停天数的筛选,可以过滤掉短期内涨幅过高、风险较大的股票,增加选出趋势明显、强势股票的概率,同时能够提高选股的准确性和可靠度。但是该选股逻辑依赖于市场热度的因素,可能存在一些不确定性。

有何风险?

该选股逻辑可能存在以下风险:

1.涨停的天数可能会受到市场情绪和投机因素的影响,可能导致选出的股票存在过度热度的情况;

2.选股过程中可能会忽略了一些其他重要的技术指标或基本面因素,导致选出的股票风险隐患较多;

3.考虑的因素相对较少,定位局限性较大。

如何优化?

为克服上述风险,可以优化选股策略,例如:

1.综合考虑更多的市场因素,如市场情绪、基本面、资金流向等,多维度综合考虑,减小不确定性;

2.加入一些其他重要的技术指标,如均线、RSI、KD等,加强对市场的趋势判断;

3.注意选股结果的实际业绩,对模型进行进一步修正。

最终的选股逻辑

综合以上分析,我们得到最终的选股逻辑:

选股逻辑:MACD零轴以上,资金强度由大到小,10天内涨停天数大于2的股票,综合考虑其他市场因素进行筛选。

同花顺指标公式代码参考

MACD零轴以上

REF(CLOSE, 1) < REF(MA(CLOSE, 15), 1) AND
CLOSE > MA(CLOSE, 15) AND
MACD(12, 26, 9) > 0 AND
REF(MACD(12, 26, 9), 1) < 0

资金强度由大到小

资金流强度(30)
SZ#

10天内涨停天数大于2

COUNT(REF(HIGH==LIMITUP, 1), 10) > 2

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,
        valuation.pe_ratio,
        valuation.pb_ratio,
        indicator.roe
    ).filter(
        valuation.market_cap >= 200000000,
        valuation.circulating_market_cap >= 200000000,
        valuation.pe_ratio > 0,
        valuation.pb_ratio > 0,
        indicator.roe > 10
    )
    df = get_fundamentals(q)
    df = df[df.apply(lambda x: x.code[:2] in ['00', '30'], axis=1)]
    df = df[df.apply(lambda x: x.code[0] != '3' or x.code[:3] in ['300', '301', '302'], axis=1)]
    stock_list = list(df['code'])

    # MACD零轴以上
    macd_list = []
    for stock in stock_list:
        close = get_price(stock, end_date=context.current_dt, frequency='daily', fields='close', count=200)['close']
        macd, signal, _ = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9) 
        if macd[-1] > signal[-1] and macd[-2] < signal[-2]:  # MACD金叉
            macd_list.append(stock)

    # 资金流强度由大到小
    strong_fund = []
    for stock in macd_list:
        x = get_money_flow(stock, end_date=context.current_dt, count=30, fields=['main_fund_in', 'main_fund_out', 'turnover_ratio'])
        turnover_rate = x.turnover_ratio.mean()
        if x.main_fund_in.rolling(5).sum().iloc[-1] > x.main_fund_out.rolling(5).sum().iloc[-1]:
            strong_fund.append([stock, turnover_rate])
    strong_fund = sorted(strong_fund, key=lambda x: x[1], reverse=True)

    # 10天内涨停天数大于2
    chosen_list = []
    for stock in strong_fund:
        max_high = get_price(stock[0], end_date=context.current_dt, frequency='daily', fields='high', count=10)
        if (max_high == max_high.max()).sum() > 2: # 涨停了超过2次
            chosen_list.append(stock[0])

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

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

    模板如何使用?

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


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

评论