问财量化选股策略逻辑
选股逻辑:MACD零轴以上,资金流强度由大到小,底部抬高的股票。
选股逻辑分析
该选股逻辑基于技术分析和市场底部抬高理论,运用MACD指标和资金流强度等技术指标,筛选出当前上升趋势的股票,并结合市场底部抬高理论,选取相对底部高位的品种。此选股策略结合了短线与长线的交易策略,偏中长线,寻找稳定增长股票,对于投资和交易都具有实用价值。
有何风险?
该选股逻辑可能存在以下风险:
-
所选技术指标对行情变化的反应滞后,会出现过度交易的情况。
-
选股策略较为单一,没有根据市场情况进行调整,存在策略失效的风险。
如何优化?
为减少风险,可以优化选股策略,例如:
-
加强对市场情况的分析和研究,调整选股指标和交易策略;
-
适当扩大技术指标的选择范围,加入其他交易因素,提高交易策略的综合性;
-
结合市场的变化和特点,灵活适时地调整选股指标和交易策略。
最终的选股逻辑
综合以上分析,得出最终的选股逻辑:
选股逻辑:MACD零轴以上,资金流强度由大到小,底部抬高的股票,并且在近期趋势恢复后,相对市场表现良好。
同花顺指标公式代码参考
-
MACD零轴以上
CROSS(JC,0) AND DIFF>DEA -
资金流强度由大到小
资金流强度(30)
SZ# -
底部抬高
TSRANK(LOW, 20)<10 -
近期趋势恢复后相对表现良好
RELYEXPRICE > X
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=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)
# 底部抬高
bottom_high = []
for stock in strong_fund:
close = get_price(stock[0], end_date=context.current_dt, frequency='daily', fields=['close', 'high', 'low'], count=252)
low_rank = ta.STDDEV((close['low'] - close['low'].rolling(20).min()), timeperiod=10) # 底部抬高策略
if low_rank.iloc[-1] < 10:
bottom_high.append(stock[0])
# 相对市场表现良好
relative_price = []
for stock in bottom_high:
close = get_price(stock, start_date=context.current_dt - datetime.timedelta(days=120), end_date=context.current_dt, frequency='daily', fields=['close'], count=None)
close['return_%'] = (close['close'] - close['close'].shift(1)) / close['close'].shift(1)
close.loc[close.index[0], 'return_%'] = 0
retrun_rank = close['return_%'].rank(pct=True)[-1]
if retrun_rank > X:
relative_price.append(stock)
log.info("Chosen stocks:", relative_price)
return relative_price
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。
