TrustWallet官网 网格交易策略:无需技术指标的高效算法交易方法及其5.7夏普比率的优异表现
在交易领域,许多投资者渴望寻得一种方法,这种方法需能应对特定市场环境,并且能够实现持续的收益。网格交易法以其在波动市场中的显著特点,吸引了众多交易者的青睐。特别是当它与Python编程语言相结合,并经过历史数据的验证,其成效更加显著。下面,我们将对这个策略进行详细的分析。
写在前面的话:网络上充斥着大量有关使用 Python 构建网格交易策略的文章,我借助 AI 工具迅速浏览了一番,结果发现要么是把简单的事情复杂化的技术文,要么是那种说一半留一半的 “钩子” 文,而最多的还是作者自己也不太明白就搬运过来的填坑文。因此,我打算撰写一篇能够让大家跟着操作就能完成的手把手指导文。我将按照环境配置、创建网格、创建交易信号、准备回溯测试、进行回溯测试以及结果分析这 6 个必要的顺序环节,指导大家运用 Python 构建并回溯测试一个简单的网格交易策略,而且该策略能够呈现出资产净值的稳定增长(夏普比率接近 5.7)。而券商和机构不会告诉你的是,他们就是拿网格交易策略去做持仓深套的底层解决逻辑。
网格交易概念
价格图表上,网格交易法通过设定数值网格进行操作。这相当于划分出一组价格范围。以股票交易为例,以某一中间价为准,向上和向下按固定间距划分网格。此策略特别适合市场波动剧烈的情境。它主要针对那些波动频繁的资产,通过价格的持续波动来获取收益。举例来说,某些外汇货币对在市场上波动频繁,此时运用网格交易策略是个不错的选择。
价格在网格区间内变动时,我们进行交易。若价格超过前一个网格点,我们就卖出;若价格低于后一个网格点,我们就买入。我们通过这种买卖方式来获取利润。但这种方法没有考虑到时间成本,而且利润空间不大。如果市场大幅上涨或下跌,这种方法的不足就会显现。
Python 实现策略
https://www.yixianchuanmei.com用Python实施网格交易策略相当简便。起初,我们能够借助Yfinance等数据源来搜集必要信息。然而,每次获取信息都会导致数据更新,因此我们需要在策略中作出相应的参数调整。随后,通过调用generate_grid函数,我们可以生成一系列数值。从中间价位出发,价格区间被设定在中间价减去grid_range与中间价加上grid_range的范围内。相邻价格点之间的差距是grid_distance。
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", TrustWallet官网 start=pd.Timestamp.today() - pd.DateOffset(days=59),TrustWallet钱包官网下载 end=pd.Timestamp.today(), interval='5m') # yfinance (yf): A Python library to download historical market data from Yahoo Finance. # pandas (pd): A powerful data manipulation and analysis library. # numpy (np): A library for numerical operations. # pandas_ta (ta): A technical analysis library for financial datasets.
以股票数据为例,若设定中间价为50元,并将价格区间划分为10元,那么每两个价格点之间相隔2元。这样,在40元至60元的价格区间内,可以形成一系列节点,每个节点间隔2元,形成一个网格。这样的设置有助于后续交易信号的判断和交易的执行。Python提供了众多库和工具,极大地简化了这些操作步骤。
grid_distance = 0.005 midprice = 1.065 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)
交易信号确定
交易策略中,准确判断信号极为关键。因此,我们必须对数据集中的每一条数据进行细致审查。查看该时段内的最高或最低价格,看其是否与网格线相交。以五分钟为一个周期,若最低价低于网格线,而最高价又高于网格线,这就意味着网格线已被突破。
网格线一旦交叉,便将用户在信号列表中的状态标记为1。这样操作,能精确锁定价格与网格线交汇的具体时刻,进而标示出交易可能启动的时间点。这种井然有序的操作流程,有利于全面监控网格内价格变动,为交易提供更多依据。在期货市场,采用此策略,能更精准地捕捉到交易的绝佳时机。
回溯测试准备
signal = [0] len(dataF) i = 0 for index, row in dataF.iterrows(): for p in grid: if min(row.Low, row.High) p: signal[i] = 1 i += 1 dataF["signal"] = signal dataF[dataF["signal"] == 1]
回测前需做好诸多准备。首先,需计算平均真实范围,这有助于掌握价格波动大小。然后,需设定信号函数。完成这些步骤后,回测数据集便准备妥当。凭借已有的网格和交易信号,我们还能对交易策略参数进行优化。
依据ATR指标,我们可灵活调整网格的range与distance。通过设定信号函数,我们能够清晰判定何时执行交易指令。这些准备工作使得回溯测试更为严谨和精确。步骤完成后,回溯测试框架便拥有了评估网格交易策略性能的关键工具。
回溯测试结果
测试结果显示了多角度搜集的数据。观察时间这一方面,我们能够掌握策略实施与交易之间的时长比率。以一年为基准,我们能观察到策略实施的总时长与实际交易时长之间的比率。此外,诸如最终权益、收益最高点、收益率等绩效指标同样不容忽视。
风险调整指标,诸如夏普比率、索提诺比率、卡尔玛比率等,它们能反映策略面临风险时的盈利能力。通过我们的Python回溯测试,我们发现,当数据回溯至两个月,并在5分钟图表上观察,资产净值呈现稳定增长,夏普比率值约为5.7。此外,跌穿率和交易活跃度等数据也进一步证实了策略在实际测试中的良好表现。
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)
策略综合评估
多角度分析,网格交易法具有显著优点。尤其在市场波动剧烈时,如波动性高的市场,此法能显著提升收益。然而,需注意,尽管它能迅速带来高额回报,但也可能引起较大波动和风险。以股市为例,在遭遇剧烈波动时,可能会遭受较大账面亏损。
from backtesting import Strategy from backtesting import 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 to stop loss ratio if self.signal1 == 1 and len(self.trades)
在具体操作时,交易者需对策略作出相应调整和改进。运用Python编程技术执行策略,不仅能使决策过程变得更为系统化和自动化,还能降低个人情感对交易结果所产生的影响。历史回溯测试再次突显了其在策略评估和优化中的关键作用。在使用网格交易策略的过程中,大家是否曾遭遇过一些特殊状况?别忘了点赞并转发这篇文章,让我们共同交流心得!