通达信 KDJ金叉预警源码
此公式在标准KDJ基础上,增加了“J值触底反弹”和“成交量配合”的逻辑,适合短线波段操作。
// 通达信 KDJ金叉预警公式
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))100;
K:SMA(RSV,3,1);
D:SMA(K,3,1);
J:3K-2D;
{预警条件:J值从低位(小于0)上穿K值,且成交量大于5日均量}
底背离金叉: CROSS(J,K) AND REF(J,1)<0 AND VOL>MA(VOL,5);
{输出信号标记}
DRAWICON(底背离金叉, LOW0.98, 1);
STICKLINE(底背离金叉, 0, 1, 2, 0), COLORRED;
逻辑说明: CROSS(J,K) 判断金叉形成;REF(J,1)<0 确保J值此前处于超卖区域;VOL>MA(VOL,5) 确保有资金进场配合,过滤无量空涨的假信号。
同花顺 KDJ金叉预警源码
同花顺的函数与通达信类似,但预警设置界面略有不同。此版本强调了“KDJ与MACD共振”。
// 同花顺 KDJ金叉预警公式
KDJ_K:=SMA((CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))100,3,1);
KDJ_D:=SMA(KDJ_K,3,1);
KDJ_J:=3KDJ_K-2KDJ_D;
MACD_DIF:=EMA(CLOSE,12)-EMA(CLOSE,26);
MACD_DEA:=EMA(MACD_DIF,9);
{金叉条件:KDJ金叉 且 MACD金叉 且 股价在20日均线之上}
共振金叉: CROSS(KDJ_J, KDJ_K) AND CROSS(MACD_DIF, MACD_DEA) AND CLOSE>MA(CLOSE,20);
DRAWTEXT(共振金叉, LOW0.95, '★共振金叉'), COLORRED;
逻辑说明: 此公式旨在捕捉趋势中的回调买点。只有当中期趋势(MACD和20日均线)向上时,KDJ的金叉才具有更高的可靠性,避免了在下跌趋势中抄底的风险。
Python 量化版 KDJ预警逻辑
对于使用量化平台(如JoinQuant, RiceQuant)的用户,可以使用Pandas进行数据计算和预警推送。
import pandas as pd
import numpy as np
def calculate_kdj(df, n=9, m1=3, m2=3):
"""计算KDJ指标"""
low_n = df['low'].rolling(window=n).min()
high_n = df['high'].rolling(window=n).max()
rsv = (df['close'] - low_n) / (high_n - low_n) 100
k = rsv.ewm(com=m1-1, adjust=False).mean()
d = k.ewm(com=m2-1, adjust=False).mean()
j = 3 k - 2 d
return pd.DataFrame({'K': k, 'D': d, 'J': j}, index=df.index)
def check_golden_cross(df_kdj):
"""检查金叉预警"""
df_kdj['prev_j'] = df_kdj['J'].shift(1)
df_kdj['prev_k'] = df_kdj['K'].shift(1)
# 金叉条件:当前J>K 且 昨日J<=K
df_kdj['golden_cross'] = (df_kdj['J'] > df_kdj['K']) & (df_kdj['prev_j'] <= df_kdj['prev_k'])
# 低位条件:昨日J < 0
df_kdj['low_pos'] = df_kdj['prev_j'] < 0
# 综合预警
df_kdj['alert'] = df_kdj['golden_cross'] & df_kdj['low_pos']
return df_kdj
使用示例:
kdj_df = calculate_kdj(stock_data)
signal_df = check_golden_cross(kdj_df)
alert_signals = signal_df[signal_df['alert'] == True]
print(alert_signals)