抛物线SAR指标(Stop and Reverse,简称SAR)是技术分析师和交易者常用的一种工具。它能够帮助我们发现潜在的趋势反转点,并指导我们何时入场或退场。在趋势跟踪策略中,这个指标特别有用。掌握SAR的运作原理和应用方法,可以让我们更好地驾驭金融市场的复杂变化。因为简单易懂且在趋势市场中相当可靠,SAR受到了很多资深专业人士和初学者的喜爱。而SAR其实并不复杂,无论你是一个想要提升自己策略的老鸟,还是一个刚入门的小白,都值得你花点时间研究一下这个指标。

下面我们先来了解一下SAR指标能帮我们干什么。

辨别行情趋势

抛物线SAR的主要特点就是它能够识别当前的趋势方向。这个指标会在图表上显示由小红点组成的抛物线:

SAR指标

当抛物线在价格下方时,表示市场处于上升趋势。而抛物线在价格上方时,则代表市场是处于下降趋势的。

发现潜在的行情反转点

SAR指标还可以用来寻找潜在的反转点。我们可以通过观察抛物线的走向,密切留意抛物线是否从价格下方翻转到上方,或从上方翻转到下方时,这表明可能即将发生趋势反转。我们可以根据这个信号来决定入场还是撤资。

SAR指标的计算方法

抛物线SAR指标的计算方法由两个重要部分组成:极端价格和加速因子。

极端价格(EP)

极端价格(EP)表示当前趋势期间记录的最高点或最低点:

  • 如果整体趋势是上升的,EP的值等于自趋势开始以来观察到的最高点。
  • 反之,在下降趋势中,EP是从趋势开始以来观察到的最低点。

加速因子(AF)

加速因子(AF)决定了SAR指标的灵敏度。它的初始值为0.02,并且在趋势中每达到一个新的极值点时可以逐步增加,最高可达到0.20。AF的调整如下:

– 初始值为0.02。

– 每达到一个新的极值点(最高点或最低点),AF增加0.02。

– 达到0.20后不再增加。

这种调整确保了SAR在趋势加强时变得更加灵敏,能够更紧密地跟踪价格。

抛物线SAR的计算公式 抛物线SAR的计算公式如下:

\begin{equation} \text{SAR}_{\text{new}} = \text{SAR}_{\text{current}} + \text{AF} \times (\text{EP} – \text{SAR}_{\text{current}}) \end{equation}

这个公式确保随着趋势的发展,SAR值逐渐靠近价格,为市场的变化提供一个动态的指标。

趋势反转

当价格穿越SAR值时,就发生了趋势反转。这时,SAR值会被重置,趋势方向也会切换。新的SAR值将设置为前一个趋势的EP,AF则重新回到初始值。

SAR指标代码示例

import pandas as pd
import matplotlib.pyplot as plt
import allticks

# 以下以美股苹果股票为例
# 从Alltick的行情接口获取苹果股票价格数据
apple_stock_data = allticks.get_stock_data('AAPL')

# 确保数据按日期排序
apple_stock_data = apple_stock_data.sort_index()

# 计算抛物线SAR
def calculate_parabolic_sar(data, af_start=0.02, af_increment=0.02, af_max=0.20):
    # 初始化变量
    sar = [0] * len(data)
    trend = 1  # 1表示上升趋势,-1表示下降趋势
    ep = data['Low'][0]  # 极端点:上升趋势时为最低价,下降趋势时为最高价
    af = af_start  # 加速因子

    # 设置初始SAR值
    sar[0] = data['Low'][0] if trend == 1 else data['High'][0]

    for i in range(1, len(data)):
        prev_sar = sar[i - 1]
        if trend == 1:
            sar[i] = prev_sar + af * (ep - prev_sar)
            if data['Low'][i] < sar[i]:
                trend = -1
                sar[i] = ep
                ep = data['High'][i]
                af = af_start
            else:
                if data['High'][i] > ep:
                    ep = data['High'][i]
                    af = min(af + af_increment, af_max)
        else:
            sar[i] = prev_sar - af * (prev_sar - ep)
            if data['High'][i] > sar[i]:
                trend = 1
                sar[i] = ep
                ep = data['Low'][i]
                af = af_start
            else:
                if data['Low'][i] < ep:
                    ep = data['Low'][i]
                    af = min(af + af_increment, af_max)

    return sar

# 计算SAR值
apple_stock_data['SAR'] = calculate_parabolic_sar(apple_stock_data)

# 可视化结果
plt.figure(figsize=(14, 7))
plt.plot(apple_stock_data['Close'], label='Apple Stock Price')
plt.plot(apple_stock_data['SAR'], label='Parabolic SAR', linestyle='--')
plt.title('Apple Stock Price with Parabolic SAR')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

【推荐阅读】Pairs Trading 配对交易策略