问财量化选股策略逻辑
选股逻辑为:在换手率3%-12%、10日涨幅大于0小于35,且KDJ刚形成金叉的情况下选出符合条件的股票。
选股逻辑分析
该选股逻辑综合考虑了技术面的因素和市场趋势,通过KDJ指标的金叉来判断股票的趋势方向和变化,辅助股票的选取。但是,此种选股逻辑选出的股票,较为偏向短期持有,且过于依赖技术面指标,忽略了股票的长期基本面因素。因此,此种选股策略的作用主要是供短线交易者使用。
有何风险?
选股只依照技术指标容易受到市场波动或突发事件的影响而出现盲目建仓或爆仓的风险。KDJ指标的金叉或死叉并不是绝对的买点或卖点,走势中不确定因素仍然会影响股票的收益。
如何优化?
可以了解并添加更多基本面、财务报表等指标,结合市场宏观环境和相关概念股板块做趋势分析,从长期角度考虑选股策略,提高选股质量和可靠性。
最终的选股逻辑
选出符合换手率为3%-12%、10日涨幅大于0小于35,且KDJ指标刚形成金叉的股票。
同花顺指标公式代码参考
KDJ函数计算公式:
13天RSV=(收盘价-N日内最低价)÷(N日内最高价-N日内最低价)×100
N天K值=前一日K值×2÷3+当日RSV×1÷3
N天D值=前一日D值×2÷3+当日K值×1÷3
M天的RSV=(Ct-Ln)÷(Hn-Ln)×100
若M天指标还未成熟,先作如下修整:
①、当日N值 = 前N-1天的N值 /(N-1)×(N -2) / (N + 1) + 2÷(N+1)×当日RSV
②、当日D值 = 前M-1天的D值 / (M -1)×(M -2)/(M + 1)+2÷(M + 1)×当日K值
③、J = 3 x 当日K值 -2 ×当日D值
Python代码参考
import tushare as ts
# 获取符合条件的股票
def get_good_stocks():
good_list = []
# 获取正常股票
ts.set_token('your token')
pro = ts.pro_api()
stock_list = pro.stock_basic(exchange='SZSE', list_status='L', fields='ts_code,industry,mkt_cap_ard,list_date,circ_mv')['ts_code']
for ts_code in stock_list:
if ts_code.startswith('300') or ts_code.startswith('688'): # 筛选创业板和科创板股票
continue
elif pro.daily(ts_code=ts_code, start_date='20211001', end_date='20211020').empty: # 筛选数据存在日期
continue
elif pro.namechange(ts_code=ts_code) and pro.namechange(ts_code=ts_code)['name'].iloc[0].find('ST') >= 0: # 筛选非ST股票
continue
elif (time.time() - time.mktime(time.strptime(str(pro.stock_basic(ts_code=ts_code, fields='list_date').iloc[0]['list_date']), "%Y%m%d"))) / (365*24*60*60) < 1: # 筛选上市时间大于一年的股票
continue
elif pro.stock_basic(ts_code=ts_code, fields='circ_mv').iloc[0]['circ_mv'] < 1e10 or pro.stock_basic(ts_code=ts_code, fields='circ_mv').iloc[0]['circ_mv'] > 5.5e10: # 过滤小市值和大市值股票
continue
# 筛选符合条件的股票
daily_data = pro.daily(ts_code=ts_code, start_date='20211026', end_date='20211030')
if daily_data.empty:
continue
elif daily_data.iloc[-1]['pct_chg'] not in range(0, 35):
continue
elif daily_data.iloc[-1]['turnover_rate'] < 0.03 or daily_data.iloc[-1]['turnover_rate'] > 0.12:
continue
else:
daily_trade_detail = pro.daily_basic(ts_code=ts_code, start_date='20211001', end_date='20211030')
k, d, j = talib.STOCH(high=daily_trade_detail['high'].values, low=daily_trade_detail['low'].values, close=daily_trade_detail['close'].values, fastk_period=9, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
j_diff = j[-1] - j[-2]
if j_diff > 0 and j[-1] < 20:
good_list.append(ts_code)
return good_list
good_stocks = get_good_stocks()
print(good_stocks)
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
