可以在每次做多/做空交易时重新计算ATR值并将其用作追踪止损的距离。以下是一个示例代码:
import pandas as pd
def compute_atr(df, n=14):
"""
计算ATR值
"""
df['H-L'] = abs(df['High'] - df['Low'])
df['H-PC'] = abs(df['High'] - df['Close'].shift(1))
df['L-PC'] = abs(df['Low'] - df['Close'].shift(1))
df['TR'] = df[['H-L', 'H-PC', 'L-PC']].max(axis=1, skipna=False)
df['ATR'] = df['TR'].rolling(n, min_periods=n).mean()
df.drop(['H-L', 'H-PC', 'L-PC'], axis=1, inplace=True)
return df
def atr_trailing_stop(signal, high, low, atr_period=14, atr_multiplier=3):
"""
ATR追踪止损函数
"""
df = pd.DataFrame({'Signal': signal, 'High': high, 'Low': low})
df = compute_atr(df, atr_period)
long_stop = [] # 存储做多止损价格的列表
short_stop = [] # 存储做空止损价格的列表
position = 0 # 初始化持仓状态为0
for i in range(len(df)):
if df['Signal'].iloc[i] == 1: # 产生做多信号
position = 1
long_stop.append(df['Low'].iloc[i] - df['ATR'].iloc[i] * atr_multiplier)
short_stop.append(None)
elif df['Signal'].iloc[i] == -1: # 产生做空信号
position = -1
long_stop.append(None)
short_stop.append(df['High'].iloc[i] + df['ATR'].iloc
上一篇:ATR追踪止损实施
下一篇:ATR自定义Pine脚本