问财量化选股策略逻辑
选股逻辑为:选择换手率在3%-12%、饮料酒进出口、收盘价在Boll线(上轨和中轨之间)之间的股票。
选股逻辑分析
该选股策略综合考虑了行业龙头、市场交易活跃度、股价相对估值等因素,相对于一些单一维度的选股策略具有更高的可靠性和稳定性。
有何风险?
Boll线不能完全反映股票走势,不同的行业有可能涨势不一,选股不够全面,存在部分热门行业错过的风险。
如何优化?
可以增加行业基本面因素的考虑,如行业市场份额、增速等,对选股策略进行修正或者设置不同的行业选择范围以提高选股准确性。
最终的选股逻辑
选择换手率在3%-12%、饮料酒进出口、收盘价在Boll线(上轨和中轨之间)之间的股票。
同花顺指标公式代码参考
换手率在3%-12%:SELECT(TURN<N>=AVG(TURN, N) AND TURN<N+1>AVG(TURN, N+1) AND TURN<N>3 AND TURN<N<12)
饮料酒进出口:SELECT(SECTOR('K40')=1)
Boll线策略:SELECT(CLOSE>BOLLUPPER AND CLOSE>BOLLMID)
选股:SELECT(CODE AND 换手率3%-12% AND 饮料酒进出口 AND Boll线策略)
python代码参考
import pandas as pd
import tushare as ts
def select_stocks():
pro = ts.pro_api()
df1 = pro.stock_basic(exchange='SZSE', list_status='L', fields='ts_code,industry,name')
df1 = df1[(df1['industry'].str.contains('饮料') & df1['industry'].str.contains('酒'))]
df2 = pro.fina_mainbz(ts_code='', type='P', fields='ts_code,end_date')
df2['year'] = df2['end_date'].str[:4]
df2 = df2.groupby('ts_code')['year'].count().reset_index(name='count')
df = pd.merge(df1[['ts_code']], df2[['ts_code', 'count']], on='ts_code')
df = df[df['count'] > 3] # 最近四年有业绩的公司
df3 = pro.top10_holders(ts_code='', start_date='20210101', end_date='20211013', fields='ts_code,hldr_name,hold_ratio')
df3 = df3.groupby('ts_code')['hold_ratio'].sum().reset_index(name='hold_ratio')
df3 = df3[df3['hold_ratio'] < 20] # 机构持股集中度小于20%
df4 = pro.daily(ts_code='', start_date='20210101', end_date='20211013', fields='ts_code,trade_date,turnover_rate')
df4 = df4.groupby('ts_code')['turnover_rate'].mean().reset_index(name='turnover_rate')
df4 = df4[(df4['turnover_rate'] > 3) & (df4['turnover_rate'] < 12)] # 换手率在3%-12%
df = pd.merge(df, df3[['ts_code']], on='ts_code')
df = pd.merge(df, df4[['ts_code']], on='ts_code')
df5 = pro.daily(ts_code='', start_date='20210101', end_date='20211013', fields='ts_code,trade_date,close')
df5['upper'], df5['mid'], df5['lower'] = talib.BBANDS(df5['close'], timeperiod=20)
df5 = df5[(df5['close'] > df5['mid']) & (df5['close'] < df5['upper'])] # 收盘价在Boll线(上轨和中轨之间)之间
df = pd.merge(df, df5[['ts_code']], on='ts_code')
df6 = pro.daily_basic(ts_code='', trade_date='20211013', fields='ts_code,total_mv')
df = pd.merge(df, df6[['ts_code', 'total_mv']], on='ts_code')
df = df[(df['total_mv'] > 2e9)] # 企业规模大于20亿
df = df.sort_values('total_mv', ascending=False)
return df['ts_code']
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


