(iwencai量化)非ST(10点之前选股票)五部涨停战法_、深证主板中市盈率0-29

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

问财量化选股策略逻辑

选股逻辑:选择RSI小于65的股票,深证主板中市盈率在0-29.01之间,市净率在0-3.11之间,非ST,并且是当天尚未涨停且最近5个交易日内涨幅不超过50%的股票。

选股逻辑分析

该策略加入了股票涨幅和停牌的考虑,更加全面考虑到了股票的整体估值和市场走势。同时,非ST的条件则排除了高风险的股票。选股时间为早晨10点之前,避免了市场的短期波动对策略的干扰。

有何风险?

该选股策略依然存在市场风险和股票特征风险,需要过滤掉那些不适合特定市场情况的股票。同时,也需要注意虚假突破和过拟合的风险。

如何优化?

可以通过加入其他的选股条件和筛选规则,例如可以考虑加入更加精准的涨幅和股票估值的条件,或者加入分析师预测和市场情绪的考虑。同时,也可以对期望收益和风险进行相应的调整和平衡。

最终的选股逻辑

选股逻辑:选择RSI小于65的股票,深证主板中市盈率在0-29.01之间,市净率在0-3.11之间,非ST,并且是当天尚未涨停且最近5个交易日内涨幅不超过50%的股票。

同花顺指标公式代码参考

  • RSI小于65:RSI(C, 14) < 65
  • 深证主板中市盈率0-29.01:PE > 0 AND PE < 29.01
  • 市净率0-3.11:PB > 0 AND PB < 3.11
  • 非ST:NOT(ST)
  • 当天尚未涨停:CLOSE<REF(MAX(CLOSE,1),1.09)
  • 近5个交易日内涨幅不超过50%:CHANGE(CLOSE,5)<=50

python代码参考

import pandas as pd
import tushare as ts
from stockstats import StockDataFrame

# 连接tushare并获取股票基本信息
token = 'token'
pro = ts.pro_api(token)
# 选择深圳主板
basic = pro.stock_basic(exchange='SZSE', list_status='L', fields='ts_code,symbol,name,area,industry,pe,roe,eps')

# 初始化条件
rsi_threshold = 65
pe_low = 0
pe_high = 29.01
pb_low = 0
pb_high = 3.11
change_threshold = 50
limit_threshold = 1.09
stop_name = 'ST'

# 性能更高的stockstats包计算技术指标
def calculate_technical_indicators(ts_code):
    tech = pro.query('daily', ts_code=ts_code)
    if tech.empty: return None
    # 将dataframe转化为stockdataframe
    sdf = StockDataFrame.retype(tech)
    # 计算指标
    sdf['macd']  # MACD指标
    sdf['kdjk']  # KDJ指标
    # 更多指标可参考:https://pypi.org/project/stockstats/
    return sdf

# 判断是否符合当天尚未涨停的条件
def judge_not_limit(today, last):
    if last <= 0: return True
    return today/last < limit_threshold

# 判断是否符合涨幅条件
def judge_change(ts_code):
    df = pro.query('daily', ts_code=ts_code, fields='close')
    if df.empty: return False
    # 计算近5个交易日涨幅
    change = (df['close'].iloc[-1] - df['close'].iloc[-5]) / df['close'].iloc[-5] * 100
    return change <= change_threshold

# 遍历每支股票
result = []
for code in basic['ts_code']:
    # 判断条件
    finance = pro.query('daily_basic', ts_code=code, fields='pe,pb')
    if finance.empty: continue
    pe = finance['pe'].iloc[-1]
    pb = finance['pb'].iloc[-1]
    if pe < pe_low or pe > pe_high or pb < pb_low or pb > pb_high: continue
    if stop_name in basic[basic['ts_code'] == code].iloc[0]['name']: continue
    # 判断是否符合涨幅条件
    if not judge_change(code): continue
    # 判断是否符合当天尚未涨停的条件
    today = pro.query('daily', ts_code=code, fields='close', trade_date='20220414')['close'].iloc[0]
    last = pro.query('daily', ts_code=code, fields='close', trade_date='20220413')['close'].iloc[0]
    if not judge_not_limit(today, last): continue
    # 计算RSI指标
    tech = calculate_technical_indicators(code)
    if tech is None: continue
    rsi = tech['rsi_14'].iloc[-1]
    if rsi >= rsi_threshold: continue
    result.append([code, basic[basic['ts_code'] == code].iloc[0]['name'], today])
# 按竞价金额降序排序,取前5
result_df = pd.DataFrame(result, columns=['代码', '名称', '竞价金额'])
result_df = result_df.sort_values('竞价金额', ascending=False).iloc[:5, :]
result_df.to_excel('result.xlsx', index=False)
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论

需要帮助?

试试AI小助手吧