问财量化选股策略逻辑
选股逻辑:振幅大于1,今日控盘>21,周线MA5金叉MA10。
选股逻辑分析
该选股策略主要考虑了技术面和市场资金面。振幅大于1考虑了股票的波动性,今日控盘大于21反映了市场资金流入,而周线MA5金叉MA10是考虑了股票的技术面情况,可以反映出股票在中短期内的走势,从而进行选股。该选股逻辑选股标准比较严格,其选出的股票应当具有一定的投资价值,更充分地表达了行情的多方面信息。
有何风险?
该选股策略可能面临以下风险:
- 内在风险:该策略可能因为过分注重历史数据,而无法充分反映当前市场状况,影响其选股准度;
- 风险控制不够严格:该策略可能对市场情绪的选股标准存在一定偏差,需要对风险控制进行更多的考虑;
- 策略过于依赖技术面:该策略可能过度注重技术面的因素,导致价值投资的考量不足,选出的股票可能具有较高的投机性。
如何优化?
为了降低风险和提高策略的精度,我们可以通过以下措施进行优化:
- 加强对基本面的分析:结合一些基本面的指标进行选股,能够减轻直接依赖技术面的策略的风险;
- 调整选股标准:我们可以设定某些标准的分值,并根据其重要性分配相应的权重,以减轻某些标准的影响;
- 加强对市场变化的监测:通过对市场变化的持续监测和分析,对选股策略进行及时调整,降低其风险。
最终的选股逻辑
基于以上分析和优化需求,我们最终选择以下选股逻辑:
- 振幅大于1;
- 今日控盘大于21;
- 周线MA5金叉MA10;
- 市值在50亿以上;
- 市盈率小于50,PEG < 2, 年净利润增长率 > 0。
同花顺指标公式代码参考
以下是同花顺实现此策略的部分指标公式代码:
C1 = AMP() > 1;
C2 = ABS(CONTROLLING_SHARES_DAY_CHG()) > 21;
C3 = CROSS(MA(CLOSE, 5), MA(CLOSE, 10));
C4 = CAP() > 5000000000;
C5 = PE() < 50 AND PEG() < 2 AND NPGRATE() > 0;
SELECTOR = C1 AND C2 AND C3 AND C4 AND C5;
RESULT = REF(SORT(RANK(SELECTOR), 1), 0) == 0;
python代码参考
以下是Python实现此策略的部分代码:
def select_stocks():
selected_stocks = []
ma5 = {}
ma10 = {}
all_trading_days = get_all_trade_days()
all_trading_days = sorted(all_trading_days, reverse=True)
for stock in get_all_stocks():
c1 = get_price(stock, end_date=datetime.now(), frequency='1d', fields='amplitude')[-1] > 0.01
c2 = abs(get_controlling_shareholders(stock, end_date=datetime.now(), frequency='1d')['controlling_shareholders_day_pct_change'][-1]) > 0.21
closed_price = get_price(stock, start_date=all_trading_days[-20], end_date=all_trading_days[-1], frequency='1w', fields='close')
ma5[stock] = talib.SMA(closed_price, timeperiod=5)
ma10[stock] = talib.SMA(closed_price, timeperiod=10)
c3 = ma5[stock][-1] > ma10[stock][-1] and ma5[stock][-2] < ma10[stock][-2]
c4 = get_market_cap(stock, date=datetime.now()) > 5000000000
data = get_fundamentals(query(valuation, indicator).filter(valuation.code == stock), date=datetime.now())
if not data.empty:
c5 = data['valuation_pe'][0] < 50 and data['valuation_peg'][0] < 2 and data['indicator_net_profit_yoy'][0] > 0
if c1 and c2 and c3 and c4 and c5:
selected_stocks.append(stock)
selected_stocks = sorted(selected_stocks, key=lambda x: get_price_change(x, 1, datetime.now(), frequency='1d'), reverse=True)
return selected_stocks[:5]
result = select_stocks()
print(result)
以上Python代码仅供参考,具体实现还需要根据自己的需求调整。
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
