[组合指标研究]KDJ DMI MA组合量化交易模型
KDJ、DMI、MA 指标简介及主要用法
1. KDJ 指标
简介:KDJ 是一种震荡型指标,主要用于判断短期超买超卖和买卖信号,由K 线(快线)、D 线(慢线)、J 线(辅助线)组成。
主要用法:
超买超卖:K 或 D > 80(超买,可能回调);K 或 D < 20(超卖,可能反弹)。
金叉死叉:K 上穿 D(买入信号);K 下穿 D(卖出信号)。
J 线辅助:J > 100(极端超买);J < 0(极端超卖)。
2. DMI(动向指标)
简介:DMI 用于判断趋势方向和强度,包含+DI(上升动向)、-DI(下降动向)、ADX(趋势强度)。
主要用法:
趋势方向:+DI > -DI(上涨趋势);-DI > +DI(下跌趋势)。
趋势强度:ADX > 25(趋势强烈);ADX < 20(趋势弱或无趋势)。
买卖信号:+DI 上穿 -DI(买入);-DI 上穿 +DI(卖出)。
3. MA(移动平均线)
简介:MA 是最基础的趋势指标,通过计算一定周期内的平均价格来平滑价格走势,常见有SMA(简单均线)、EMA(指数均线)。
主要用法:
趋势判断:价格在 MA 上方(多头趋势);价格在 MA 下方(空头趋势)。
金叉死叉:短周期 MA 上穿长周期 MA(买入);短周期 MA 下穿长周期 MA(卖出)。
组合策略源码
N:=14;
M:=6;
ADX_LEN:=14;
MA_LEN:=20;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M,1);
D:SMA(K,M,1);
J:3*K-2*D;
TR:=SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),ADX_LEN);
HD:=HIGH-REF(HIGH,1);
LD:=REF(LOW,1)-LOW;
DMP:=SUM(IF(HD>0 AND HD>LD,HD,0),ADX_LEN);
DMM:=SUM(IF(LD>0 AND LD>HD,LD,0),ADX_LEN);
ZDI:DMP/TR*100;
FDI:DMM/TR*100;
ADX:MA(ABS(ZDI-FDI)/(ZDI+FDI)*100,ADX_LEN);
MA20:MA(CLOSE,MA_LEN);
LONG_TREND:=CLOSE>MA20 AND ZDI>FDI AND ADX>25;
SHORT_TREND:=CLOSE< MA20 AND FDI>ZDI AND ADX>25;
KDJ_BUY:=K>D;
KDJ_SELL:=K< D;
LONG_TREND AND KDJ_BUY,BPK;
SHORT_TREND AND KDJ_SELL,SPK;
SETSIGPRICETYPE(BPK,LIMIT_ORDER);
SETSIGPRICETYPE(SPK,LIMIT_ORDER);
SETSIGPRICETYPE(BK,LIMIT_ORDER);
SETSIGPRICETYPE(SK,LIMIT_ORDER);
SETSIGPRICETYPE(BP,LIMIT_ORDER);
SETSIGPRICETYPE(SP,LIMIT_ORDER);
AUTOFILTER;
策略逻辑:
1、反手策略
多:收盘价 > MA20 且 +DI > -DI 且 ADX > 25 且 KDJ金叉状态
空:收盘价 < MA20 且 -DI > +DI 且 ADX > 25 且 KDJ死叉状态
2、多空策略
多:收盘价 > MA20 且 +DI > -DI 且 ADX > 25 且 KDJ金叉状态
平: 任意条件死叉
空:收盘价 < MA20 且 -DI > +DI 且 ADX > 25 且 KDJ死叉状态
平:任意条件金叉
N:=14;
M:=6;
ADX_LEN:=14;
MA_LEN:=20;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M,1);
D:SMA(K,M,1);
J:3*K-2*D;
TR:=SUM(MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))),ADX_LEN);
HD:=HIGH-REF(HIGH,1);
LD:=REF(LOW,1)-LOW;
DMP:=SUM(IF(HD>0 AND HD>LD,HD,0),ADX_LEN);
DMM:=SUM(IF(LD>0 AND LD>HD,LD,0),ADX_LEN);
ZDI:DMP/TR*100;
FDI:DMM/TR*100;
ADX:MA(ABS(ZDI-FDI)/(ZDI+FDI)*100,ADX_LEN);
MA20:MA(CLOSE,MA_LEN);
LONG_TREND:=CLOSE>MA20 AND ZDI>FDI AND ADX>25;
SHORT_TREND:=CLOSE< MA20 AND FDI>ZDI AND ADX>25;
KDJ_BUY:=K>D;
KDJ_SELL:=K< D;
LONG_TREND AND KDJ_BUY,BPK;
C< MA20 OR ZDI< FDI OR K< D,SP;
SHORT_TREND AND KDJ_SELL,SPK;
C>MA20 OR ZDI>FDI OR K>D,BP;
SETSIGPRICETYPE(BPK,LIMIT_ORDER);
SETSIGPRICETYPE(SPK,LIMIT_ORDER);
SETSIGPRICETYPE(BK,LIMIT_ORDER);
SETSIGPRICETYPE(SK,LIMIT_ORDER);
SETSIGPRICETYPE(BP,LIMIT_ORDER);
SETSIGPRICETYPE(SP,LIMIT_ORDER);
AUTOFILTER;
/*
策略逻辑:
1反手策略
多:收盘价 > MA20 且 +DI > -DI 且 ADX > 25 且 KDJ金叉状态
空:收盘价 < MA20 且 -DI > +DI 且 ADX > 25 且 KDJ死叉状态
2多空策略
多:收盘价 > MA20 且 +DI > -DI 且 ADX > 25 且 KDJ金叉状态
平: 任意条件死叉
空:收盘价 < MA20 且 -DI > +DI 且 ADX > 25 且 KDJ死叉状态
平:任意条件金叉
*/