问财量化选股策略逻辑
选股逻辑:MACD零轴以上,资金强度由大到小,30日平均线向上。
选股逻辑分析
该选股逻辑要求股票的MACD指标在零轴以上,表明股票的上涨势头较强。同时,要求股票的资金强度由大到小,表示市场资金对该股票的关注程度逐渐减弱。最后,要求股票的30日平均线向上,以判断股票的中长期上涨趋势是否有所改善。
有何风险?
该选股逻辑可能存在以下风险:
- 忽略了公司实际业绩、估值、市场竞争等因素,只关注了MACD、资金流和30日平均线指标的状况;
- 结合股票的短期技术指标判断其中长期上涨趋势的风险较高。
如何优化?
为了克服上述风险,可以优化选股策略,例如:
- 加入更多的基本面指标,如ROE、EPS、应收账款周转率、资产负债率等指标,以便全面评估股票的价值和风险;
- 综合考虑股票的技术指标,如RSI、BOLL、DMA等指标,全面评估其短期、中期和长期走势。
最终的选股逻辑
综合以上分析,我们得到最终的选股逻辑:
MACD零轴以上,资金强度由大到小,30日平均线向上。
同花顺指标公式代码参考
支持策略1:MACD零轴以上
MACD(12,26,9)
DIFF > 0 AND DEA > 0
支持策略2:资金强度
资金流强度(60)
SZ#
支持策略3:30日平均线向上
MA(CLOSE, 30) > REF(MA(CLOSE, 30), 1)
python代码参考
import talib as ta
import pandas as pd
from jqdata import *
def select_stock(context):
q = query(
valuation.code,
valuation.circulating_cap,
indicator.eps,
indicator.net_profit_period_increase_ratio,
valuation.market_cap,
valuation.pe_ratio,
valuation.pb_ratio,
valuation.ps_ratio,
valuation.pcf_ratio
)
df = get_fundamentals(q)
df = df.dropna(subset=['net_profit_period_increase_ratio', 'pe_ratio', 'pb_ratio', 'ps_ratio', 'pcf_ratio'])
df = df[df.circulating_cap > 0]
df = df[df.eps > 0]
df = df[df.market_cap > 100000000]
df = df[df.apply(lambda x: x.code[:2] in ['60', '00', '30'], axis=1)]
df = df[df.apply(lambda x: x.code[0] != '3' or x.code[:3] in ['300', '301', '302'], axis=1)]
df = df[df.net_profit_period_increase_ratio.between(20, 100)]
# MACD零轴以上
stock_list = list(df['code'])
macd_list = []
for stock in stock_list:
close = get_price(stock, end_date=context.current_dt, frequency='daily', fields='close', count=200)['close']
macd, signal, _ = ta.MACD(close, fastperiod=12, slowperiod=26, signalperiod=9)
if macd[-1] > signal[-1] and macd[-2] < signal[-2]: # MACD金叉
macd_list.append(stock)
# 资金流强度由大到小
strong_fund = []
for stock in macd_list:
x = get_money_flow(stock, end_date=context.current_dt, count=40, fields=['main_fund_in', 'main_fund_out'])
strong = x.main_fund_in.rolling(10).sum().iloc[-1] > x.main_fund_out.rolling(10).sum().iloc[-1]
if strong:
strong_fund.append(stock)
# 30日平均线向上
chosen_list = []
for stock in strong_fund:
if ta.MA(get_price(stock, end_date=context.current_dt, frequency='daily', fields='close', count=30)['close'], timeperiod=30)[-1] > ta.MA(get_price(stock, end_date=context.current_dt, frequency='daily', fields='close', count=60)['close'], timeperiod=30)[-2]:
chosen_list.append(stock)
return chosen_list
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


