KDJ指标
逻辑案例:
K线 上穿 D线→ 开多信号参考
K线 下穿 D线→ 平多信号参考
D线 上穿 K线→ 开空信号参考
D线 下穿 K线→ 平空信号参考
参数参考:(9,3,3)
一、文华财经麦语言代码演示
// KDJ策略 9,3,3
INPUT:N(9),M1(3),M2(3);
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:=SMA(RSV,M1,1);
D:=SMA(K,M2,1);
J:=3*K-2*D;
// 信号
金叉:=CROSS(K,D);
死叉:=CROSSDOWN(K,D);
// 多单
IF金叉AND HOLDING=0THENBK(1);
IF死叉AND HOLDING>0THENSP(BKVOL);
// 空单
IF CROSS(D,K) AND HOLDING=0THEN SK(1);
IF CROSSDOWN(D,K) AND HOLDING<0THEN BP(SKVOL);
二、通达信期货通代码演示
{KDJ指标 9,3,3}
N:=9;M1:=3;M2:=3;
RSV:=(C-LLV(L,N))/(HHV(H,N)-LLV(L,N))*100;
K:SMA(RSV,M1,1);
D:SMA(K,M2,1);
J:3*K-2*D;
金叉:=CROSS(K,D);
死叉:=CROSS(D,K);
DRAWICON(金叉,L*0.98,1);
DRAWICON(死叉,H*1.02,2);
三、无限易程序化软件
无限易Python版代码演示
definitialize(context):
pass
defhandle_bar(context, bars):
import talib
bar = bars[0]
high = bar.high_array
low = bar.low_array
close = bar.close_array
# 计算KDJ(9,3,3)
K,D = talib.STOCH(high, low, close,
fastk_period=9,
slowk_period=3, slowk_matype=0,
slowd_period=3, slowd_matype=0)
J = 3*K[-1] - 2*D[-1]
# 金叉死叉
gold = (K[-2] < D[-2]) and (K[-1] > D[-1])
dead = (K[-2] > D[-2]) and (K[-1] < D[-1])
short_sig = (D[-2] < K[-2]) and (D[-1] > K[-1])
cover_sig = (D[-2] > K[-2]) and (D[-1] < K[-1])
long_pos = context.get_position_long()
short_pos = context.get_position_short()
if gold and long_pos==0and short_pos==0:
context.buy_open(1)
if dead and long_pos>0:
context.sell_close(long_pos)
if short_sig and long_pos==0and short_pos==0:
context.sell_open(1)
if cover_sig and short_pos>0:
context.buy_close(short_pos)
无限易拖拽式可视化编辑器操作步骤
1、打开无限易 → 策略 → 新建“可视化策略” → 选择合约周期
2、拖入 KDJ 指标节点(K 线、D 线、J 线)
右侧属性设置KDJ 标准参数:
N周期:9
M1:3
M2:3
3、拖入【交叉判断】节点(金叉/死叉)
CrossOver (K, D) → 开多
CrossUnder (K, D) → 平多
CrossOver (D, K) → 开空
CrossUnder (D, K) → 平空
4、拖入交易指令:
买开/ 卖平 / 卖开 / 买平
5、连线:
K上穿D + 空仓 → 买开
K下穿D + 持多 → 卖平
D上穿K + 空仓 → 卖开
D下穿K + 持空 → 买平
6、设置手数 1,启用持仓判断,避免重复开仓

四、金字塔代码演示
//KDJ策略 9,3,3
N:=9;M1:=3;M2:=3;
RSV:=(C-LLV(L,N))/(HHV(H,N)-LLV(L,N))*100;
K:SMA(RSV,M1,1);
D:SMA(K,M2,1);
J:3*K-2*D;
金叉:=CROSS(K,D);
死叉:=CROSSDOWN(K,D);
//多单
IF金叉 AND HOLDING=0THENBUY(1, C,MARKET);
IF死叉 AND HOLDING>0THENSELL(HOLDING,C,MARKET);
//空单
IF CROSS(D,K) AND HOLDING=0THENSHORT(1,C,MARKET);
IF CROSSDOWN(D,K) AND HOLDING<0THENCOVER(ABS(HOLDING),C,MARKET);
五、交易开拓者(TB)代码演示
//Params
Numeric Length(9);
Numeric SlowLength(3);
Numeric SmoothLength(3);
Vars
Bool GoldenCross(False);
Bool DeathCross(False);
Numeric RSV;
Numeric KValue;
Numeric DValue;
Numeric JValue;
Events
OnBar(ArrayRef<Integer> indexs)
{
RSV=(Close-Lowest(Low,Length))/(Highest(High,Length)-Lowest(Low,Length))*100;
KValue= SMA(RSV,SlowLength,1);
DValue = SMA(KValue,SmoothLength,1);
JValue=3*KValue-2*DValue;
GoldenCross = CrossOver(KValue,DValue);
DeathCross = CrossUnder(KValue, DValue);
If(GoldenCross && MarketPosition == 0)
Buy(1, Close);
If(DeathCross && MarketPosition == 1)
SELL(1, Close);
If (CrossOver(DValue,KValue) && MarketPosition == 0)
SellShort(1,Close);
If (CrossUnder(DValue,KValue) && MarketPosition==-1)
BuyToCover(1, Close);
}
六、MC(MultiCharts) 代码演示
[IntrabarOrderGeneration = False]
Vars:RSV(0),K(0),D(0),J(0);
RSV = (Close - Lowest(Low,9)) / (Highest(High,9) - Lowest(Low,9)) * 100;
K = XAverage(RSV,3);
D = XAverage(K,3);
J = 3*K - 2*D;
Plot1(K,"K");
Plot2(D,"D");
Plot3(J,"J");
If CrossOver(K,D) ThenBuy Next Bar At Market;
If CrossUnder(K,D) ThenSell Next Bar At Market;
If CrossOver(D,K) ThenShort Next Bar At Market;
If CrossUnder(D,K) ThenCover Next Bar At Market;
风险提示:期市有风险,入市需谨慎。以上代码演示内容来源于各软件官网资料的整理,实际功能、使用效果可能因软件版本、硬件环境、网络条件等因素存在差异,最新规则请以各软件官网公告为准。期货公司不参与上述软件的开发、维护及策略效果验证,亦不对其准确性、完整性、适用性及盈利性作任何明示或暗示的保证。市场环境、波动特征、流动性等因素均可能发生显著变化,导致策略失效或产生较大亏损。程序化交易依赖网络、硬件、软件环境及数据源等多项技术条件,可能出现延迟、中断、错误信号、重复发单或未成交等情况,进而造成意外损失。不同软件在函数定义、信号触发时机、K线计算方式、撮合规则等方面存在差异,同一策略在不同平台上的执行结果可能不同。参数设置(如均线周期)亦可能对策略表现产生重大影响,不当的参数选择会放大风险。以上代码演示内容不构成任何交易建议,使用者应当根据自身的风险承受能力、投资经验及财务状况,独立作出交易决策并承担全部交易风险。
(如有兴趣,可扫码联系获取更多有关量化与程序化交易相关内容的投教资料)

期市有风险,入市需谨慎。页面信息仅供参考,不构成任何交易建议及保本保收益承诺,量化交易存在固有风险,无论使用何种软件均不保证交易盈利,过往策略回测业绩不代表未来实盘收益。期货开户需完成交易者分类,适配风险承受能力,交易者需根据自身的风险承受能力自主作出交易决策并承担交易风险。
夜雨聆风