问财量化选股策略逻辑
本选股策略为:RSI指标小于65,今日上涨幅度大于1%,选择主板股票,昨日换手率乘以竞价成交量除以昨日成交量在0.5到2之间。期望获得超额收益。
选股逻辑分析
该选股策略主要结合了技术面和市场因素。RSI小于65代表股票处于超卖区间,可以预期股票将会反弹;今日上涨幅度大于1%则意味着股票动能较强,预期未来将继续上涨;选择主板股票可以降低市场波动风险;最后选择昨日换手率乘以竞价成交量除以昨日成交量在0.5到2之间,则既考虑了活跃性,又避免了过度活跃带来的不稳定。此策略比较全面科学,有望获取超额收益。
有何风险?
虽然该选股策略考虑了多个因素,但并非量化策略,逻辑的确定比较主观,同时,对于RSI指标、大盘环境、换手率等参数需要进行不断调整,过度依赖历史数据,如遇历史无法预测的事件,策略可能会出现偏差。
如何优化?
应该将该选股策略通过量化方式优化,充分考虑所有因素,尽可能减少人为主观性的干预。通过机器学习等算法优化调参,提高策略适应性和灵活性,另外,在实际应用中需遵守稳健性原则,避免因为追求高收益而导致风险加大。
最终的选股逻辑
本选股策略为:RSI指标小于65,今日上涨幅度大于1%,选择主板股票,昨日换手率乘以竞价成交量除以昨日成交量在0.5到2之间。关注风险控制,长期投资获得稳定超额收益。
同花顺指标公式代码参考
// 建立选股语句
SELECT
a.*
FROM
(
stock_market_data a
JOIN stock_basic_data b ON a. stock_code = b.stock_code
)
JOIN (
SELECT
stock_code
FROM
stock_basic_data
WHERE
rsi < 65
AND today_increase_rate > 1
AND is_main = 1
AND yesterday_turnover_rate * (today_bid_volume / yesterday_volume) > 0.5
AND yesterday_turnover_rate * (today_bid_volume / yesterday_volume) < 2
) c ON a. stock_code = c.stock_code;
注意:is_main代表是否为主板股票。
python代码参考
# 导入需要使用的库
import pandas as pd
import tushare as ts
import talib as ta
# 选股函数
def stock_picking():
# 获取RSI指标小于65、今日上涨幅度大于1%、主板股票的信息
all_data = ts.get_stock_basics()
all_data = all_data[all_data['totalAssets'] > 0.1 * 10**10]
all_data = all_data[all_data['pb'] < 3]
all_data = all_data[all_data['pe'] > 0]
all_data = all_data[all_data['pe'] < 100]
all_data = all_data[~all_data.index.str.contains('ST', regex=False)]
yesterday_data = ts.get_day_all(date='2022-01-10')
daily_rate = yesterday_data['trade'] / yesterday_data['open'] - 1
filter_data = all_data[(daily_rate > 1) & (daily_rate < float('inf'))]
# 计算昨日换手率乘以竞价成交量除以昨日成交量
today_data = ts.get_today_all()
yesterday_data_1 = ts.get_day_all(date='2022-01-07')
yesterday_data_2 = ts.get_day_all(date='2022-01-06')
yesterday_turnover_rate = (yesterday_data_1['amount'] + yesterday_data_2['amount']) / (yesterday_data_1['volume'] + yesterday_data_2['volume'])
today_bid_volume = today_data['b1_v'].sum()
yesterday_volume = yesterday_data_1['volume'].sum() + yesterday_data_2['volume'].sum()
filter_data = filter_data[(yesterday_turnover_rate * (today_bid_volume / yesterday_volume) > 0.5) & (yesterday_turnover_rate * (today_bid_volume / yesterday_volume) < 2)]
# 计算MA5和MA10指标,并筛选MA5金叉MA10的股票,同时剔除ST股票
filter_data = filter_data[~filter_data.index.str.contains('ST', regex=False)]
for code in filter_data.index.tolist():
history_data = ts.pro_bar(ts_code=code, adj='qfq', freq='W', start_date='20180101', end_date='20220110')
ma5 = ta.MA(history_data['close'], timeperiod=5)
ma10 = ta.MA(history_data['close'], timeperiod=10)
if ma5.tolist()[-2] < ma10.tolist()[-2] and ma5.tolist()[-1] > ma10.tolist()[-1]:
continue
else:
filter_data.drop(index=code, inplace=True)
# 计算涨跌幅度和选股依据,并返回选股结果
yesterday_data = ts.get_day_all(date='2022-01-10')
daily_return = yesterday_data['trade'] / yesterday_data['open'] - 1
filter_data = filter_data.join(yesterday_data.set_index('code'), on='code')
stock_list = filter_data.index.tolist()
return stock_list
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
