LON - 铁龙长线
1 公式
LC := REF(CLOSE,1);
VID := SUM(VOL,2)/(((HHV(HIGH,2)-LLV(LOW,2)))*100);
RC := (CLOSE-LC)*VID;
LONG := SUM(RC,0);
DIFF := SMA(LONG,10,1);
DEA := SMA(LONG,20,1);
LON : DIFF-DEA;
LONMA : MA(LON,10);
LONT : LON, COLORSTICK;
2 数据准备
我们以科创50指数 000688 为例,指数开始日期为2019-12-31,数据格式如下:
3 计算过程
def calculate_lon(df: pd.DataFrame, N=10) -> pd.DataFrame:
'''
计算 LON 及其移动平均线 LONMA。
参数:
df (pd.DataFrame): 包含至少 'high', 'low', 'close', 'volume' 列的 DataFrame,
分别代表每日最高价、最低价、收盘价和成交量。
N (int): 用于计算 LON 移动平均线 (LONMA) 的时间窗口大小,默认为10。
返回:
pd.DataFrame: 包含 LON 和 LONMA 值的 DataFrame。
'''
# 创建一个df的副本以避免修改原始数据
data = df.copy()
# 计算前一天的收盘价
lc = df['close'].shift(1)
# 计算连续两天的最高价和最低价的差值,并将其转换为百分比形式
a = (df['high'].rolling(2).max() - df['low'].rolling(2).min()) * 100
# 计算成交量指标(Volume Indicator),将两天内的成交量总和除以价格差百分比
vid = df['volume'].rolling(2).sum() / a
# 计算价格变动量(Price Change),即当前收盘价与前一天收盘价的差值
rc = (df['close'] - lc) * vid
# 计算累积价格变动量
long = rc.cumsum()
# 使用指数加权移动平均(EWMA)计算 DIF 线,平滑因子为9
dif = long.ewm(com=9, adjust=False).mean()
# 使用指数加权移动平均(EWMA)计算 DEA 线,平滑因子为19
dea = long.ewm(com=19, adjust=False).mean()
# 计算 LON 指标,即 DIF 线与 DEA 线的差值
lon = dif - dea
# 计算 LON 指标的 N 周期简单移动平均线 (SMA)
lonma = lon.rolling(N).mean()
# 将计算出的 LON 和 LONMA 值添加到 DataFrame
data['lon'] = lon
data['lonma'] = lonma
# 返回包含所有计算出指标的 DataFrame
return data
4 注意事项
参数N=10计算结果与东方财富软件中一致
雪球无此指标
与通信达一致