DKX - 多空线
1 公式
MID:=(3*CLOSE+LOW+OPEN+HIGH)/6;
DKX:(20*MID)+19*REF(MID,1)+18*REF(MID,2)+17*REF(MID,3)+
16*REF(MID,4)+15*REF(MID,5)+14*REF(MID,6)+
13*REF(MID,7)+12*REF(MID,8)+11*REF(MID,9)+
10*REF(MID,10)+9*REF(MID,11)+8*REF(MID,12)+
7*REF(MID,13)+6*REF(MID,14)+5*REF(MID,15)+
4*REF(MID,16)+3*REF(MID,17)+2*REF(MID,18)+REF(MID,20)/210;
MADKX:MA(DKX,M);
2 数据准备
我们以科创50指数 000688 为例,指数开始日期为2019-12-31,数据格式如下:
3 计算过程
def calculate_dkx(df: pd.DataFrame, N=10):
"""
计算 DKX 指标及其移动平均线 MADKX。
参数:
df (pd.DataFrame): 包含至少 'open', 'high', 'low', 'close' 列的 DataFrame,
分别代表每日开盘价、最高价、最低价和收盘价。
N (int): 用于计算 MADKX 的时间窗口大小,默认为10。
返回:
pd.DataFrame: 包含原始数据及计算出的DKX和MADKX值的 DataFrame。
"""
# 创建一个df的副本以避免修改原始数据
data = df.copy()
# 计算中间价 (Mid-price),这里是采用收盘价、开盘价、最高价和最低价的加权平均
mid = (3*data['close'] + data['high'] + data['low'] + data['open']) / 6
# 初始化 DKX 指标
dkx = 0
a = 0
# 计算 DKX 指标
# 这里使用了一个循环来计算最近20天的加权平均
for i in range(1, 21):
a += i # 累加权重
tmp = mid.shift(i-1) * (21 - i) # 计算加权项
dkx += tmp # 累加加权项
# 计算最终的 DKX 指标值
dkx = dkx / a
# 计算 DKX 指标的 N 周期移动平均线 MADKX
madkx = dkx.rolling(N).mean()
# 将计算出的 DKX 和 MADKX 值添加到 DataFrame
data['dkx'] = dkx
data['madkx'] = madkx
# 返回包含所有计算出指标的 DataFrame
return data
4 注意事项
参数N=10时,计算结果与东方财富软件中一致
雪球无此指标