问财量化选股策略逻辑
选股逻辑:MACD零轴以上,资金流强度由大到小,100亿市值以内的无亏损企业。
选股逻辑分析
该选股逻辑结合了技术指标和基本面因素,旨在挖掘市值适中、经营健康的股票。选股指标包括MACD、资金流强度和市值,市值在100亿以内可以筛选出中小型企业,筛选出无亏损的企业可以寻找稳健的成长股。但是该选股逻辑也存在一些风险。
有何风险?
该选股逻辑可能存在以下风险:
-
过度关注中小市值企业,可能忽略了龙头企业和行业巨头;
-
忽略了不同行业的差异,可能选取了一些已经处于过热行情和估值高企的股票;
-
对于市场行情的预测能力较低,可能出现选股失误或滞后的情况。
如何优化?
为减小风险,可以优化选股策略,例如:
-
增加对股票的基本面分析,多维度进行筛选;
-
根据不同行业和不同市场阶段,调整选股指标和策略;
-
引入人工智能技术和大数据分析,提高选股的准确性和预测能力。
最终的选股逻辑
综合以上分析,我们得到最终的选股逻辑:
选股逻辑:MACD零轴以上,资金流强度由大到小,100亿市值以内的无亏损企业,ROE大于10。
同花顺指标公式代码参考
MACD零轴以上
CROSS(JC,0) AND DIFF>DEA
资金流强度由大到小
资金流强度(30)
SZ#
100亿市值以内的无亏损企业
sort_by([valuation.market_cap.asc(),valuation.circulating_market_cap.asc()]) & (income_statement.total_profit + income_statement.net_profit_after_tax) > 0 & (income_statement.total_operating_revenue-income_statement.total_cost-operating_profit > 0)
ROE大于10
indicator.roe>10
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,
income_statement.total_profit,
income_statement.net_profit_after_tax,
income_statement.total_operating_revenue,
income_statement.total_cost,
income_statement.operating_profit
).filter(
valuation.market_cap >= 1000000000,
valuation.circulating_market_cap >= 200000000,
valuation.pe_ratio > 0,
valuation.pb_ratio > 0,
indicator.roe > 10,
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,
valuation.code.startswith('60')
)
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)
# 100亿市值以内的无亏损企业
solid_stock = []
for stock in strong_fund:
p = get_fundamentals(query(valuation.code, income_statement.total_profit, income_statement.net_profit_after_tax, income_statement.total_operating_revenue, income_statement.total_cost, income_statement.operating_profit)
.filter(valuation.code == stock[0]))[['total_profit', 'net_profit_after_tax', 'total_operating_revenue', 'total_cost', 'operating_profit']]
if (p['total_profit'][0]+p['net_profit_after_tax'][0] > 0) and (p['total_operating_revenue'][0] - p['total_cost'][0] - p['operating_profit'][0] > 0):
solid_stock.append(stock[0])
# ROE大于10
result = []
for stock in solid_stock:
if get_fundamentals(query(indicator.roe).filter(indicator.roe > 10, valuation.code == stock)):
result.append(stock)
log.info("Chosen stocks:", result)
return result
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


