问财量化选股策略逻辑
1. 至少5根均线重合的股票
选取至少5根均线重合的股票,这可以表示股票的价格趋势较为稳定,同时也可以减少股票的波动性。
2. 换手率>2%且<9%
选取换手率在2%到9%之间的股票,这可以表示股票的流动性较好,同时也避免了过高的换手率带来的交易成本和风险。
3. 非科创
选取非科创股票,这可以避免受到科技创新板的政策影响,同时也可以减少科技创新板带来的高波动性。
选股逻辑分析
以上三个逻辑可以结合起来,形成一个综合的量化选股策略。首先,选取至少5根均线重合的股票,这可以表示股票的价格趋势较为稳定,同时也可以减少股票的波动性。其次,选取换手率在2%到9%之间的股票,这可以表示股票的流动性较好,同时也避免了过高的换手率带来的交易成本和风险。最后,选取非科创股票,这可以避免受到科技创新板的政策影响,同时也可以减少科技创新板带来的高波动性。
有何风险?
以上三个逻辑可以结合起来,形成一个综合的量化选股策略。但是,这种策略也存在一定的风险。首先,如果选取的均线数量过多,可能会导致策略过于复杂,难以理解。其次,如果选取的换手率过低,可能会导致股票流动性较差,无法及时买卖。最后,如果选取的股票不是非科创股票,可能会受到科技创新板政策的影响,导致股票价格波动较大。
如何优化?
为了优化以上策略,可以考虑以下几点:
- 适当减少均线数量,以降低策略的复杂度。
- 适当提高换手率的选取范围,以增加股票的流动性。
- 选择更加广泛的股票池,以减少受到科技创新板政策的影响。
最终的选股逻辑
以下是最终的量化选股策略逻辑:
- 选取至少5根均线重合的股票。
- 选取换手率在2%到9%之间的股票。
- 选择非科创股票。
python代码参考
以下是使用Python实现以上策略的代码参考:
import talib
def get_top_moving_average_scores(prices, n):
ma_scores = []
for i in range(n):
ma = talib.MA(prices, timeperiod=i+1)
ma_scores.append(ma[-1])
return ma_scores
def get_top_trading_volume_scores(prices, n):
trading_volume_scores = []
for i in range(n):
trading_volume = talib.STOCHRVI(prices, timeperiod=14, fastperiod=3, slowperiod=10, rsiperiod=7, upperband=0.9, lowerband=0.1, colorup=2, colordown=2)
trading_volume_scores.append(trading_volume[-1])
return trading_volume_scores
def get_top_non_科创_scores(prices, n):
non_科创_scores = []
for i in range(n):
if prices[-1] < 100000000:
non_科创_scores.append(prices[-1])
return non_科创_scores
def get_top_scores(prices, n):
ma_scores = get_top_moving_average_scores(prices, n)
trading_volume_scores = get_top_trading_volume_scores(prices, n)
non_科创_scores = get_top_non_科创_scores(prices, n)
return ma_scores, trading_volume_scores, non_科创_scores
def get_top_scores_df(prices, n):
ma_scores, trading_volume_scores, non_科创_scores = get_top_scores(prices, n)
df = pd.DataFrame({'MA': ma_scores, 'Trading Volume': trading_volume_scores, 'Non_科创': non_科创_scores})
df = df.sort_values(by=['MA'], ascending=False)
return df
def get_top_scores_sorted(prices, n):
ma_scores, trading_volume_scores, non_科创_scores = get_top_scores(prices, n)
sorted_scores = ma_scores + trading_volume_scores + non_科创_scores
return sorted_scores
def get_top_scores_sorted_df(prices, n):
ma_scores, trading_volume_scores, non_科创_scores = get_top_scores(prices, n)
df = pd.DataFrame({'MA': ma_scores, 'Trading Volume': trading_volume_scores, 'Non_科创': non_科创_scores})
df = df.sort_values(by=['MA'], ascending=False)
return df
如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
如果有任何问题请添加 下方的二维码进群提问。


