问财量化选股策略逻辑
该选股策略包括三个条件:
- 振幅大于1;
- 至少5根均线重叠的股票;
- 10天内涨停天数大于2。
选股逻辑分析
该选股策略在价格形态的控制上更加严格,需要股票出现相对明显的上涨趋势和强劲的市场热度,有可能筛选出一些短期涨幅较大的股票。此外,该策略对与均线和振幅的筛选条件和前面的策略类似,具有较强的稳定性和可操作性。
有何风险?
该策略可能会忽略掉一些慢涨股票和阶段性回调的股票,过于依赖短期市场热度和涨停板现象,需谨慎操作。此外,过于严格的技术条件会导致筛选出来的股票数量偏少,不能像其他量化选股策略一样有效地防范市场风险。
如何优化?
为了提高选股策略的准确性和稳健性,可以在价格形态和市场热度方面加入更多指标进行优化。可以考虑加入技术类指标,例如相对强弱指数、协整模型等,以及参考基本面数据进行策略补充。此外,可以适当放宽热度、涨停板和均线等指标的限制,以扩大筛选范围。总之,需要根据实际市场变化不断优化策略。
最终的选股逻辑
综合分析和前几个策略建议,建议该选股策略的逻辑为:
- 振幅大于1;
- 至少5根均线重叠;
- 近10天内涨停天数大于2;
- 相对强弱指数大于0.7;
- 市盈率小于30。
同花顺指标公式代码参考
- 日线振幅:(HIGHEST(high,20)-LOWEST(low,20))/REF(CLOSE,1);
- 均线:MA(CLOSE,M),M为参数,可以自行设置。
python代码参考
import pandas as pd
import tushare as ts
import talib
def get_stock_pool(date):
# 获取所有股票代码
df = ts.get_stock_basics()
codes = df.index.tolist()
result = pd.DataFrame()
for code in codes:
# 上市不足60天的股票忽略
if (pd.to_datetime(date) - pd.to_datetime(df.loc[code]['timeToMarket'])).days <= 60:
continue
# 规模筛选
total_mv = df.loc[code]['totalAssets'] * df.loc[code]['pb']
if total_mv < 2e8:
continue
bars_all = ts.get_k_data(code, '2022-01-01', date)
if bars_all is None or bars_all.empty or len(bars_all) < 2:
continue
# 20日均线和120日均线
close = bars_all['close'].values
ma_20 = talib.MA(close, timeperiod=20)
ma_120 = talib.MA(close, timeperiod=120)
is_ma_up = ma_20[-1] > ma_120[-1]
high, low, close = bars_all['high'].values, bars_all['low'].values, bars_all['close'].values
amplitude = (high - low) / close[:-1]
is_amplitude_large = amplitude.max() > 0.008
# 至少5根均线重叠
ma_5 = talib.MA(close, timeperiod=5)
ma_10 = talib.MA(close, timeperiod=10)
ma_20 = talib.MA(close, timeperiod=20)
ma_30 = talib.MA(close, timeperiod=30)
ma_count = len(set([ma[-1] for ma in [ma_5, ma_10, ma_20, ma_30]]))
is_ma_converge = ma_count >= 5
# 近10天内涨停天数大于2
up_limit_days_10 = len(bars_all[bars_all['p_change'] == 10])
is_up_limit_days_large = up_limit_days_10 > 2
# 相对强弱指数大于0.7
rsi = talib.RSI(close, timeperiod=14)[-1]
is_rsi_up = rsi > 70
# 市盈率小于30
pe = df.loc[code]['pe']
is_pe_low = pe < 30
if is_amplitude_large and is_ma_converge and is_up_limit_days_large and is_rsi_up and is_pe_low:
result = result.append({'code': code, 'name': df.loc[code]['name'], 'price': bars_all['close'].iloc[-1], 'vol': df.loc[code]['volume']},ignore_index=True)
result = result.sort_values(by=['vol'], ascending=False)
return result
注:此函数用于在某个日期获取备选股票池,返回dataframe,包括代码、名称、最新价格、热度等信息。其中涉及的均线、振幅、市值、相对强弱指数、市盈率等指标可以参考TALib和tushare。具体市值筛选和指标选取标准可根据实际需求选取。
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
