问财量化选股策略逻辑
选股逻辑:振幅大于1,今日控盘>21,500日内至少2次涨停。
选股逻辑分析
该选股逻辑主要依据了三个指标,市场资金的波动、市场情绪和股票表现指标。通过该选股逻辑,我们可以筛选出价格波动性较高、市场人气较高、股票近期表现较强的优质股票。
有何风险?
该选股逻辑可能存在以下风险:
- 个股涨停次数的判断标准过于苛刻:500日内至少2次涨停的标准较为苛刻,可能使得一些优质股票被排除在筛选范围之外;
- 对股票质量的要求不够严格:在选股中没有引入股票的基本面因素,该选股逻辑可能会挑选出一些股票的质量不够高、基本面不太稳定的个股;
- 过度关注短期表现:该选股策略依据的主要是股票的短期表现(涨停次数),而忽略了股票的长期表现和市场长期趋势。
如何优化?
为了降低风险和提高策略的精度,我们可以通过以下措施进行优化:
- 合理调整涨停次数标准:根据市场情况和行业特性,适当放宽涨停次数的标准,以纳入更多的低估值、高成长的优质股票;
- 引入基本面因素:在选股中引入更多的基本面和行业趋势等变量,优化选股标准,从而挑选出基本面更加稳健、质量更高的优质股票;
- 适量关注长期表现:在确定投资标的时,要不断关注股票的长期表现和市场长期趋势,从而自我约束,避免过度集中于短期表现。
最终的选股逻辑
综上所述,我们最终选择以下选股逻辑:
- 振幅大于1;
- 今日控盘大于21;
- 500日内涨停次数不少于2次;
- 股票市净率位于市场第一四分位数以下,市盈率(TTM)位于市场第一四分位数以下。
同花顺指标公式代码参考
C1 = AMP() > 1;
C2 = CONTROLLING_SHARES_DAY_CHG() > 21;
REF_LIMIT = 500;
C3 = (HHV(MAX(CLOSE,REF(HIGH,1)),REF_LIMIT) == HHV(MAX(CLOSE,REF(HIGH,1)),REF_LIMIT-1)) AND \
(COUNT(HHV(MAX(CLOSE,REF(HIGH,1)),REF_LIMIT-1) == REF(HIGH,1),REF_LIMIT-1) >= 2);
C4 = PB() < first_quartile(PB()) AND PE_TTM() < first_quartile(PE_TTM());
SELECTOR = C1 AND C2 AND C3 AND C4;
RESULT = SORT(RANK(SELECTOR), 1)==1;
python代码参考
def select_stocks():
selected_stocks = []
all_trading_days = get_all_trade_days()
all_trading_days = sorted(all_trading_days, reverse=True)
for stock in get_all_stocks():
c1 = get_price(stock, end_date=datetime.now(), frequency='1d', fields='amplitude')[-1] > 0.01
c2 = abs(get_controlling_shareholders(stock, end_date=datetime.now(), frequency='1d')['controlling_shareholders_day_pct_change'][-1]) > 0.21
ref_limit = 500
high_array = get_high(stock, end_date=datetime.now(), count=ref_limit+1)
close_array = get_close(stock, end_date=datetime.now(), count=ref_limit+1)
c3 = (max(close_array[-ref_limit:]) == max(high_array[-ref_limit:-1])) and (sum([1 if max(close_array[-i-1:-1]) == high_array[-i-2] else 0 for i in range(ref_limit-1)]) >= 2)
data = get_fundamentals(query(valuation).filter(valuation.code == stock), date=datetime.now())
if not data.empty:
c4 = data['valuation_pb'][0] < np.percentile(get_fundamentals(query(valuation).filter(valuation.timestamp >= (datetime.now() - timedelta(days=120))), date=datetime.now(), count=120)['valuation_pb'], 25) and \
data['valuation_pe_ratio'][0] < np.percentile(get_fundamentals(query(valuation).filter(valuation.timestamp >= (datetime.now() - timedelta(days=120))), date=datetime.now(), count=120)['valuation_pe_ratio'], 25)
if c1 and c2 and c3 and c4:
selected_stocks.append(stock)
selected_stocks = sorted(selected_stocks, key=lambda x: get_price_change(x, 1, datetime.now(), frequency='1d'), reverse=True)
return selected_stocks[:5]
result = select_stocks()
print(result)
以上Python代码仅供参考,具体实现还需要根据自己的需求进行调整。
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
