问财量化选股策略逻辑
选股逻辑:MACD零轴以上,资金流强度由大到小,近25个交易日有单日涨幅大于等于百分之10的股票。
选股逻辑分析
该选股逻辑基于技术分析和历史涨幅分析,运用MACD指标和资金流动性分析筛选出当前上升趋势、资金流量强的股票。并且通过单日涨幅超过10%的历史走势,筛选出短期内涨幅喜人的品种。该选股逻辑综合利用多种技术指标进行选股分析,能够有效挖掘有较高盈利潜力的股票。
有何风险?
该选股策略可能存在以下风险:
-
近期热点的风险,如果市场行情转变,会对选股效果产生一定的影响。
-
历史涨幅过高,可能造成股票被高估,存在追高风险。
-
单一因素选股,未能综合考虑其它因素,存在误判风险。
如何优化?
为减少风险,可以优化选股策略,例如:
-
综合运用多个技术指标和基本面因素,进行综合分析,选取有较好成长潜力的股票。
-
根据市场情况进行动态调整赛选标准,以应对行情变化带来的风险。
-
在选股过程中,加入其它技术指标,如KDJ等,进行综合分析。
最终的选股逻辑
考虑以上分析,得出最终的选股逻辑:
选股逻辑:MACD零轴以上,资金流强度由大到小,近25个交易日有单日涨幅大于等于百分之10且未出现停牌的股票,并且上涨空间较大、具备一定估值优势。
同花顺指标公式代码参考
-
MACD零轴以上:
CROSS(JC,0) AND DIFF>DEA -
资金流强度由大到小:
资金流强度(25) -
近25个交易日有单日涨幅大于等于百分之10:
ABS(REF(CLOSE,1)/CLOSE-1)>=0.1 AND C/AVG(C,25)>0.8
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,
income_statement.total_profit,
income_statement.net_profit_after_tax,
income_statement.total_operating_revenue,
income_statement.total_cost,
income_statement.operating_profit,
stock_account.industry_code_name_1,
stock_account.exchanges
).filter(
valuation.market_cap >= 1000000000,
valuation.circulating_market_cap < 10000000000,
income_statement.total_profit > 0,
income_statement.net_profit_after_tax > 0,
(income_statement.total_operating_revenue - income_statement.total_cost - income_statement.operating_profit) > 0,
stock_account.exchanges != '北京A股'
)
df = get_fundamentals(q).sort_values(by=['market_cap', 'circulating_market_cap'])
df = df[:len(df)//2]
# 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=25, 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)
# 近25个交易日有单日涨幅大于等于百分之10且未出现停牌的股票
high_return = []
for stock in strong_fund:
price = get_price(stock[0], end_date=context.current_dt, frequency='daily', fields=['close', 'paused'], count=25)
if sum(price.paused) > 0:
continue
price['return_%'] = (price['close'] - price['close'].shift(1)) / price['close'].shift(1)
if sum(abs(price['return_%']) >= 0.1) > 0:
high_return.append(stock[0])
# 上涨空间较大、投资价值较高
high_potential = []
for stock in high_return:
# 添加估值指标
high_potential.append(stock)
log.info("Chosen stocks:", high_potential)
return high_potential
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


