问财量化选股策略逻辑
选股逻辑:MACD零轴以上,资金强度由大到小,9点25分涨幅小于6%。
选股逻辑分析
该选股逻辑将技术指标和资金因素结合起来,筛选出符合价格、技术和资金流向条件的股票。MACD零轴以上可以排除掉短期走势不确定的股票,资金强度由大到小有助于挖掘市场资金流向,9点25分涨幅小于6%可以排除掉过度热门的股票。但是该选股逻辑也存在一些风险。
有何风险?
该选股逻辑可能存在以下风险:
1.选股过程中可能会忽略其他重要的技术指标或资金因素;
2.选股依赖于历史数据,可能存在未知的市场环境因素,导致选股效果不佳;
3.9点25分涨幅的限制可能会排除掉一些实际上走势良好的股票。
如何优化?
为克服上述风险,可以优化选股策略,例如:
1.加入其他重要的技术指标和资金因素,多维度进行筛选;
2.结合基本面因素,对选股结果进行核实;
3.通过实盘测试,优化9点25分涨幅的限制参数。
最终的选股逻辑
综合以上分析,我们得到最终的选股逻辑:
选股逻辑:MACD零轴以上,资金强度由大到小,9点25分涨幅小于6%,加入其他重要的技术指标和资金因素进行筛选。
同花顺指标公式代码参考
MACD零轴以上
REF(CLOSE,1)<REF(MA(CLOSE,15),1)
AND CLOSE>MA(CLOSE,15)
AND MACD(12,26,9)>0
AND REF(MACD(12,26,9),1)<0
资金强度由大到小
资金流强度(30)
SZ#
9点25分涨幅小于6%
HIGH/REF(CLOSE, 195)<1.06
其中,HIGH是通达信中的最高价指标。
Python代码参考
import pandas as pd
from jqdata import *
import talib as ta
def select_stock(context):
q = query(
valuation.code,
valuation.market_cap,
valuation.circulating_market_cap,
valuation.pe_ratio,
valuation.pb_ratio,
indicator.roe
).filter(
valuation.market_cap >= 200000000,
valuation.circulating_market_cap >= 200000000,
valuation.pe_ratio > 0,
valuation.pb_ratio > 0,
indicator.roe > 10
)
df = get_fundamentals(q)
df = df[df.apply(lambda x: x.code[:2] in ['00', '30'], axis=1)]
df = df[df.apply(lambda x: x.code[0] != '3' or x.code[:3] in ['300', '301', '302'], axis=1)]
# MACD零轴以上
macd_list = []
for stock in df['code']:
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=30, fields=['main_fund_in', 'main_fund_out', 'turnover_ratio'])
if x.main_fund_in.rolling(5).sum().iloc[-1] > x.main_fund_out.rolling(5).sum().iloc[-1]:
strong_fund.append([stock, x.turnover_ratio.mean()])
strong_fund = sorted(strong_fund, key=lambda x: x[1], reverse=True)
# 9点25分涨幅小于6%
chosen_list = []
for stock in strong_fund:
high = get_price(stock[0], end_date=context.current_dt, frequency='1m', fields='high', count=195)['high']
if high[-1]/high[0] < 1.06:
chosen_list.append(stock[0])
log.info("Chosen stocks:", chosen_list)
return chosen_list
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


