The DKX (Duokong Line), also known as the "Multiple-Average Multi-Period Price Line," is a sophisticated technical indicator used in stock and index analysis. It combines weighted moving averages of a composite midpoint price to assess market trends and potential reversal points. This article provides a comprehensive guide on how to implement the DKX and its moving average MADKX using Python, making it ideal for traders, data analysts, and algorithmic investors interested in enhancing their quantitative toolkit.
We'll walk through the formula, data preparation, step-by-step code implementation, and practical considerations — all while optimizing for clarity, accuracy, and real-world usability.
Understanding the DKX Indicator
The DKX, or Duokong Line, is designed to reflect the equilibrium point between bullish and bearish forces in the market by assigning decreasing weights to historical mid-price values over a 20-period window. The more recent prices carry higher significance, which makes this indicator responsive yet smooth compared to simple moving averages.
This makes DKX particularly useful for identifying trend direction, momentum shifts, and potential entry or exit signals when combined with its moving average — the MADKX.
👉 Discover how algorithmic trading tools can enhance your strategy development
Core Formula Breakdown
The calculation involves two main components:
1. Mid-Price (MID)
$$ \text{MID} = \frac{3 \times \text{Close} + \text{High} + \text{Low} + \text{Open}}{6} $$
This weighted average emphasizes the closing price, which is often considered the most important price point in technical analysis.
2. DKX Calculation
$$ \text{DKX} = \frac{ 20 \times \text{MID}_0 + 19 \times \text{MID}_{-1} + \dots + 1 \times \text{MID}_{-19} }{210} $$
Where:
- $\text{MID}_0$ = current period’s MID
- $\text{MID}_{-1}$ = previous period’s MID
- Denominator 210 = sum of weights from 1 to 20: $ \sum_{i=1}^{20} i = 210 $
3. MADKX – Moving Average of DKX
$$ \text{MADKX} = \text{MA}(\text{DKX}, N) $$
Typically, $N = 10$, aligning with common settings in platforms like East Money (Dongfangcaifu).
Data Preparation
To compute DKX, you’ll need historical OHLC (Open, High, Low, Close) data. In this example, we use the SSE STAR 50 Index (000688) starting from December 31, 2019, but the method applies universally to any stock, ETF, or index.
Ensure your dataset includes:
openhighlowclosedate(optional, for time-based indexing)
You can source this data via financial APIs such as:
- Yahoo Finance (
yfinance) - Tushare (for Chinese markets)
- Alpha Vantage
- Polygon.io
Once loaded into a pandas DataFrame, the structure should resemble:
| date | open | high | low | close |
|---|---|---|---|---|
| 2019-12-31 | 1500 | 1520 | 1490 | 1515 |
Step-by-Step Python Implementation
Below is a clean, well-documented function that calculates both DKX and MADKX:
import pandas as pd
import numpy as np
def calculate_dkx(df: pd.DataFrame, N: int = 10) -> pd.DataFrame:
"""
Calculate DKX and MADKX indicators.
Parameters:
df (pd.DataFrame): DataFrame containing 'open', 'high', 'low', 'close' columns.
N (int): Period for MADKX moving average, default is 10.
Returns:
pd.DataFrame: Original DataFrame with added 'dkx' and 'madkx' columns.
"""
# Avoid modifying original data
data = df.copy()
# Step 1: Compute MID (weighted average price)
mid = (3 * data['close'] + data['high'] + data['low'] + data['open']) / 6
# Step 2: Initialize variables
dkx = pd.Series(0.0, index=data.index)
total_weight = 0
# Step 3: Apply weighted sum over past 20 periods
for i in range(20):
weight = 20 - i
shifted_mid = mid.shift(i) # Current (i=0), previous (i=1), etc.
dkx += shifted_mid * weight
total_weight += weight
# Normalize by total weight (210)
dkx /= total_weight
# Step 4: Compute MADKX (simple moving average of DKX)
madkx = dkx.rolling(window=N).mean()
# Add results to DataFrame
data['dkx'] = dkx
data['madkx'] = madkx
return dataHow It Works:
- We calculate
midfor each day. - Then apply a weighted sum where the most recent
midgets a weight of 20, decreasing linearly to 1. - Finally, divide by the total weight (210) and compute the N-day moving average.
Key Implementation Notes
✅ Alignment with Trading Platforms:
When N=10, the output matches results from Dongfangcaifu (East Money) software — a widely used platform in China.
🚫 Not Available on Xueqiu:
As of now, Xueqiu does not support the DKX indicator natively, so implementing it manually gives you a competitive edge.
💡 Why Use Pandas .shift()?
It allows vectorized lag operations across time series, ensuring efficiency even with large datasets.
👉 Explore advanced trading analytics powered by real-time data
Practical Use Cases
1. Trend Identification
- When DKX > MADKX, the trend is bullish.
- When DKX < MADKX, the trend is bearish.
2. Crossover Signals
- Golden Cross: DKX crosses above MADKX → potential buy signal.
- Death Cross: DKX crosses below MADKX → potential sell signal.
3. Divergence Detection
Watch for divergences between price and DKX:
- Price makes new highs, but DKX fails to → bearish divergence.
- Price makes new lows, but DKX holds higher → bullish divergence.
Frequently Asked Questions (FAQ)
Q: Can I use DKX for intraday trading?
A: Yes. While commonly used on daily charts, DKX can be applied to hourly or 15-minute bars for short-term strategies. Just ensure sufficient historical depth (at least 20 periods).
Q: Is DKX suitable for all asset types?
A: Absolutely. Whether stocks, indices, futures, or cryptocurrencies, DKX works on any instrument with OHLC data. For crypto traders, pairing it with volume analysis adds further insight.
Q: Why is the closing price multiplied by 3 in the MID formula?
A: Because the close reflects final market consensus and is often seen as the most reliable price. Tripling its weight increases sensitivity to closing momentum.
Q: How do I handle missing data or gaps in my dataset?
A: Use pandas.DataFrame.fillna() methods like forward-fill (ffill) or interpolation. Avoid backward-fill to prevent lookahead bias.
Q: Can I optimize N for better performance?
A: Yes. While N=10 aligns with standard settings, you can backtest values between 5–20 to suit different volatility regimes.
Q: Does DKX work well alone?
A: Best used alongside other tools like RSI, MACD, or volume indicators. No single indicator should drive decisions in isolation.
Final Thoughts and Next Steps
Implementing custom technical indicators like DKX empowers traders to move beyond off-the-shelf tools and develop personalized strategies grounded in sound logic and reproducible code.
By leveraging Python’s powerful ecosystem — including pandas, numpy, and visualization libraries like matplotlib or plotly — you can integrate DKX into dashboards, alerts, or full algorithmic trading systems.
👉 Start building your own trading models using next-generation financial tools
Core Keywords Used
- DKX indicator
- MADKX calculation
- Python stock analysis
- Technical indicator implementation
- Weighted moving average
- OHLC data processing
- Algorithmic trading with Python
These keywords have been naturally integrated throughout the content to enhance search visibility without compromising readability or flow.
Whether you're analyzing the SSE STAR 50 Index or global equities, mastering indicators like DKX puts you one step ahead in understanding market dynamics — programmatically and profitably.