什么是抛物线SAR指标?要如何使用?附Python代码示例

抛物线SAR指标(Stop and Reverse,简称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的计算公式如下:

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

趋势反转

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

SAR指标代码示例

下面我们以美股苹果股票为例,从Alltick提供的行情接口获取实时报价和历史成交价,尝试计算SAR指标。

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

# 从Alltick的行情接口获取苹果股票价格数据
# 申请免费token:https://alltick.co/register
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()

抛物线SAR,也称为Parabolic Stop and Reverse,是一种趋势跟踪指标,由J. Welles Wilder Jr. 在其1978年的书《New Concepts in Technical Trading Systems》中提出。它用于确定股票或其他金融产品的买卖点,目的是在价格波动中锁定利润并止损。抛物线SAR指标以点的形式显示在价格图表上,这些点在价格之上表示可能的卖点,在价格之下表示可能的买点。 以下是一个简单的Python代码示例,用于计算并绘制抛物线SAR指标: ```python import numpy as np import pandas as pd import matplotlib.pyplot as plt def parabolic_sar(high, low, acceleration=0.02, maximum=0.2): """ 计算抛物线SAR值 :param high: DataFrame,包含价格的最高价 :param low: DataFrame,包含价格的最低价 :param acceleration: 加速因子的初始值 :param maximum: 加速因子的最大值 :return: Series,包含SAR值 """ # 初始化 sar = low.copy() ep = high.rolling(window=2).max().shift(-1) # 极点(极端点)初值为前两个周期的最高价 af = acceleration # 加速因子 for i in range(1, len(high)): sar_diff = ep - sar.shift() if sar_diff[i-1] > 0: # 如果是上升趋势 sar[i] = sar[i-1] + af * sar_diff[i-1] # 计算新的SAR值 if sar[i] > low[i]: # 如果新的SAR值大于当前最低价,重置SAR和加速因子 sar[i] = low[i] af = min(acceleration + af, maximum) ep[i] = high[i] else: # 如果是下降趋势 sar[i] = sar[i-1] + af * sar_diff[i-1] # 计算新的SAR值 if sar[i] < high[i]: # 如果新的SAR值小于当前最高价,重置SAR和加速因子 sar[i] = high[i] af = min(acceleration + af, maximum) ep[i] = low[i] return sar # 示例使用Pandas的DataFrame来存储数据,并调用函数计算SAR值 # 假设df是一个包含股票最高价和最低价的DataFrame df = pd.DataFrame({ 'High': [100, 102, 101, 103, 104, 105, 104, 103, 102, 101], 'Low': [98, 99, 98, 97, 96, 95, 94, 93, 92, 91] }) sar_values = parabolic_sar(df['High'], df['Low']) df['SAR'] = sar_values # 绘制结果 plt.figure(figsize=(10, 5)) plt.plot(df['High'], label='High') plt.plot(df['Low'], label='Low') plt.plot(df['SAR'], label='SAR', color='red') plt.legend() plt.show() ``` 这段代码定义了一个函数`parabolic_sar`,它接受高点和低点数据,并返回SAR值。在示例中,我们创建了一个包含最高价和最低价的DataFrame `df`,然后调用函数计算SAR值,并将结果添加到DataFrame中。最后,使用matplotlib绘制了最高价、最低价和SAR值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值