Trend:AMAT(阿彻移动平均线趋势指标)技术指标详解
一、AMAT的定义
AMAT(Archer Moving Averages Trend,阿彻移动平均线趋势指标) 是pandas_ta库中内置的一种趋势识别指标,用于判断市场当前所处的趋势状态(上升趋势或下降趋势)。

核心思想
AMAT通过比较两条不同周期的移动平均线来识别趋势方向,并将趋势状态量化为可操作的信号。其核心逻辑是:快速均线高于慢速均线表示上升趋势,反之则为下降趋势,并在此基础上通过回溯验证来增强信号的可靠性。
AMAT的核心特征
| 理论基础 | 双均线交叉原理 + 趋势确认回溯 |
| 指标类型 | 趋势识别/趋势跟踪指标 |
| 开发者 | 由pandas_ta库实现,设计源于Archer趋势交易系统 |
| 默认参数 | fast=8, slow=21, lookback=2 |
| 返回值 | 两条二元信号线:LR(长期运行趋势)和SR(短期运行趋势) |
AMAT的输出结构
AMAT指标返回一个DataFrame,包含两列:
| LR(Long Run) | 长期趋势信号 | 1=上升趋势,0=非上升趋势 |
| SR(Short Run) | 短期趋势信号 | 1=上升趋势,0=非上升趋势 |
二、AMAT的计算方法
1. 核心计算公式
AMAT的计算基于双均线比较,分为三个步骤:
第一步:计算快速和慢速移动平均线
MAfast=MA(Close,fast)
\\mathrm{MA}_{\\mathrm{fast}} = \\mathrm{MA}(\\mathrm{Close}, \\mathrm{fast})
MAfast=MA(Close,fast)
MAslow=MA(Close,slow)
\\mathrm{MA}_{\\mathrm{slow}} = \\mathrm{MA}(\\mathrm{Close}, \\mathrm{slow})
MAslow=MA(Close,slow)
其中MA的默认类型为EMA(指数移动平均线),可通过mamode参数调整。
第二步:判断均线位置关系
MAfast>MAslow ⟹ 上升趋势
\\mathrm{MA}_{\\mathrm{fast}} > \\mathrm{MA}_{\\mathrm{slow}} \\implies \\text{上升趋势}
MAfast>MAslow⟹上升趋势
第三步:回溯验证——核心确认机制
AMAT通过“回溯验证”机制确认趋势状态:
上升趋势确认 = (当前期判断为上升趋势) AND (过去 lookback 期内所有期均判断为上升趋势)
这种“持续一致”的确认机制有效减少了假信号。
2. 参数说明
| fast | int | 8 | 快速移动平均线周期 |
| slow | int | 21 | 慢速移动平均线周期 |
| lookback | int | 2 | 回溯验证周期,用于确认趋势信号 |
| mamode | str | “ema” | 移动平均类型(‘ema’、'sma’等) |
| offset | int | 0 | 结果偏移周期数 |
参数选择指南:
| fast=8, slow=21 | 标准配置 | 平衡灵敏度与可靠性,适用于大多数品种 |
| fast=5, slow=13 | 短线交易 | 更灵敏,信号更多但噪声增加 |
| fast=50, slow=200 | 长线趋势 | 极平滑,用于识别主趋势方向 |
3. 计算示例
假设使用默认参数(fast=8, slow=21, lookback=2, mamode=‘ema’):
某日计算过程:
- EMA8 = 105.50
- EMA21 = 103.20
- EMA8 > EMA21 → 当期上升趋势(True)
- 检查前2期(t-1和t-2)的趋势状态
- 若均为上升趋势 → LR=1(长期上升趋势确认)
- 若当前为上升趋势但前2期中有任何一期为下降趋势 → LR=0(趋势未确认)
三、AMAT的使用方法
1. 趋势状态解读——最基础用法
AMAT返回的LR和SR信号线直接反映了趋势状态:
| LR=1 且 SR=1 | 长期和短期均处于上升趋势 | 强多头行情,积极做多 |
| LR=1 且 SR=0 | 长期上升但短期回撤 | 上升趋势中的回调,关注支撑位做多 |
| LR=0 且 SR=1 | 短期反弹但长期仍为下降 | 反弹行情,谨慎参与,注意阻力位 |
| LR=0 且 SR=0 | 长期和短期均处于下降趋势 | 空头行情,以做空或观望为主 |
2. 趋势转换信号
AMAT的信号线从0变为1或从1变为0是重要的趋势转换信号:
| LR从0变为1 | 长期趋势由跌转涨 | 重要买入信号,可建立多头仓位 |
| LR从1变为0 | 长期趋势由涨转跌 | 重要卖出信号,应考虑离场或做空 |
| SR从0变为1 | 短期趋势转强 | 短期买入信号,可轻仓试探 |
| SR从1变为0 | 短期趋势转弱 | 短期卖出信号,应降低仓位 |
3. 多周期配合策略
AMAT本身已经包含快速和慢速均线的对比,但可以进一步与其他周期指标配合:
| AMAT + MACD | MACD确认动能方向,AMAT确认趋势方向 | 双重确认,提高信号可靠性 |
| AMAT + RSI | RSI确认超买超卖状态 | 在趋势中寻找回调入场点 |
| AMAT + 成交量 | AMAT趋势信号伴随放量时可信度更高 | 验证趋势的有效性 |
4. 注意事项与局限性
使用AMAT前需了解以下要点:
| 滞后性 | 基于移动平均线和回溯验证,信号对价格变化有一定滞后 |
| 震荡市假信号 | 在横盘市场中,AMAT信号可能频繁变化,产生假信号 |
| 参数敏感 | fast、slow、lookback三个参数对指标表现影响显著 |
| 不能单独使用 | AMAT是趋势识别工具,建议与其他指标配合使用 |
四、使用pandas_ta计算AMAT
1. 函数完整参数
pandas_ta.trend.amat(close=None, fast=None, slow=None, lookback=None, mamode=None, offset=None, **kwargs)
参数详解:
| close | pd.Series | 必需 | 收盘价序列 |
| fast | int | 8 | 快速移动平均线周期 |
| slow | int | 21 | 慢速移动平均线周期 |
| lookback | int | 2 | 回溯验证周期 |
| mamode | str | “ema” | 移动平均类型 |
| offset | int | 0 | 结果偏移周期数 |
返回值:pd.DataFrame——包含两列:
- AMAT{L}_{fast}_{slow}_{lookback}:长期运行趋势信号(Long Run)
- AMAT{S}_{fast}_{slow}_{lookback}:短期运行趋势信号(Short Run)
2. 示例代码
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] + (i–300) * 0.2 # 强势上涨段
for i in range(450, 600):
price_series[i] = price_series[450] – (i–450) * 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")
# ========== 第二步:计算AMAT(基础用法) ==========
# 使用默认参数 fast=8, slow=21, lookback=2, mamode='ema'
amat_df = ta.amat(df['close'])
# 查看返回的DataFrame结构
print("AMAT返回列名称:")
print(amat_df.columns.tolist())
print("\\n" + "=" * 60 + "\\n")
# 将计算结果添加到原DataFrame
df['AMAT_LR'] = amat_df.iloc[:, 0] # 长期运行趋势
df['AMAT_SR'] = amat_df.iloc[:, 1] # 短期运行趋势
print("AMAT计算结果(最近10行):")
print(df[['close', 'AMAT_LR', 'AMAT_SR']].tail(10))
print("\\n" + "=" * 60 + "\\n")
# ========== 第三步:不同参数组合对比 ==========
# 标准参数 (8,21,2)
amat_std = ta.amat(df['close'])
df['AMAT_LR_std'] = amat_std.iloc[:, 0]
df['AMAT_SR_std'] = amat_std.iloc[:, 1]
# 短线参数 (5,13,1) – 更灵敏
amat_fast = ta.amat(df['close'], fast=5, slow=13, lookback=1)
df['AMAT_LR_fast'] = amat_fast.iloc[:, 0]
df['AMAT_SR_fast'] = amat_fast.iloc[:, 1]
# 长线参数 (20,50,3) – 更平滑
amat_slow = ta.amat(df['close'], fast=20, slow=50, lookback=3)
df['AMAT_LR_slow'] = amat_slow.iloc[:, 0]
df['AMAT_SR_slow'] = amat_slow.iloc[:, 1]
print("不同参数AMAT_LR对比(最近5行):")
print(df[['close', 'AMAT_LR_std', 'AMAT_LR_fast', 'AMAT_LR_slow']].tail())
print("\\n" + "=" * 60 + "\\n")
# ========== 第四步:趋势状态分类 ==========
def classify_trend(row):
"""根据LR和SR分类趋势状态"""
lr, sr = row['AMAT_LR_std'], row['AMAT_SR_std']
if lr == 1 and sr == 1:
return '强上升趋势'
elif lr == 1 and sr == 0:
return '长期上升/短期回调'
elif lr == 0 and sr == 1:
return '短期反弹/长期下降'
elif lr == 0 and sr == 0:
return '强下降趋势'
return '未知'
df['trend_state'] = df.apply(classify_trend, axis=1)
print("趋势状态分布统计:")
print(df['trend_state'].value_counts())
print("\\n" + "=" * 60 + "\\n")
# ========== 第五步:趋势转换信号检测 ==========
# 检测LR从0变1(长期趋势转多)
df['lr_bullish_turn'] = (df['AMAT_LR_std'] == 1) & (df['AMAT_LR_std'].shift(1) == 0)
# 检测LR从1变0(长期趋势转空)
df['lr_bearish_turn'] = (df['AMAT_LR_std'] == 0) & (df['AMAT_LR_std'].shift(1) == 1)
print("趋势转换信号统计:")
print(f"长期转多(LR 0→1)数量:{df['lr_bullish_turn'].sum()}")
print(f"长期转空(LR 1→0)数量:{df['lr_bearish_turn'].sum()}")
print("\\n" + "=" * 60 + "\\n")
# ========== 第六步:策略回测 ==========
# 策略:LR=1时持仓多头(长期趋势上升)
df['position'] = df['AMAT_LR_std'].astype(int)
# 计算收益
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("策略绩效统计(AMAT长期趋势策略回测):")
print(f"买入持有策略总收益率:{total_return_buyhold:.2%}")
print(f"AMAT趋势策略总收益率:{total_return_strategy:.2%}")
print("\\n注意:此为简化回测,仅供参考")
print("=" * 60 + "\\n")
# ========== 第七步:可视化 ==========
plt.figure(figsize=(14, 10))
# 子图1:价格走势
plt.subplot(2, 1, 1)
plt.plot(df.index[–200:], df['close'][–200:],
label='Close Price', linewidth=1.5, color='black')
# 用背景颜色标记趋势状态
for i in range(len(df) – 200, len(df)):
if df['AMAT_LR_std'].iloc[i] == 1:
plt.axvspan(df.index[i], df.index[i+1] if i+1 < len(df) else df.index[i],
alpha=0.1, color='green')
else:
plt.axvspan(df.index[i], df.index[i+1] if i+1 < len(df) else df.index[i],
alpha=0.1, color='red')
plt.title('Price Chart with AMAT Trend Signals (LR=1: Green Zone)', fontsize=14)
plt.ylabel('Price')
plt.legend()
plt.grid(True, alpha=0.3)
# 子图2:AMAT信号线
plt.subplot(2, 1, 2)
plt.plot(df.index[–200:], df['AMAT_LR_std'][–200:],
label='LR (长期趋势)', linewidth=1.5, color='blue')
plt.plot(df.index[–200:], df['AMAT_SR_std'][–200:],
label='SR (短期趋势)', linewidth=1.5, color='orange', linestyle='–')
plt.axhline(y=0.5, color='gray', linestyle=':', linewidth=1, alpha=0.5)
# 标记趋势转换点
buy_signals = df[df['lr_bullish_turn']]
sell_signals = df[df['lr_bearish_turn']]
plt.scatter(buy_signals.index[–20:], buy_signals['AMAT_LR_std'][–20:],
color='green', marker='^', s=80, label='转多信号', alpha=0.8)
plt.scatter(sell_signals.index[–20:], sell_signals['AMAT_LR_std'][–20:],
color='red', marker='v', s=80, label='转空信号', alpha=0.8)
plt.title('AMAT(阿彻移动平均线趋势)- LR/SR信号线', fontsize=14)
plt.xlabel('Date')
plt.ylabel('Signal')
plt.ylim(–0.1, 1.1)
plt.legend(loc='upper left')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
五、总结
AMAT(阿彻移动平均线趋势指标)是一种基于双均线比较和回溯验证的趋势识别工具,其核心价值与定位如下:
| 核心创新 | 回溯验证机制,减少趋势假信号 |
| 双信号输出 | LR(长期趋势)+ SR(短期趋势) |
| 核心信号 | LR/SR趋势状态判断、趋势转换信号 |
| 默认参数 | fast=8, slow=21, lookback=2 |
| 最佳应用场景 | 趋势识别、趋势过滤、多指标组合策略 |
| 主要局限 | 滞后性、震荡市假信号、参数敏感 |
实战使用三原则:


