QMT量化技术指标编写:MACD与KDJ公式示例
还有疑问,立即追问>

QMT量化 qmt 技术指标

QMT量化技术指标编写:MACD与KDJ公式示例

叩富问财 浏览:646 人 分享分享

共2个回答
+微信
从业认证| 从业8年

首发回答
您好,我来为您提供QMT量化交易系统中MACD与KDJ的指标编写示例,帮您掌握这两类常用技术指标的代码实现逻辑与基础应用方法。

(1)MACD指标编写示例
MACD是判断趋势强弱的经典指标,核心看DIF、DEA两条均线和红绿柱变化。在QMT里用Python编写的示例如下:
```python
def calc_macd(close, short=12, long=26, m=9):
ema_short = close.ewm(span=short, adjust=False).mean()
ema_long = close.ewm(span=long, adjust=False).mean()
dif = ema_short - ema_long
dea = dif.ewm(span=m, adjust=False).mean()
macd = 2 * (dif - dea)
return dif, dea, macd
```
简单来说,close是股票每日收盘价数据,12、26、9是行业常用的周期参数,您也可以根据交易习惯调整,输出的dif和dea是核心均线,macd对应红绿柱的数值。

(2)KDJ指标编写示例
KDJ用于判断价格超买超卖状态,核心是K、D、J三条线的走势。QMT中的Python编写示例如下:
```python
def calc_kdj(high, low, close, n=9, m1=3, m2=3):
low_min = low.rolling(window=n).min()
high_max = high.rolling(window=n).max()
rsv = (close - low_min) / (high_max - low_min) * 100
k = rsv.ewm(span=m1, adjust=False).mean()
d = k.ewm(span=m2, adjust=False).mean()
j = 3 * k - 2 * d
return k, d, j
```
这里的high、low是每日最高价和最低价,9、3、3是常用周期参数,rsv反映当前价格在近期区间的相对位置,K、D是平滑后的数值,J是辅助判断线。

需要注意的是,技术指标仅作为交易参考工具,不能保证交易盈利,实际决策需结合自身风险承受能力。

如果您想搭建更完善的量化交易策略,或是需要适配量化交易的证券账户,可点击头像添加微信进一步沟通。我司开户可申请成本佣金!可转债、ETF万0.5,期权1.7元/张,两融专项利率低至3.5%以下,国债逆回购手续费一折!支持同花顺/通达信交易软件。
当前我在线 直接联系我
赞 关注 分享
踩
发布于2026-9-8 19:19 广州

还有疑问?看看专业认证经理怎么说

张经理:
先掌握QMT平台MACD与KDJ的基础构成参数,熟悉指标核心计算逻辑
资深吴经理:
结合自身交易逻辑调整参数,完成适配策略的自定义公式编写
15名擅长【MACD使用】的认证经理当前在线>
+微信
从业认证| 从业10年+

在 QMT 里写 MACD、KDJ,主要有三种方式:Python 原生 pandas 计算、myTT 库、QMT VBA 公式。下面按“可直接复制使用”的方式整理。


1. Python 原生写法:MACD

默认参数:12, 26, 9。

import pandas as pd

def calc_macd(close, fast=12, slow=26, signal=9):
close = pd.Series(close)
ema_fast = close.ewm(span=fast, adjust=False).mean()
ema_slow = close.ewm(span=slow, adjust=False).mean()
dif = ema_fast - ema_slow
dea = dif.ewm(span=signal, adjust=False).mean()
macd = (dif - dea) * 2
return dif, dea, macd

注意:adjust=False 是为了对齐通达信、同花顺等国内常见软件的 EMA 算法。




2. Python 原生写法:KDJ

默认参数:9, 3, 3。

def calc_kdj(high, low, close, n=9, m1=3, m2=3):
high = pd.Series(high)
low = pd.Series(low)
close = pd.Series(close)

llv = low.rolling(window=n).min()
hhv = high.rolling(window=n).max()

rsv = (close - llv) / (hhv - llv) * 100
rsv = rsv.fillna(50)

k = rsv.ewm(alpha=1 / m1, adjust=False).mean()
d = k.ewm(alpha=1 / m2, adjust=False).mean()
j = 3 * k - 2 * d

return k, d, j

这里用 ewm(alpha=1/m) 近似国内常见软件里的 SMA 平滑方式。




3. QMT 策略框架中调用

def handlebar(ContextInfo):
df = ContextInfo.get_market_data_ex(
['high', 'low', 'close'],
ContextInfo.stock_code,
period='1d',
count=120,
dividend_type='front'
)

close = df['close']
high = df['high']
low = df['low']

dif, dea, macd = calc_macd(close)
k, d, j = calc_kdj(high, low, close)

# 示例:MACD 金叉
macd_golden = (dif.iloc[-1] > dea.iloc[-1]) and (dif.iloc[-2] <= dea.iloc[-2])

# 示例:KDJ 金叉
kdj_golden = (k.iloc[-1] > d.iloc[-1]) and (k.iloc[-2] <= d.iloc[-2])


4. 使用 myTT 简化写法

如果 QMT 环境里已有 myTT,可以直接这样写:

import myTT as mt

DIF, DEA, MACD = mt.MACD(CLOSE, 12, 26, 9)
K, D, J = mt.KDJ(CLOSE, HIGH, LOW, 9, 3, 3)

信号可以写成:

buy_signal = mt.CROSS(DIF, DEA) & mt.CROSS(K, D)
sell_signal = mt.CROSS(DEA, DIF) & mt.CROSS(D, K)





5. QMT VBA 公式写法

在 QMT 公式管理器里,MACD 可写成:

s:=12;
p:=26;
m:=9;

DIF:EMA(C,s)-EMA(C,p);
DEA:EMA(DIF,m);
MACD:DIF-DEA;

KDJ 可写成:

input:n(9,1,100,10),p1(3,2,40,4),p2(3,2,40,4);

RSV:(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,P1,1);
D:SMA(K,P2,1);
J:3*K-2*D;





常用参数对照



指标
默认参数
常见含义



MACD
12, 26, 9
快线EMA、慢线EMA、DEA平滑周期


KDJ
9, 3, 3
RSV周期、K平滑、D平滑


如果你是在 QMT 策略回测里用,建议用 count 至少取 100 根以上 K 线,否则 EMA 初期数据容易不稳。



需要我帮你把MACD和KDJ组合成一个完整的买入卖出信号逻辑,直接套进QMT策略框架里吗?

当前我在线 直接联系我
赞 关注 分享
踩
发布于2026-9-30 14:41 增城
   1724位专业经理在线
问题没解决?12353人选择一键咨询
99%用户选择 快速提问
其他类似问题
怎么设置技术指标KDJ。MACD,如何设置呢
KDJ和MACD是两种常用的技术指标,它们的设置方法如下:KDJ指标组成:K线、D线和J线。常用参数:通常使用(9,3,3)。这表示以9天为计算周期,K值和D值的平滑周期分别为3。调整...
小鹿经理 5479
通达信软件的 “自编指标” 功能如何编写简单的技术指标公式?​
在通达信软件中编写简单技术指标公式,可按以下步骤进行:​打开公式编辑器:在通达信软件界面中,点击“功能”菜单,在下拉菜单中选择“公式系统”,然后点击“公式管理器”,打开公式管理器窗口。...
资深杨经理 11793
在使用技术指标分析股票时,MACD、KDJ、RSI这几个指标哪个更准确呢?
MACD、KDJ、RSI各有优势,适用于不同的市场情况。
资深张经理 6979
MACD、KDJ、BOLL等技术指标如何结合使用更有效?
我给你一套最简单、散户最实用、不绕弯的三指标结合用法:MACD看趋势,KDJ看买卖点,BOLL看压力支撑。三个配合,准确率直接翻倍。一、三个指标各自只干一件事1.MACD——只看趋势金...
财经小李子 2509
除了MACD,还有哪些技术指标比较实用?应该如何结合使用?
除了MACD,以下技术指标也非常实用,并且可以结合使用以提高市场分析的准确性:1.KDJ(随机指标)特点:KDJ指标灵敏,能够快速反映市场的短期波动,适用于短线操作。结合使用:KDJ可...
小鹿经理 4231
老师,在分析股票技术指标时,MACD、KDJ、RSI这几个指标应该如何结合使用呢?
MACD、KDJ、RSI这几个技术指标各有特点,结合使用能提高分析准确性。MACD侧重于趋势判断,当DIF线向上穿过DEA线,形成金叉,是买入信号;反之,死叉是卖出信号。KDJ反应灵敏...
资深张经理 3219
同城推荐
  • 咨询

    从业认证|

  • 咨询

    从业认证|

  • 咨询

    从业认证|

相关文章
回到顶部