问财量化选股策略逻辑
选股逻辑:选择RSI小于65,集中度70%以上和20%以下,10天内涨停天数大于2的股票。
选股逻辑分析
该选股逻辑认为,选择RSI小于65的股票可以筛选出近期表现相对较弱的个股,同时集中度70%以上和20%以下可以提高选股结果的稳定性和多样性。选择10天内涨停天数大于2的股票,可以提高股票的超额涨幅概率,适用于追求高收益的投资者。该策略适用于追求高收益并对股票市场整体估值持谨慎态度的投资者。
有何风险?
该选股逻辑存在以下风险:
- 基于涨停天数进行选股,有可能会忽略股票基本面等其他因素,例如一些持续性较强的个股可能会被排除在外,有可能会存在过度追求短期投机性的情况。
- 波动性较大时,短期涨停天数有可能出现一定的误差,影响选股结果。
- 集中度的计算方式可能存在一定局限性,对一些特殊的行业(如新能源汽车等)的选股可能会不够准确。
如何优化?
- 综合考虑股票市场基本面和技术面,加入其他指标进行选股,提高策略的全面性和准确性。
- 考虑增加一些规模和收益率等因素进行综合考虑,筛选更适合的股票。
- 优化集中度的计算方式,根据不同行业的股票选取不同的集中度计算方式,提高选股结果的准确性和稳定性。
最终的选股逻辑
选择RSI小于65,集中度70%以上和20%以下,10天内涨停天数大于2的股票。
同花顺指标公式代码参考
SELECTED_STOCKS = RSI < 65 AND ((CYCLEONE_INDUTRY_RATIO > 0.7) OR (CYCLEONE_INDUTRY_RATIO < 0.2)) AND SUM(IF((CLOSE=REF(HIGH,1)) || (HIGH=REF(HIGH,1)), 1, 0), 10) > 2
CAN_SELECTED = SELECTED_STOCKS.ORDERBY(STOCK_HOT, ASCENDING)
注:其中,STOCK_HOT指股票的热度值,需要事先进行计算。
python代码参考
from jqdata import *
import talib
# 定义选股条件
def select_condition(context):
# 获取所有A股股票
q = query(
valuation.code,
valuation.market_cap,
finance.SW1_CODE,
indicator.bid_per_winner,
indicator.csi500_weight,
indicator.status,
volume,
indicator.list_date,
indicator.net_amount_main // 10000,
indicator.trade_time,
).filter(
finance.SW1_CODE != '751030', # 排除科创板
indicator.status == 1, # 当前股票不停牌
valuation.market_cap > 200000000, # 市值规模大于2亿
)
# 按市值排序并筛选出前5
all_stocks = get_fundamentals(q).sort_values('market_cap', ascending=False)[:5]
# 获取选股结果
selected_stocks = all_stocks.loc[talib.RSI(get_bars(all_stocks['code'].tolist(), context.window, '1d', ['high', 'low', 'close'])['close'], timeperiod=14).iloc[-1] < 65]
selected_stocks = selected_stocks.loc[(CYCLEONE_INDUTRY_RATIO > 0.7) | (CYCLEONE_INDUTRY_RATIO < 0.2)]
selected_stocks = selected_stocks.loc[(get_trade_days(selected_stocks.iloc[-1]['list_date'],selected_stocks.iloc[-1]['trade_time'],selected_stocks.iloc[-1]['list_date']+dt.timedelta(days=10)).isin(get_trade_days(selected_stocks.iloc[-1]['list_date'], context.now.date()))) & (get_bars(selected_stocks['code'].tolist(),context.window,'1d',['high','close']).eval('(close==shift(high,1)) | (high==shift(high,1))').resample('D').sum().iloc[-10:].sum() > 2)]
return selected_stocks
# 获取选股结果
def select_stocks(context):
selected_stocks = select_condition(context)
return selected_stocks
# 注册选股函数
m = M.instruments(v['margin'])
m.add_strategy(select_stocks, force=True)
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


