海龟交易法是一种趋势交易法,历史上曾经取得过很大的成功,年收益率一度在80%左右。这种交易法没有任何基本面的分析,他主要通过模拟交易员的交易方式来制定一定的交易规则。它通过观察股价的变动来捕捉上升趋势,在趋势没有形成前保持谨慎,但如果一旦认为趋势已经形成则会很积极加仓。他不仅适用于股市,也适用于一切容易形成趋势的交易标的,如期货,股指,加密货币,外汇等。他的交易思想是,趋势形成后赚取的利润会高于下跌周期中损失的本金,所以从整体上看海龟交易法能通过合理设置交易参数带来可观的盈利。
下面以外汇交易为例进行海龟交易法的本地回测。我们先导入所需的module:
import datetime as dt
import matplotlib.pyplot as plt
#解决中文显示问题
plt.rcParams['font.sans-serif']=['Kaiti']
plt.rcParams['axes.unicode_minus']=False
#用于画k线及进出场位置
import mplfinance as mpf
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings("ignore")
导入所需的外汇交易数据:
df = pd.read_csv('eurusd_daily.csv', parse_dates=["Date"], index_col="Date")
df.drop(['Change'], axis=1, inplace=True)
# df
设置海龟交易法需要用到的参数,其中n1表示长周期的天数(用于判断做多和做空的进入点),n2表示短周期的天数(用于判断看多或看空趋势结束的点),atr_parameter则是观察和计算平均波幅的天数,平均波幅和每次交易量成一定比例
# 唐奇安通道参数
n1 = 30
n2 = 15
# ATR波动率参数设置
atr_parameter = 21
# 起始日期
start_date = '2020-01-01'
end_date = '2020-12-31'
对数据进一步计算,得到唐安奇长周期和短周期的上轨和下轨,后续要根据这个计算来绘制唐安奇通道
df['DonHigh_n1'] = df['High'].rolling(n1).max().shift(1)
df['DonLow_n1'] = df['Low'].rolling(n1).min().shift(1)
df['DonHigh_n2'] = df['High'].rolling(n2).max().shift(1)
df['DonLow_n2'] = df['Low'].rolling(n2).min().shift(1)
df.dropna(axis=0, inplace=True)
接着计算平均波幅ATR
# 算出三个波幅后续进行比较
df['H-L'] = abs(df['High'] - df['Low'])
df['H-PC'] = abs(df['High'] - df['Close'].shift(1))
df['L-PC'] = abs(df['L