一、SAR指标的计算
-
SARn是当前周期的SAR值。 -
SARn+1是下一个周期的SAR值。 -
AF是加速因子,初始值为0.02,每周期增加0.02,直到达到0.20。 -
EP是价格的极值,如果当前趋势是上升趋势,则为价格的最低点;如果当前趋势是下降趋势,则为价格的最高点。
二、生成交易信息

import pandas as pd
import numpy as np
import pandas_datareader as pdr
from datetime import datetime
# 计算SAR指标
def calculate_sar(data, af_start=0.02, af_max=0.20):
data['SAR'] = np.nan
data['AF'] = af_start
data['EP'] = data['High'].rolling(2).max()
data['SAR'][0] = data['High'][0]
for i in range(1, len(data)):
if data['Close'][i] > data['SAR'][i-1]:
data['SAR'][i] = data['SAR'][i-1] + data['AF'][i-1] * (data['EP'][i-1] - data['SAR'][i-1])
data['EP'][i] = data['High'][i]
data['AF'][i] = min(data['AF'][i-1] + af_start, af_max)
elif data['Close'][i] < data['SAR'][i-1]:
data['SAR'][i] = data['SAR'][i-1] - data['AF'][i-1] * (data['SAR'][i-1] - data['EP'][i-1])
data['EP'][i] = data['Low'][i]
data['AF'][i] = min(data['AF'][i-1] + af_start, af_max)
else:
data['SAR'][i] = data['SAR'][i-1]
data['AF'][i] = data['AF'][i-1]
return data
# 计算SAR指标
data = calculate_sar(data)
# 生成交易信号
data['Signal'] = 0
data['Position'] = 0
data['Position'] = data['Close'].shift(1) > data['SAR']
data['Position'] = data['Position'].shift(1)
# 回测策略
def backtest_strategy(data):
data['Strategy_Returns'] = data['Position'].shift(1) * data['Close'].pct_change()
data['Cumulative_Returns'] = (1 + data['Strategy_Returns']).cumprod()
return data
四、结论
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/105415
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!