(supermind)振幅大于1、近25个交易日有单日涨幅大于等于百分之10、9点25分涨

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

问财量化选股策略逻辑

选股逻辑:振幅大于1,近25个交易日有单日涨幅大于等于百分之10,9点25分涨幅小于6%。

选股逻辑分析

该选股逻辑在考虑了波动性和盈利性的同时,还加入了对时段和风险的管控,能找到相对低风险、具有增长性和超额收益能力的个股,关注了短期波动性和长期增长性两个方面。相较于仅关注技术指标或基本面的选股策略,该策略的分析维度更广,能够有效规避市场风险。

有何风险?

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

  1. 过于依赖单一交易时段进行选择,可能受到时段异质性的影响而出现错误的选股结果;
  2. 忽略了一些重要的基本面指标;
  3. 过于关注涨幅,忽略了结合相对估值因素的市场定价信息;
  4. 过于严格的选择标准,可能漏掉一些潜在有价值的股票。

如何优化?

为了缓解上述风险,可以考虑以下优化措施:

  1. 丰富选择维度,加入公司财务报表等基本面指标,如净利润增长率、财务稳定等;
  2. 结合技术形态指标,如均线、MACD等,综合考虑判断;
  3. 考虑行业因素,如行业标准PE、PEG等指标,以及和大盘的相关性;
  4. 降低选择标准,设置合理的阈值,增加一定的鲁棒性,可适当放宽振幅、涨幅等门槛。

最终的选股逻辑

基于上述考虑,我们综合出以下选股逻辑:

  1. 振幅大于1;
  2. 近25个交易日单日涨幅大于等于百分之10;
  3. 9点25分涨幅小于6%;
  4. 净利润增长率高于同行业平均水平;
  5. 财务稳定性高,债务率低于行业平均水平;
  6. 行业前景广阔,市场竞争优势明显。

同花顺指标公式代码参考

C1 = IF(HIGH-LOW>ATR(CLOSE,20),1,0);
C2 = IF(ABS((CLOSE-REF(CLOSE,1))/REF(CLOSE,1))>=0.1,1,0);
C3 = IF((OPEN-REF(CLOSE,1))/REF(CLOSE,1)<0.06,1,0);
C4 = IF((PRONETINC/TOT_ASSETS)>((SELECT INDUSTRY_PRONETINC FROM (SELECT * FROM TRADINGDATE WHERE IFTRADINGDAY=1 ORDER BY IFTRADINGDAY DESC LIMIT 25) T1 LEFT JOIN ASHAREBALANCESHEET T2 ON T1.TRADEDATE=T2.TRADEDATE AND S_INFO_WINDCODE=t1.S_INFO_WINDCODE ORDER BY IFTRADINGDAY DESC LIMIT 1)),1,0);
C5 = IF((DEBTTOASSET/TOT_LIAB)>((SELECT INDUSTRY_DEBTTOASSET FROM (SELECT * FROM TRADINGDATE WHERE IFTRADINGDAY=1 ORDER BY IFTRADINGDAY DESC LIMIT 25) T1 LEFT JOIN ASHAREBALANCESHEET T2 ON T1.TRADEDATE=T2.TRADEDATE AND S_INFO_WINDCODE=t1.S_INFO_WINDCODE ORDER BY IFTRADINGDAY DESC LIMIT 1)),1,0);
C6 = IF((S_INFO_EXCHANGE_BENCHMARK='000300.SH') AND ((SELECT INDUSTRY_PB FROM (SELECT * FROM TRADINGDATE WHERE IFTRADINGDAY=1 ORDER BY IFTRADINGDAY DESC LIMIT 25) T1 LEFT JOIN ASHAREBALANCESHEET T2 ON T1.TRADEDATE=T2.TRADEDATE AND S_INFO_WINDCODE=t1.S_INFO_WINDCODE ORDER BY IFTRADINGDAY DESC LIMIT 1))<((SELECT AVG(INDUSTRY_PB) FROM (SELECT * FROM TRADINGDATE WHERE IFTRADINGDAY=1 ORDER BY IFTRADINGDAY DESC LIMIT 25) T1 LEFT JOIN ASHAREBALANCESHEET T2 ON T1.TRADEDATE=T2.TRADEDATE AND S_INFO_WINDCODE=t1.S_INFO_WINDCODE)),1,0);
C7 = IF((PRONETINC/TOT_ASSETS)<((SELECT INDUSTRY_PRONETINC FROM (SELECT * FROM TRADINGDATE WHERE IFTRADINGDAY=1 ORDER BY IFTRADINGDAY DESC LIMIT 25) T1 LEFT JOIN ASHAREBALCF T2 ON T1.TRADEDATE=T2.TRADEDATE AND S_INFO_WINDCODE=t1.S_INFO_WINDCODE ORDER BY IFTRADINGDAY DESC LIMIT 1)),1,0);
SELECTOR = C1*C2*C3*C4*C5*C6*C7;
RESULT = SORT_RANK(SELECTOR,DESCEND(HEAT));

python代码参考

import pandas as pd
import numpy as np
import talib as ta

df = pd.read_csv('your_data.csv', index_col='date')

def net_profit_growth(df, n):
    industry_g = df['industry_pronetinc'].iloc[-1]
    g = (df['pronetinc'][-1]/df['tot_assets'][-1]) / industry_g
    return g > 1

def financial_stability(df, n):
    industry_db = df['industry_debttoasset'].iloc[-1]
    db = df['debttoasset'][-1]/df['tot_liab'][-1]
    return db < industry_db

def market_competitive(df, n):
    industry_pb_avg = df['industry_pb'].mean()
    pb = df['pb'][-1]
    return (df['s_info_exchange_benchmark'][0] == '000300.SH') and (pb < industry_pb_avg)

def future_prospects(df, n):
    industry_g = df['industry_pronetinc'].iloc[-1]
    g = (df['pronetinc'][-1]/df['tot_assets'][-1]) / industry_g
    return g < 1

C1 = np.where(df['high'] - df['low'] > ta.atr(df['close'], 20), 1, 0)
C2 = np.where(abs((df['close'] - df['close'].shift(1)) / df['close'].shift(1)) >= 0.1, 1, 0)
C3 = np.where((df['open'] - df['close'].shift(1)) / df['close'].shift(1) < 0.06, 1, 0)
C4 = np.where(net_profit_growth(df, 25), 1, 0)
C5 = np.where(financial_stability(df, 25), 1, 0)
C6 = np.where(market_competitive(df, 25), 1, 0)
C7 = np.where(future_prospects(df, 25), 1, 0)

selector = C1 * C2 * C3 * C4 * C5 * C6 * C7
result = df.sort_values(by='heat', ascending=False).index[np.argsort(np.argsort(selector))]
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论