用Python自动化网格交易
在本文中,我们将实现一个 Python 脚本来模拟网格交易并使用历史数据回测其有效性。让我们开始吧。
一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | AVAX | FTM | OK
欢迎来到今天的网格交易探索——一种简单且可能有利可图的交易策略,它避开了传统的技术指标。这种方法高度适应算法交易,当使用 Python 进行测试时,它在两个月的 5 分钟时间内显示出令人印象深刻的股权增长。值得注意的是,夏普比率达到了接近 5.7 的值。
1、什么是网格交易?
网格交易涉及在图表上构建预定义价格水平的网格。每当价格触及其中一个水平时,就会执行多头和空头头寸。这些交易的利润目标被分配给后续的网格水平。这种策略在震荡市场中蓬勃发展,尤其是在价格频繁波动的较低时间范围内。
在本文中,我们将实现一个 Python 脚本来模拟网格交易并使用历史数据回测其有效性。让我们开始吧。
2、设置 Python 环境
在实施我们的策略之前,让我们导入必要的 Python 库并检索历史 EUR/USD 数据:
import yfinance as yf
import pandas as pd
import numpy as np
import pandas_ta as ta
# Download the EUR/USD data for the last 59 days with a 5-minute interval
dataF = yf.download("EURUSD=X",
start=pd.Timestamp.today() - pd.DateOffset(days=59),
end=pd.Timestamp.today(),
interval='5m')
使用的库:
- yfinance (yf):从 Yahoo Finance 下载金融市场数据。
- andas (pd):提供强大的数据处理功能。
- numpy (np):支持高效的数值计算。
- pandas_ta (ta):提供技术分析指标。
通过使用 yfinance 下载高频数据,我们创建了一个详细的数据集,非常适合回测我们的网格交易策略。
3、创建网格
网格”是一系列均匀分布的价格水平,构成交易策略的支柱。我们可以根据不同的市场条件进行调整的参数生成网格值:
grid_distance = 0.005 # Distance between grid levels
midprice = 1.065 # Central reference price
def generate_grid(midprice, grid_distance, grid_range):
return np.arange(midprice - grid_range, midprice + grid_range, grid_distance)
grid = generate_grid(midprice=midprice, grid_distance=grid_distance, grid_range=0.1)
- grid_distance (0.005):网格线之间的增量价格差距。
- midprice (1.065):充当网格的中点。
- grid_range (0.1):确定中间价格上方和下方网格水平的总范围。
可以根据资产及其市场条件动态调整这些参数。 generate_grid
函数可自动创建网格,从而促进交易策略的结构化方法。
4、生成交易信号
每当价格跨越网格级别时,就会生成信号。这会触发多头和空头交易:
signal = [0] * len(dataF)
i = 0
for index, row in dataF.iterrows():
for p in grid:
if min(row.Low, row.High) < p and max(row.Low, row.High) > p:
signal[i] = 1
i += 1
dataF["signal"] = signal
dataF[dataF["signal"] == 1]
信号逻辑:
- 如果一行的最高价和最低价跨越网格线,则会生成交易信号。
- 信号列附加到数据集以进行回溯测试。
5、准备回测
在运行回测之前,我们通过计算平均真实波动范围 (ATR) 来增强我们的数据集,这有助于优化交易参数。
dfpl = dataF[:].copy()
def SIGNAL():
return dfpl.signal
dfpl['ATR'] = ta.atr(high=dfpl.High, low=dfpl.Low, close=dfpl.Close, length=16)
dfpl.dropna(inplace=True)
ATR 是一种波动性度量,它允许我们动态调整止损和止盈水平。
6、运行回测
在这里,我们定义一个自定义网格交易策略并使用回测库评估其性能:
from backtesting import Strategy, Backtest
import backtesting
class MyStrat(Strategy):
mysize = 50
def init(self):
super().init()
self.signal1 = self.I(SIGNAL)
def next(self):
super().next()
slatr = 1.5 * grid_distance # Stop-loss distance
TPSLRatio = 0.5 # Take profit:stop loss ratio
if self.signal1 == 1 and len(self.trades) <= 10000:
# Short Trade
sl1 = self.data.Close[-1] + slatr
tp1 = self.data.Close[-1] - slatr * TPSLRatio
self.sell(sl=sl1, tp=tp1, size=self.mysize)
# Long Trade
sl1 = self.data.Close[-1] - slatr
tp1 = self.data.Close[-1] + slatr * TPSLRatio
self.buy(sl=sl1, tp=tp1, size=self.mysize)
# Execute the backtest
bt = Backtest(dfpl, MyStrat, cash=50, margin=1/100, hedging=True, exclusive_orders=False)
stat = bt.run()
关键见解:
- mysize:确定交易规模。
- slatr 和 TPSLRatio:自定义止损和止盈水平。
- 回测库:简化测试流程,确保详细的性能分析。
7、分析结果
回测结果展示了该策略的稳健性,尤其是在 57 天的时间段内:
- 回报率:172.04%
- 年化回报率:37,364.62%
- 夏普比率:0.81
- 交易次数:1,698
- 胜率:73.03%
- 最大回撤:-17.03%
尽管偶尔会出现回撤,但该策略的绩效指标证实了其在短期交易中的可行性。
8、结束语
正如这里所展示的,网格交易是一种很有前途的算法策略。它的系统性和适应性使其成为交易者武器库中的宝贵工具。通过利用 Python 强大的库,即使是初学者也可以实施和改进这种方法以获得有利可图的结果。
原文链接:Automated Grid Trading in Python: A Beginner’s Guide to Algorithmic Profitability
DefiPlot翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。