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

import pandas as pdimport numpy as npimport pandas_datareader as pdrfrom 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'] = 0data['Position'] = 0data['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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!