问财量化选股策略逻辑
选股逻辑:MACD零轴以上,高点为两日最高,2021年营收/2018年营收大于1.1。
选股逻辑分析
该选股逻辑结合技术指标和基本面指标进行选股,要求股票MACD零轴以上,高点为两日最高,且2021年营收/2018年营收大于1.1。此逻辑优化了选股策略中的基本面因素,更全面地反应了被选股票的绩效。故较之前方法更加具有综合性,适合中长线投资者使用。
有何风险?
该选股策略可能存在以下风险:
-
基于财务数据的营收增长率容易受到外界因素影响,例如宏观经济环境、行业政策等,存在一定误差。
-
基于财务数据的营收增长率只能反应部分公司绩效,不足全面反映公司绩效情况。
-
选股策略中的分母选取的过去2018年结算日末季度的营收不一定能反映公司的当前情况。
如何优化?
为减少风险,可以采用以下方式进行优化:
-
加入其他财务指标如利润增长率,资产负债率等指标,综合分析股票的基本面表现。
-
综合考虑因素后建立动态滚动时间轴,使策略能够避免被季节性和宏观影响而导致不准确。
-
确保财务数据的准确性和真实性。
最终的选股逻辑
优化后的选股逻辑如下:
选股逻辑:满足MACD零轴以上,高点为两日最高,2021年/2018年营收增长率大于1.1,同时加入其它基本面指标的辅助。
同花顺指标公式代码参考
-
MACD零轴以上:
CROSS(JC, 0) AND DIFF > DEA -
高点为两日最高:
H = HHV(HIGH,2)
CROSS(H, REF(H, 1)) -
2021年/2018年营收增长率大于1.1:
DIV(SUM([COND(NOT(ISnull(COND(PERIOD=PERIOD.MINDAYS, growth_revenue, None)[0]) | ISnull(COND(PERIOD=PERIOD.MINDAYS,date=None),None))),CONDITION=COND(PERIOD=PERIOD.MINDAYS,growth_revenue,None)], 4), SUM([COND(date==date_adv(date, "-730"), revenue, None), CONDITION=(date>=date_adv(date, "-730"))], 4))
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,
stock_account.industry_code_name_1,
fundamental.eps,
indicator.inc_revenue_year_on_year
).filter(
valuation.market_cap >= 500000000,
valuation.circulating_market_cap >= 100000000,
stock_account.exchanges != '北京A股'
)
df = get_fundamentals(q).sort_values(by=['market_cap', 'circulating_market_cap'])
# MACD零轴以上
macd_list = []
for stock in df['code']:
if df.loc[df['code'] == stock, 'macd'].iloc[-1] > 0:
macd_list.append(stock)
# 高点为两日最高
top_point = []
for stock in macd_list:
x = attribute_history(stock, 2, '1d', ('high', 'close'))
if x.high.iloc[-1] == max(x.high):
top_point.append(stock)
# 营收增长率大于1.1
selected_stocks = []
for stock in top_point:
current_rev = df.loc[df['code']==stock, 'inc_revenue_year_on_year'].iloc[-1]
prev_rev = df.loc[df['code']==stock, 'inc_revenue_year_on_year'].iloc[-3]
if current_rev/prev_rev > 1.1:
selected_stocks.append(stock)
result = selected_stocks[:10]
log.info("Chosen stocks:", result)
return result
## 如何进行量化策略实盘?
请把您优化好的选股语句放入文章最下面模板的选股语句中即可。
select_sentence = '市值小于100亿' #选股语句。
模板如何使用?
点击图标右上方的复制按钮,复制到自己的账户即可使用模板进行回测。
## 如果有任何问题请添加 下方的二维码进群提问。


