问财量化选股策略逻辑
选股逻辑:振幅大于1,今日控盘>21,周线macd在零轴之上。
选股逻辑分析
该选股逻辑主要依据了三个指标,振幅的大涨或大跌表明了市场资金的波动,控盘的变化情况反映了盘面情绪的变化,周线MACD指标的金叉和零轴适用于长期趋势的把握。通过以上指标的联合判断,能够筛选出价格波动性高、市场人气高、趋势较为明朗的优质股票。
有何风险?
该选股逻辑可能存在以下风险:
- 过度关注市场情绪:该选股策略主要依据市场情绪选股,过度关注市场情绪容易让投资者偏离公司基本面等其他重要因素的影响;
- 投资时间跨度不足:选择MACD指标时选用的是周线指标,但是投资者的操作时间跨度可能不足,过短的时间跨度可能使该策略产生一些误判;
- 过于依赖技术指标:该选股策略的选择依赖主要是依靠技术指标,过于依赖技术指标可能使得投资者忽略了其他更为重要的因素。
如何优化?
为了降低风险和提高策略的精度,我们可以通过以下措施进行优化:
- 引入更多的指标:在选股指标上引入更多的基本面、行业趋势等指标,比如市净率、行业内部相对强度等;
- 设定更为合适的时间跨度:在选股策略参数中,设置更为合适的时间跨度,以便更好的确定股票的长期趋势;
- 结合短期策略:在选股策略中加入更为短期的交易策略,避免过于依赖长期趋势而忽视短期交易机会;
- 人工干预:在使用该选股策略时,投资者可以适当地结合一些人工干预的操作,提高选股策略在实际运用中的精准度和效果。
最终的选股逻辑
综上所述,我们最终选择以下选股逻辑:
- 振幅大于1;
- 今日控盘大于21;
- 周线MACD金叉;
- 周线MACD在零轴之上;
- 股票的市净率位于市场第一四分位数以下,股息率处于市场第一四分位数以上。
同花顺指标公式代码参考
C1 = AMP()>1;
C2 = CONTROLLING_SHARES_DAY_CHG()>21 AND dib>=(-0.15);
C3 = MACD() CROSSOVER 0;
C4 = REF(MACD(), 1) < 0;
C5 = PB()<first_quartile(PB()) AND DIVIDEND_YIELD()>first_quartile(DIVIDEND_YIELD());
SELECTOR = C1 AND C2 AND C3 AND C4 AND C5;
RESULT = SORT(RANK(SELECTOR), 1)==1;
python代码参考
def select_stocks():
selected_stocks = []
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
c3 = MACD(stock, check_date=datetime.now(), frequency='1w')['macd_diff'][-2] < MACD(stock, check_date=datetime.now(), frequency='1w')['macd_signal'][-2] and \
MACD(stock, check_date=datetime.now(), frequency='1w')['macd_diff'][-1] > MACD(stock, check_date=datetime.now(), frequency='1w')['macd_signal'][-1]
c4 = get_macd(stock, start_date=datetime.now()-timedelta(days=365), end_date=datetime.now(), frequency='1w')['macd_diff'][-1] > 0
data = get_fundamentals(query(valuation, valuation, income).filter(valuation.code == stock), date=datetime.now())
if not data.empty:
c5 = data['valuation_pb'][0] < np.percentile(get_fundamentals(query(valuation).filter(valuation.code == stock), date=datetime.now(), count=120)['valuation_pb'], 25) and \
data['valuation_dividend_yield'][0] > np.percentile(get_fundamentals(query(valuation).filter(valuation.code == stock), date=datetime.now(), count=120)['valuation_dividend_yield'], 75)
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亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
