欢迎光临
我们一直在努力

Momentum:ERI(埃尔徳射线指标)技术指标详解

Momentum:ERI(埃尔徳射线指标)技术指标详解

一、ERI的定义

ERI(Elder-Ray Index,埃尔徳射线指标) 是由知名交易员、心理学家亚历山大·埃尔徳(Alexander Elder)博士于1989年开发的技术分析指标。该指标的设计理念是像“X光”一样透视市场,揭示价格波动背后买方和卖方的真实力量对比。

核心设计理念

ERI的核心思想是:价格是买卖双方博弈的“表面现象”,而真正的市场力量——买方的推动力和卖方的打压能力——需要通过比较价格与市场“共识价值”的偏离程度来衡量。

ERI将价格走势分解为三个层面:

  • EMA均线:代表市场的“共识价值”(Consensus Value of Price)
  • Bull Power(多头力量):买方将价格推升至共识价值之上的能力
  • Bear Power(空头力量):卖方将价格打压至共识价值之下的能力

ERI的双线结构

ERI指标由两条独立的线组成,通常以柱状图形式展示:

组成部分计算公式衡量对象取值特征
Bull Power(多头力量) 当日最高价 – EMA 买方将价格推至均线上方的能力 正值表示买方强势
Bear Power(空头力量) 当日最低价 – EMA 卖方将价格压至均线下方的能力 负值表示卖方强势

二、ERI的计算方法

1. 核心计算公式

ERI的计算包含两个独立的指标:

第一步:计算EMA(共识价值线)

首先计算周期的指数移动平均线(默认周期为13):

EMA13=EMA(Close,13)
\\mathrm{EMA_{13} = EMA(Close,13)}
EMA13=EMA(Close,13)

第二步:计算Bull Power(多头力量)
BullPower=High−EMA13
\\mathrm{Bull Power=High−EMA_{13}}
BullPower=HighEMA13

第三步:计算Bear Power(空头力量)
BearPower=Low−EMA13
\\mathrm{Bear Power=Low−EMA_{13}}
BearPower=LowEMA13

其中:

  • High:当前周期的最高价
  • Low:当前周期的最低价
  • EMA13\\mathrm{EMA}_{13}EMA13:13周期收盘价指数移动平均线

2. panda_ta中的实现

根据pandas_ta的源代码,ERI的计算实现如下:

ema_ = ema(close, length)
bull = high ema_
bear = low ema_

默认参数length=13,与埃尔徳博士的原始设计一致。

3. 参数说明

参数默认值说明
length 13 EMA计算周期,代表市场的共识价值窗口
offset 0 结果偏移周期数

4. 计算示例

假设某股票使用默认参数(length=13):

已知数据:

  • 13周期EMA = 100.00
  • 当日最高价 = 105.00
  • 当日最低价 = 98.00

计算过程:

指标计算结果含义
Bull Power 105.00 – 100.00 +5.00 买方力量超过共识价值5个单位
Bear Power 98.00 – 100.00 -2.00 卖方力量低于共识价值2个单位
组合解读市场状态
Bull Power > 0, Bear Power < 0 多头在推高,空头在打压,正常震荡
Bull Power > 0 且上升, Bear Power < 0 且上升 多头和空头力量均在减弱,可能变盘
Bull Power > 0 且下降, Bear Power < 0 且下降 双方力量增强,趋势持续

三、ERI的使用方法

1. 趋势识别——EMA斜率定方向

ERI系统首先通过EMA的斜率判断主趋势方向:

EMA状态趋势方向操作原则
EMA向上倾斜 上升趋势 只寻找买入机会,避免做空
EMA向下倾斜 下降趋势 只寻找卖出机会,避免做多
EMA走平 无趋势/盘整 观望,或等待方向明确

2. 做多信号——多头入场条件

根据埃尔徳博士的原始设计,多头入场需满足以下条件:

条件具体内容含义
条件1 EMA向上倾斜 确认上升趋势
条件2 Bear Power为负值 空头力量存在,但正在减弱
条件3 Bear Power上升(方向向上) 空头打压能力减弱

可选增强条件:

  • Bull Power创出更高的峰值(多头力量在增强)
  • Bear Power与价格出现看涨背离

3. 做空信号——空头入场条件

条件具体内容含义
条件1 EMA向下倾斜 确认下降趋势
条件2 Bull Power为正值 多头力量存在,但正在减弱
条件3 Bull Power下降(方向向下) 多头推动能力减弱

4. 背离信号——反转预警

与价格走势的背离是ERI最可靠的反转信号:

背离类型价格表现ERI表现信号含义
看涨背离 价格创新低 Bear Power未创新低(形成更高低点) 空头力量衰竭,买入信号
看跌背离 价格创新高 Bull Power未创新高(形成更低高点) 多头力量衰竭,卖出信号

5. 风险提示与注意事项

使用ERI前需了解以下要点:

局限性说明
滞后性 基于EMA计算,指标本身存在一定的滞后,快速反转中可能反应延迟
假信号 在震荡市场中,Bull Power和Bear Power可能频繁穿越零轴,产生假信号
不应单独使用 埃尔徳博士强调,任何单一指标都不应作为唯一决策依据,建议结合价格行为、其他指标或图表形态综合判断
系统化使用 ERI配合EMA斜率使用是埃尔徳博士交易系统的核心方法,不建议单独使用Bull Power或Bear Power

四、使用pandas_ta计算ERI(附示例代码)

1. pandas_ta中的ERI函数

pandas_ta库内置了ERI指标的完整实现,函数位于momentum模块中。

2. 函数完整参数

pandas_ta.momentum.eri(high, low, close, length=None, offset=None, **kwargs)

参数详解:

参数类型默认值说明
high pd.Series 必需 最高价序列
low pd.Series 必需 最低价序列
close pd.Series 必需 收盘价序列
length int 13 EMA计算周期
offset int 0 结果偏移周期数

返回值:pd.DataFrame——包含两列:

  • BULLP_{length}:多头力量(Bull Power)
  • BEARP_{length}:空头力量(Bear Power)

3. 示例代码

import pandas as pd
import pandas_ta as ta
import numpy as np
import matplotlib.pyplot as plt

# ========== 第一步:准备数据 ==========
np.random.seed(42)
dates = pd.date_range(start='2023-01-01', end='2024-12-31', freq='D')
n = len(dates)

# 生成带趋势和周期波动的价格序列
trend = np.linspace(0, 45, n)
cycle = np.sin(np.linspace(0, 6 * np.pi, n)) * 15
noise = np.random.randn(n) * 3
price_series = 100 + trend + cycle + noise

# 添加趋势变化区间
price_series = price_series.astype(float)
for i in range(300, 450):
price_series[i] = price_series[300] + (i300) * 0.2
for i in range(450, 600):
price_series[i] = price_series[450] (i450) * 0.15

df = pd.DataFrame(index=dates[:n])
df['close'] = price_series[:n]
df['high'] = df['close'] + np.abs(np.random.randn(n)) * 2 + 1
df['low'] = df['close'] np.abs(np.random.randn(n)) * 2 1
df['volume'] = np.random.randint(1000000, 25000000, n)

print("=" * 60)
print("数据预览:")
print(df.head())
print("\\n" + "=" * 60 + "\\n")

# ========== 第二步:计算ERI(基础用法) ==========
# 使用默认参数 length=13
eri_df = ta.eri(df['high'], df['low'], df['close'])

# 查看返回的DataFrame结构
print("ERI返回列名称:")
print(eri_df.columns.tolist())
print("\\n" + "=" * 60 + "\\n")

# 将计算结果添加到原DataFrame
df['Bull_Power'] = eri_df['BULLP_13']
df['Bear_Power'] = eri_df['BEARP_13']

print("ERI计算结果(最近10行):")
print(df[['close', 'Bull_Power', 'Bear_Power']].tail(10))
print("\\n" + "=" * 60 + "\\n")

# ========== 第三步:计算EMA作为参考 ==========
df['EMA_13'] = ta.ema(df['close'], length=13)

print("EMA_13值(最近5行):")
print(df[['close', 'EMA_13']].tail())
print("\\n" + "=" * 60 + "\\n")

# ========== 第四步:生成做多/做空信号 ==========
# EMA斜率判断
df['ema_slope'] = df['EMA_13'].diff()
df['ema_up'] = df['ema_slope'] > 0
df['ema_down'] = df['ema_slope'] < 0

# Bull和Bear Power状态
df['bear_negative_rising'] = (df['Bear_Power'] < 0) & (df['Bear_Power'] > df['Bear_Power'].shift(1))
df['bull_positive_falling'] = (df['Bull_Power'] > 0) & (df['Bull_Power'] < df['Bull_Power'].shift(1))

# 做多信号:EMA上升 + Bear Power为负但正在上升
df['long_signal'] = df['ema_up'] & df['bear_negative_rising']

# 做空信号:EMA下降 + Bull Power为正但正在下降
df['short_signal'] = df['ema_down'] & df['bull_positive_falling']

df['trade_signal'] = ''
df.loc[df['long_signal'], 'trade_signal'] = '做多信号(多头入场)'
df.loc[df['short_signal'], 'trade_signal'] = '做空信号(空头入场)'

print("交易信号统计:")
print(f"做多信号数量:{df['long_signal'].sum()}")
print(f"做空信号数量:{df['short_signal'].sum()}")

print("\\n最近15个交易信号:")
signals = df[df['trade_signal'] != ''].tail(15)
if not signals.empty:
print(signals[['close', 'EMA_13', 'Bull_Power', 'Bear_Power', 'trade_signal']])
print("\\n" + "=" * 60 + "\\n")

# ========== 第五步:背离检测(简化版) ==========
# 计算局部极值
df['price_high'] = df['close'].rolling(5).max()
df['price_low'] = df['close'].rolling(5).min()
df['bull_high'] = df['Bull_Power'].rolling(5).max()
df['bear_low'] = df['Bear_Power'].rolling(5).min()

# 顶背离:价格新高但Bull Power未新高
price_new_high = df['close'] == df['price_high']
bull_not_new_high = df['Bull_Power'] < df['bull_high'].shift(1)
df['bearish_div'] = price_new_high & bull_not_new_high

# 底背离:价格新低但Bear Power未新低
price_new_low = df['close'] == df['price_low']
bear_not_new_low = df['Bear_Power'] > df['bear_low'].shift(1)
df['bullish_div'] = price_new_low & bear_not_new_low

print("背离信号统计:")
print(f"顶背离(价格新高但Bull Power未新高)数量:{df['bearish_div'].sum()}")
print(f"底背离(价格新低但Bear Power未新低)数量:{df['bullish_div'].sum()}")
print("\\n" + "=" * 60 + "\\n")

# ========== 第六步:策略回测 ==========
# 策略:做多信号买入,做空信号卖出
df['position'] = 0
in_position = False

for i in range(1, len(df)):
if not in_position and df['long_signal'].iloc[i]:
df.loc[df.index[i], 'position'] = 1
in_position = True
elif in_position and df['short_signal'].iloc[i]:
df.loc[df.index[i], 'position'] = 0
in_position = False
else:
df.loc[df.index[i], 'position'] = df['position'].iloc[i1]

# 计算收益
df['returns'] = df['close'].pct_change()
df['strategy_returns'] = df['position'].shift(1) * df['returns']

total_return_buyhold = (1 + df['returns']).prod() 1
total_return_strategy = (1 + df['strategy_returns']).prod() 1

print("=" * 60)
print("策略绩效统计(ERI系统策略回测):")
print(f"买入持有策略总收益率:{total_return_buyhold:.2%}")
print(f"ERI系统策略总收益率:{total_return_strategy:.2%}")
print("\\n注意:此为简化回测,仅供参考")
print("=" * 60 + "\\n")

# ========== 第七步:可视化 ==========
plt.figure(figsize=(14, 12))

# 子图1:价格 + EMA
plt.subplot(3, 1, 1)
plt.plot(df.index[200:], df['close'][200:], label='Close Price',
linewidth=1.5, color='black')
plt.plot(df.index[200:], df['EMA_13'][200:], label='EMA (13) – 共识价值',
linewidth=1.5, color='orange')
plt.title('Price Chart with EMA (Last 200 days)', fontsize=14)
plt.ylabel('Price')
plt.legend()
plt.grid(True, alpha=0.3)

# 子图2:Bull Power(多头力量)
plt.subplot(3, 1, 2)
plt.axhline(y=0, color='gray', linestyle='-', linewidth=1)
plt.bar(df.index[200:], df['Bull_Power'][200:],
color='green', alpha=0.6, width=0.8, label='Bull Power')
plt.title('Bull Power – 多头力量', fontsize=14)
plt.ylabel('Bull Power')
plt.legend()
plt.grid(True, alpha=0.3)

# 子图3:Bear Power(空头力量)
plt.subplot(3, 1, 3)
plt.axhline(y=0, color='gray', linestyle='-', linewidth=1)
plt.bar(df.index[200:], df['Bear_Power'][200:],
color='red', alpha=0.6, width=0.8, label='Bear Power')
plt.title('Bear Power – 空头力量', fontsize=14)
plt.xlabel('Date')
plt.ylabel('Bear Power')
plt.legend()
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

# ========== 第八步:数据清洗提示 ==========
nan_count = df['Bull_Power'].isna().sum()
print(f"\\nERI初始NaN数量:{nan_count}")
print("原因:ERI需要至少length个周期的数据才能计算EMA")
print("处理建议:df_clean = df.iloc[13:].copy()")
print("\\n" + "=" * 60)
print("ERI使用提示:")
print("1. ERI包含两个独立指标:Bull Power(多头力量)和Bear Power(空头力量)")
print("2. 做多条件:EMA上升 + Bear Power为负但正在上升")
print("3. 做空条件:EMA下降 + Bull Power为正但正在下降")
print("4. 背离是ERI最可靠的信号:Bull Power顶背离、Bear Power底背离")
print("5. 建议结合价格形态和其他指标综合判断,不单独使用")
print("=" * 60)

五、总结

ERI(埃尔徳射线指标)是一种透视市场多空力量的技术分析工具,其核心价值与定位如下:

维度特点
核心创新 用价格与EMA的偏离衡量多空真实力量
双线结构 Bull Power(多头力量)+ Bear Power(空头力量)
三大核心信号 EMA斜率定方向、Bull/Bear Power强弱判断、顶底背离
默认参数 length=13
最佳应用场景 趋势确认、多空力量判断、背离交易
主要局限 滞后性、震荡市假信号、需配合EMA斜率使用

实战使用三原则:

  • EMA斜率定方向,Bull/Bear Power定时机:做多需EMA上升且Bear Power为负但正在上升;做空需EMA下降且Bull Power为正但正在下降
  • 背离是最强反转信号:Bull Power顶背离预示多头衰竭,Bear Power底背离预示空头衰竭,是ERI最可靠的交易信号
  • 系统化使用,不单独依赖:ERI是埃尔徳博士交易系统的一部分,建议结合价格形态、成交量和其他指标综合判断,任何单一指标都不应作为唯一决策依据
  • 赞(0)
    未经允许不得转载:171主机测评 » Momentum:ERI(埃尔徳射线指标)技术指标详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址