股市抛物线SAR的PY代码
时间: 2024-09-05 14:04:34 浏览: 82
计算抛物线SAR:计算抛物线SAR(SAR-停止和反向)-matlab开发
抛物线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值。
阅读全文