问财量化选股策略逻辑
选股逻辑为:选择换手率在3%~12%、买一量大于卖一量、同时满足三个技术指标金叉的股票。
选股逻辑分析
该选股策略不仅考虑了交易活跃度和市场需求,还考虑了股票的技术面情况,通过同时金叉三个技术指标可以进一步筛选出强势股票,有助于获取更好的收益。
有何风险?
该选股逻辑仍然比较简单,可能无法全面反映公司的基本面情况,同时可能存在过度拟合的情况,把优秀的历史表现当做未来的基础。
如何优化?
可以选取更多或者更细致的技术指标;同时引入公司财务和业绩等基本面指标到选股策略中进行筛选。
最终的选股逻辑
在众多股票中选择换手率在3%~12%之间、买一量大于卖一量、且同时满足三个技术指标(如MACD、KDJ、RSI等)金叉的股票。
同花顺指标公式代码参考
SELECT * FROM
(SELECT * FROM
-- 选出换手率在3%~12%之间的股票
(SELECT * FROM stock_info WHERE TURNOVER_RATIO > 3 AND TURNOVER_RATIO < 12)
-- 选出挂买一量大于卖一量的股票
WHERE BUY1_VOLUME > SELL1_VOLUME)
-- MACD金叉
WHERE MACD>DIF AND REF(MACD,DAY1)<REF(DIF,DAY1) AND REF(MACD,DAY2)<REF(DIF,DAY2)
-- KDJ金叉
AND KDJ_K>REF(KDJ_K,DAY1) AND KDJ_K>REF(KDJ_D,DAY1) AND REF(KDJ_K,DAY1)<REF(KDJ_D,DAY1)
-- RSI金叉
AND RSI>REF(RSI,DAY1) AND RSI<REF(RSI,DAY2) AND REF(RSI,DAY1)<REF(RSI,DAY2);
python代码参考
import pandas as pd
import tushare as ts
def select_stocks():
pro = ts.pro_api()
# 查询挂带大量大于卖一量的股票
market_df = pro.market_detail(symbol='', trade_date='20220422')
df1 = market_df[(market_df['bid_vol'] > market_df['ask_vol'])]
# 查询三个技术指标同时金叉的股票
daily_df = pro.daily(ts_code='', trade_date='20220422', ma=[5,10,30], factors=['macd', 'kdj', 'rsi'])
df2 = pd.DataFrame()
for code in daily_df['ts_code'].unique():
code_df = daily_df[daily_df['ts_code'] == code]
if len(code_df) > 3:
if (code_df.iloc[-3]['macd'] > code_df.iloc[-3]['macdsignal']) \
& (code_df.iloc[-2]['macd'] < code_df.iloc[-2]['macdsignal']) \
& (code_df.iloc[-1]['macd'] < code_df.iloc[-1]['macdsignal']) \
& (code_df.iloc[-1]['kdj_k'] > code_df.iloc[-2]['kdj_k']) \
& (code_df.iloc[-1]['kdj_k'] > code_df.iloc[-2]['kdj_d']) \
& (code_df.iloc[-2]['kdj_k'] < code_df.iloc[-2]['kdj_d']) \
& (code_df.iloc[-1]['rsi'] > code_df.iloc[-2]['rsi']) \
& (code_df.iloc[-1]['rsi'] > code_df.iloc[-3]['rsi']) \
& (code_df.iloc[-2]['rsi'] < code_df.iloc[-3]['rsi']):
df2 = df2.append(code_df.iloc[-1])
# 筛选出换手率在3%~12%之间的股票
df3 = pd.merge(df1, df2[['ts_code', 'close']], on='ts_code', how='inner')
df3 = pd.merge(df3, df2[['ts_code', 'turnover_rate']], on='ts_code', how='inner')
df3 = df3[(df3['turnover_rate'] > 3) & (df3['turnover_rate'] < 12)]
# 查询股票的市值和资金净流入情况
basic_df = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date,market,market_capitalization')
moneyflow_df = pro.moneyflow(trade_date='20220422', fields='ts_code,in_df')
df4 = pd.merge(basic_df, moneyflow_df, on='ts_code', how='inner')
df4 = pd.merge(df3[['ts_code', 'turnover_rate']], df4, on='ts_code', how='inner')
# 合并所有指标,返回选股结果
return df4.sort_values(by=['market_capitalization'], ascending=False).head(20)['ts_code']
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
