问财量化选股策略逻辑
选股逻辑为:在换手率3%-12%,剔除北京A股,收盘价<boll(upper值)且收盘价>boll(mid值)的条件下,筛选股票。
选股逻辑分析
该选股策略侧重于收盘价相对于Boll线的位置。Boll线是根据股票的某一时间段内的收盘价算出的标准差和移动平均值,一般用于衡量股票的价格波动是否超出正常范围,反映市场是否过热或过冷。选股时,先筛选出换手率较为适中的股票,并排除北京A股的干扰。而后,选取收盘价在Boll线的中间范围内,既不是过热又不是过冷的股票。
有何风险?
只使用Boll指标来做筛选会有一定的局限性。如果仅关注Boll线,可能无法全面地评估股票。同时,如果仅根据单一的数值范围来筛选,则可能会忽略其他重要的因素。
如何优化?
-
增加其他指标
在Boll指标的基础上,可以增加其他指标,如MACD、RSI等,以便更加全面、全局地筛选股票。 -
加大样本容量
可以采用更长的时段作为样本容量,增加统计精度,提高筛选质量。
最终的选股逻辑
在换手率3%-12%,剔除北京A股,收盘价<boll(upper值)且收盘价>boll(mid值)的条件下,加入其他关键指标如MACD、RSI等综合考虑,筛选出成长性较好、稳定性较高的股票。
同花顺指标公式代码参考
BOLL指标代码:
BOLL:MA(CLOSE,M);UPPER:BOLL+2STD(CLOSE,M);LOWER:BOLL-2STD(CLOSE,M);
其中,CLOSE为收盘价,M为在计算公式中所使用的时间周期,STD()为计算标准差的函数,MA()为计算移动平均的函数。
Python代码参考
import tushare as ts
def select_good_stocks():
ts.set_token('your_token')
pro = ts.pro_api()
stocks = pro.stock_basic(exchange='SZSE', list_status='L', fields='ts_code, name, industry, mktcap, turnover_rate')
for i in range(len(stocks)):
code = stocks.ts_code[i]
df2 = pro.daily(ts_code=code)
df2 = df2.sort_values(by='trade_date')
df2['close_upper'] = df2['close'].rolling(window=20).mean() + 2 * df2['close'].rolling(window=20).std()
df2['close_mid'] = df2['close'].rolling(window=20).mean()
stocks.loc[i, 'in_boll'] = ((df2['close'] < df2['close_upper']) & (df2['close'] > df2['close_mid'])).astype(int).sum()
stocks = stocks[(stocks['name'].str.contains('ST') == False)]
stocks = stocks[(stocks['mktcap'] >= 300000000)]
stocks = stocks[(stocks['ts_code'].str.startswith('002') == True) | (stocks['ts_code'].str.startswith('000') == True)]
stocks = stocks[(stocks['turnover_rate'] >= 3) & (stocks['turnover_rate'] <= 12)]
stocks = stocks[(stocks['in_boll'] > 0)]
stocks = stocks.set_index('ts_code')
return stocks
good_stocks = select_good_stocks()
print(good_stocks)
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


