策略分享——金叉共振择时策略
由bqy53ve0创建,最终由bqy53ve0 被浏览 33 用户
1.指标介绍
1.1技术面指标
1.1.1macd指标
MACD(Moving Average Convergence Divergence)即移动平均线收敛散度指标,属于趋势类技术分析工具,通过计算不同周期移动平均线的差值,揭示股价趋势的强弱变化及转折信号。
- 快速线(DIF 线):通常为 12 日指数移动平均线(EMA12)与 26 日指数移动平均线(EMA26)的差值,反映短期趋势。
- 慢速线(DEA 线):DIF 线的 9 日指数移动平均线,平滑 DIF 线的波动,反映长期趋势。
- 柱状线(MACD 柱):DIF 线与 DEA 线的差值,通过柱体长短和颜色(红 / 绿)直观展示多空力量对比。
- 多头趋势:DIF 线与 DEA 线均位于 0 轴上方,且 DIF 线在 DEA 线上方,表明市场处于强势上涨周期。
- 空头趋势:DIF 线与 DEA 线均位于 0 轴下方,且 DIF 线在 DEA 线下方,表明市场处于弱势下跌周期。
- 零上金叉:DIF 线从下向上突破 DEA 线,且两线均在 0 轴上方,为强势多头信号,上涨概率较高。
- 零下金叉:DIF 线从下向上突破 DEA 线,但两线均在 0 轴下方,可能为下跌中继或弱势反弹,需结合其他指标验证。
- 零上死叉:DIF 线从上向下跌破 DEA 线,且两线均在 0 轴上方,可能预示上涨趋势结束,需警惕回调。
- 零下死叉:DIF 线从上向下跌破 DEA 线,且两线均在 0 轴下方,为强势空头信号,下跌动能增强。
1.1.2kdj指标
KDJ 指标(随机指标)由乔治・莱恩(George Lane)创立,属于超买超卖型技术分析工具,通过计算股价的收盘价在近期价格波动中的相对位置,判断市场短期超买或超卖状态,进而预测价格反转机会。
-
K 线(快线):反映当前价格在周期内的相对位置,取值范围 0-100。
-
D 线(慢线):K 线的移动平均线,平滑 K 线波动,取值范围 0-100。
-
J 线(方向敏感线):对 K 线和 D 线的偏离程度进行放大,取值范围可超过 0-100(有时显示为 - 100~200),用于辅助判断趋势强度。
-
超买区(风险信号):K、D、J 线数值超过 80,表明短期上涨动能过度释放,价格可能回调或反转。
-
超卖区(机会信号):K、D、J 线数值低于 20,表明短期下跌动能过度释放,价格可能反弹或反转。
-
震荡区(观望信号):数值在 20-80 之间,市场处于震荡整理,指标信号可靠性降低。
金叉(买入信号)
- 超卖区金叉:K 线从下向上突破 D 线,且 K、D 值均低于 20,为较强的反弹信号,尤其是 J 线率先拐头向上时,可靠性更高。
- 震荡区金叉:K 线在 20-80 区间内上穿 D 线,需结合成交量或趋势方向判断,可能为趋势延续或震荡反弹。
死叉(卖出信号)
- 超买区死叉:K 线从上向下跌破 D 线,且 K、D 值均高于 80,为较强的回调信号,若 J 线同时拐头向下,下跌动能更强。
- 震荡区死叉:K 线在 20-80 区间内下穿 D 线,可能为趋势反转或震荡回落,需结合其他指标验证。
1.1.3rsi指标
RSI 指标(相对强弱指标)由威尔斯・怀尔德(Wells Wilder)提出,属于动量型技术分析工具,通过计算一段时间内股价上涨和下跌的动能比值,判断市场多空力量的强弱对比,识别超买、超卖状态及趋势反转信号。
- 若股价上涨天数多于下跌天数且涨幅更大,RSI 数值升高,表明多方力量占优;
- 若股价下跌天数多于上涨天数且跌幅更大,RSI 数值降低,表明空方力量占优。
- RSI > 70,表明多方力量过度释放,短期可能见顶回落(对应 “物极必反”)
- RSI < 30,表明空方力量过度释放,短期可能触底反弹。
- 卖出信号:RSI 从超买区(>70)回落并跌破 70,表明多方力量衰退,可视为短期止盈信号。
- 买入信号:RSI 从超卖区(<30)回升并突破 30,表明空方力量减弱,可视为短期入场信号。
1.2其他指标
资产负债率:资产负债率是企业总负债与总资产的比率,表明企业资产对负债的覆盖程度,体现其财务杠杆水平和偿债风险。
debt_to_asset_lf
close/adjust_factor
前复权价格:以当前股价为基准,将历史股价按比例向下调整,使除权前的价格与现价保持连贯。以上市首日股价为基准,将后续股价按比例向上调整,体现股票的实际回报。前复权买卖,后复权研究。
is_risk_warning = 0 -- 剔除ST股
AND suspended = 0 -- 剔除停牌(未交易)
AND st_status = 0 -- 剔除st股(未交易)
AND list_sector in (1,2,3) -- 剔除科创板及京市
其他条件:一些非常常见的基本面过滤
\
2.策略逻辑编写
2.1 macd金叉、macd死叉
一种金叉判断
macd_diff_12_26_9 AS dif,
macd_dea_12_26_9 AS dea,
CASE WHEN dif > dea AND m_lag(dif, 1) <= m_lag(dea, 1)
THEN 1 ELSE 0 END AS macd_signal,
一种死叉判断
macd_diff_12_26_9 AS dif,
macd_dea_12_26_9 AS dea,
CASE WHEN dif < dea AND m_lag(dif, 1) >= m_lag(dea, 1) THEN 1 ELSE 0 END AS macd_sell,
2.2 kdj金叉
一种金叉判断
kdj_k_9_3_3 AS k_value,
kdj_d_9_3_3 AS d_value,
CASE WHEN k_value > d_value AND m_lag(k_value, 1) <= m_lag(d_value, 1) THEN 1 ELSE 0 END AS kdj_signal,
一种死叉判断
kdj_k_9_3_3 AS k_value,
kdj_d_9_3_3 AS d_value,
CASE WHEN k_value < d_value AND m_lag(k_value, 1) >= m_lag(d_value, 1) THEN 1 ELSE 0 END AS kdj_sell,
2.3 rsi超买和死叉
超买信号,参数不确定
AND rsi_6 > 60
rsi死叉
m_ta_rsi(close, 14) AS rsi_14,
m_lag(m_ta_rsi(close, 14), 1) AS rsi_14_lag1,
CASE WHEN m_lag(m_ta_rsi(close, 14), 1) >= 50 AND m_ta_rsi(close, 14) < 50 THEN 1 ELSE 0 END AS rsi_sell,
2.4 其他简单过滤条件
对股票池进行筛选
is_risk_warning = 0 -- 剔除ST股
AND suspended = 0 -- 剔除停牌(未交易)
AND st_status = 0 -- 剔除st股(未交易)
AND list_sector in (1,2,3) -- 剔除科创板及京市
AND close/adjust_factor < 100 -- 前复权价格小于100
AND float_market_cap > 5e8
AND debt_to_asset_lf > 0
策略具体逻辑:比较有多样性,配合结合多种买入卖出信号,根据回测优化。
2.5 整体逻辑
满仓操作:时刻持有一定数目的股票,每卖出一只,就买入一只,保证资金充分运用。
for instrument in instruments_to_sell:
context.order_target_percent(instrument, 0)
if instrument in context.positions_info:
del context.positions_info[instrument] # 清除持仓信息
num = 10 - len(positions) + len(instruments_to_sell)
# print('卖出后',len(positions))
# for instrument in top_stocks:
for instrument in top_stocks[:num]:
if instrument not in positions: # 如果不在仓位中才买入,避免重复买入
context.order_target_percent(instrument, 1 / context.stock_count) # 等权重买入
if instrument not in context.positions_info:
current_price = data.current(instrument, 'open') # 买入价格为开盘价
context.positions_info[instrument] = {'entry_price': current_price, 'hold_days': 0, 'entry_date': current_date} # 记录买入信息
3.策略优化结果
经过多次尝试,我们筛选满足基本面过滤,并且近两天出现过macd金叉、kdj金叉,并且rsi距离超买比较接近的股票。当出现macd死叉、kdj死叉以及rsi死叉两者的时候就卖出。
一个dataframe用于识别买入信号,一个dataframe用于识别卖出信号,分别诱导买入和满仓操作。由于每天需要进行择时判断,运行结果比较缓慢。
4.策略代码
在BigQuant平台的“策略社区”中的“AI策略”中。
https://bigquant.com/square/ai/52e68f2d-74cf-8d33-88aa-81fda47d0f8c