问财量化选股策略逻辑
选股逻辑为:在换手率3%-12%,剔除北京A股,并筛选出圆弧形的股票。
选股逻辑分析
该选股策略仍然考虑了资金面因素,但增加了图形形态的筛选条件。通过筛选出符合圆弧形形态的股票,期望能够选出股价具有一定上涨空间的股票。
有何风险?
与之前的选股策略相同,该选股逻辑仅注重了部分技术面因素,未考虑其他重要的基本面指标和市场因素,例如公司业绩、PE、市值等等。同时,对于圆弧形的定义和选取标准存在主观性和不确定性,因此可能会影响选股准确性。
如何优化?
建议综合考虑其他的基本面、行业因素以及技术面指标等内容,例如板块热度、市盈率、均线突破等指标。定期更新选取标准,定期回顾评估选股效果,同时注意避免过度拟合的情况,并保持策略的简洁性和操作可行性。
最终的选股逻辑
在换手率3%-12%,剔除北京A股,并筛选出符合圆弧形形态的股票,综合考虑其他的基本面、行业因素以及技术面指标等内容,选择具有一定长期投资价值的股票。
同花顺指标公式代码参考
// 定义变量
MA:=MA(CLOSE,7); // 短期均线,选取7日均线
MB:=MA(CLOSE,14); // 长期均线,选择14日均线
A:=SLOPE(MA-REF(MA,1),4);
B:=SLOPE(MB-REF(MB,1),4);
F:=CROSS(MA,MB) AND (MA < MB);
G:=CROSS(MB,MA) AND (MA > MB);
// 筛选
FILTER:F AND G AND (ABS(A-B)/B<0.1) AND HSL>=3 AND HSL<=12 AND AVERAGE[北京股份]==0,0,1;
Python代码参考
import tushare as ts
import numpy as np
import pandas as pd
def select_good_stocks():
ts.set_token('your_token')
pro = ts.pro_api()
# 筛选出换手率3%-12%, 剔除北京A股的股票
df1 = pro.stock_basic(exchange='SZSE', list_status='L', fields='ts_code,name,industry,pe,pb,turnover_rate,amount,total_mv,float_mv')
df1 = df1[(df1['turnover_rate'] >= 3) & (df1['turnover_rate'] <= 12)]
df1 = df1[(df1['name'].str.contains('ST') == False)]
df1 = df1[(df1['ts_code'].str.startswith('002') == True) | (df1['ts_code'].str.startswith('000') == True)]
df1 = df1[df1['float_mv'] >= 10000000000]
# 筛选出符合圆弧形的股票
df2 = pro.daily(ts_code='', start_date='20210101', end_date='20210118', fields='ts_code,trade_date,high,low,close,vol')
df2 = df2.groupby('ts_code')[['high', 'low', 'close']].apply(lambda x: x.sort_values('trade_date', ascending=True).reset_index(drop=True))
df2['midpoint'] = (df2['high'] + df2['low']) / 2.0
df2['distance'] = np.sqrt(np.square((df2['high'] - df2['low'])) + np.square(2*(df2['close'] - df2['midpoint'])))
df2['arc'] = (df2['distance'] / (df2['high'] - df2['low'])) * 100
df2 = df2.reset_index()
perc_10 = np.percentile(df2['arc'], 10)
perc_90 = np.percentile(df2['arc'], 90)
df2 = df2[(df2['arc'] >= perc_10) & (df2['arc'] <= perc_90)]
df3 = df1.merge(df2[['ts_code']], on='ts_code', how='inner')
df4 = pro.daily_basic(ts_code='', trade_date='20210118', fields='ts_code,turnover_rate,pe,pb')
df4 = df4.set_index('ts_code')
df4 = df4.loc[df3['ts_code'].tolist()]
df5 = pd.concat([df3, df4], axis=1)
# 其他指标筛选和排序
df5 = df5[(df5['pe'] >= 0) & (df5['pb'] >= 0) & (df5['pb'] <= 3)]
df5 = df5.sort_values(by=['turnover_rate'], ascending=False)
df5 = df5.head(20)
return df5
good_stocks = select_good_stocks()
print(good_stocks)
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


