(同花顺量化)30日平均线向上_、深证主板中市盈率0-29

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

问财量化选股策略逻辑

选股逻辑:选择RSI小于65的股票,深证主板中市盈率在0-29.01之间,市净率在0-3.11之间,30日平均线向上的股票。

选股逻辑分析

该选股策略在技术面和基本面综合考虑,技术面选取股价上涨势头强劲的股票,同时结合RSI指标判断股票的超买和超卖情况,同时观察30日均线趋势;基本面选取市盈率和市净率在合理范围内,同时结合流通市值,寻找具有一定规模和稳定性的股票。

有何风险?

该选股逻辑同样较为依赖技术面和市场行情,当市场行情异常时容易出现选股不准确的情况,造成选股风险增大。同时,加入30日均线向上条件的选股逻辑较为简单,可能会忽略掉一些重要的因素,如股票的资金流入情况、公司的业绩和发展前景等。

如何优化?

在保留已有指标的基础上,可以加入其他技术指标或相对强弱指标,如MACD、KDJ等,以更好地评估股票的近期表现和趋势。同时,可以将选股逻辑细化,结合不同情况下的技术指标,减少盲目操作。在基本面方面,可以考虑加入其他因素,如股票的财务状况、业绩增长等。可以通过增加过滤条件对选股结果进行限制,以减少不必要的风险。

最终的选股逻辑

选股逻辑:选择RSI小于65的股票,深证主板中市盈率在0-29.01之间,市净率在0-3.11之间,30日均线向上的股票。

同花顺指标公式代码参考

  • RSI小于65: RSI(C, 14) < 65
  • 深证主板中市盈率0-29.01: PE>0 AND PE<29.01
  • 市净率0-3.11: PB>0 AND PB<3.11
  • 30日平均线向上: MA(C, 30) > MA(C, 60)

python代码参考

import pandas as pd
import tushare as ts
import numpy as np

# 连接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,circ_mktcap')

# 初始化条件
rsi_threshold = 65
pe_low = 0
pe_high = 29.01
pb_low = 0
pb_high = 3.11

# 遍历每支股票
result = []
for code in basic['ts_code']:
    # 判断条件
    finance = pro.query('daily_basic', ts_code=code, fields='pe,pb,circ_mktcap')
    if finance.empty: continue
    pe = finance['pe'].iloc[-1]  # 取最新的市盈率
    pb = finance['pb'].iloc[-1]  # 取最新的市净率
    circ_mktcap = finance['circ_mktcap'].iloc[-1]  # 取最新的流通市值
    if pe < pe_low or pe > pe_high or pb < pb_low or pb > pb_high or circ_mktcap < circ_mktcap_low or circ_mktcap > circ_mktcap_high: continue
    tech = pro.query('daily', ts_code=code, fields='open,high,low,close')
    if tech.empty: continue
    # 计算指标并判断是否符合条件
    close_price = tech['close'].iloc[-1]
    ma_30 = tech['close'].rolling(window=30).mean().iloc[-1]  # 计算30日均线
    ma_60 = tech['close'].rolling(window=60).mean().iloc[-1]  # 计算60日均线
    if close_price <= tech['low'].shift(1).iloc[-1] or ma_30 <= ma_60: continue  # 收盘价大于昨日的最低价且30日均线向上
    # 计算RSI指标
    chg = tech['close'].diff(1)
    gain = chg.where(chg > 0, 0)
    loss = -chg.where(chg < 0, 0)
    avg_gain = gain.rolling(14).mean()
    avg_loss = loss.rolling(14).mean()
    rs = avg_gain / avg_loss
    rsi = 100 - (100 / (1 + rs))
    if rsi.iloc[-1] < rsi_threshold:
        result.append([code, basic[basic['ts_code'] == code].iloc[0]['name']])
# 将符合条件的代码和名称加入结果列表
result_df = pd.DataFrame(result, columns=['代码', '名称'])
result_df.to_excel('result.xlsx', index=False)
    ## 如何进行量化策略实盘?
    请把您优化好的选股语句放入文章最下面模板的选股语句中即可。

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

    模板如何使用?

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


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

评论