问财量化选股策略逻辑
- 至少5根均线重合的股票
- 开盘价在十日线左右
- 10天内涨停天数大于2
选股逻辑分析
这个策略的逻辑是基于技术分析,寻找均线密集区域的股票,同时要求股票在十日线附近开盘,并且在10天内出现较多的涨停板。这样的股票可能有较强的市场关注度和趋势,值得投资者关注。
有何风险?
- 这个策略没有考虑公司的基本面因素,仅仅基于技术分析,因此可能存在较大的风险。
- 如果市场出现较大的波动,均线密集区域可能会被打破,导致股票价格出现较大的波动。
- 涨停板的数量也可能受到市场情绪和题材的影响,因此不能完全依赖于这个指标。
如何优化?
- 可以考虑加入公司的基本面因素,例如市盈率、市净率等,以提高策略的准确性和稳定性。
- 可以考虑加入更多的技术指标,例如布林线、macd等,以更准确地判断股票的趋势和价格走势。
- 可以考虑加入更多的限制条件,例如股票的市值、行业等,以缩小筛选范围,提高策略的效率。
最终的选股逻辑
- 股票的收盘价在五日、十日、二十日、三十日、六十日均线的密集区域。
- 股票的开盘价在十日线附近。
- 股票在10天内出现的涨停板数量大于2。
- 股票的市值在一定范围内(例如流通市值在10亿以下)。
- 股票所在行业符合一定的标准(例如不属于夕阳行业)。
python代码参考
import talib
import pandas as pd
def get_stock_data():
# 获取股票数据
data = pd.read_csv('stock_data.csv')
return data
def get_rolling_mean(data, n):
# 获取n日的滚动平均值
rolling_mean = talib.MA(data, n)
return rolling_mean
def get_rolling_std(data, n):
# 获取n日的滚动标准差
rolling_std = talib.STDDEV(data, n)
return rolling_std
def get_intersection(rolling_mean1, rolling_mean2):
# 获取两个移动平均线的交点
intersection = []
for i in range(len(rolling_mean1)):
if rolling_mean1[i] == rolling_mean2[i]:
intersection.append(i)
return intersection
def get_overlapping_stocks(data, n):
# 获取至少n日均线重合的股票
overlapping_stocks = []
for i in range(len(data)):
rolling_mean1 = get_rolling_mean(data[i], n)
rolling_mean2 = get_rolling_mean(data[i+1], n)
intersection = get_intersection(rolling_mean1, rolling_mean2)
if len(intersection) >= 5:
overlapping_stocks.append(data[i])
return overlapping_stocks
def get_stocks_with_sufficient_stocks(overlapping_stocks, n):
# 获取10天内出现的涨停板数量大于2的股票
stocks_with_sufficient_stocks = []
for stock in overlapping_stocks:
rolling_std1 = get_rolling_std(stock['close'], n)
rolling_std2 = get_rolling_std(stock['close'], 20)
if rolling_std1 > rolling_std2:
for i in range(len(stock['close'])):
if stock['close'][i] > stock['close'][i-10] * 1.05:
stocks_with_sufficient_stocks.append(stock)
break
return stocks_with_sufficient_stocks
def get_stocks_with_filteringCriteria(overlapping_stocks, n,市值Filter, industryFilter):
# 获取市值在一定范围内(例如流通市值在10亿以下)和所在行业符合一定标准(例如不属于夕阳行业)的股票
stocks_with_filteringCriteria = []
for stock in overlapping_stocks:
if stock['market_cap'] <市值Filter and stock['industry'] not in industryFilter:
stocks_with_filteringCriteria.append(stock)
return stocks_with_filteringCriteria
def main():
# 获取股票数据
data = get_stock_data()
# 获取至少5日均线重合的股票
overlapping_stocks = get_overlapping_stocks(data, 5)
# 获取10天内出现的涨停板数量大于2的股票
stocks_with_sufficient_stocks = get_stocks_with_sufficient_stocks(overlapping_stocks, 10)
# 获取市值在一定范围内(例如流通市值在10亿以下)和所在行业符合一定标准(例如不属于夕阳行业)的股票
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


