该策略是一个结合均值回归和趋势跟踪的量化交易策略,主要通过MA、MACD和ATR三个技术指标的配合使用来实现交易信号的产生和风险控制。策略核心思想是在价格偏离均线时,结合MACD指标的交叉信号来捕捉市场的反转机会,同时使用ATR动态止损来控制风险。
策略采用三重验证机制: 1. 使用移动平均线(MA)判断价格偏离程度,可选择SMA或EMA 2. 通过MACD指标的金叉死叉判断趋势反转时机 3. 利用ATR指标动态设置止损位置 具体来说,当价格低于均线且MACD金叉时,开启做多仓位;当价格高于均线且MACD死叉时,开启做空仓位。同时根据ATR的波动率自动设置止损位置。
该策略通过均值回归和趋势跟踪的结合,实现了相对稳健的交易系统。多重指标的验证机制提高了交易信号的可靠性,而ATR动态止损则很好地控制了风险。虽然存在一些优化空间,但整体而言是一个逻辑清晰、实用性强的策略框架。
/*backtest start: 2024-10-01 00:00:00 end: 2024-10-31 23:59:59 period: 3h basePeriod: 3h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Mean Reversion Strategy with ATR, MACD and MA", overlay=true) // === Настройки для индикаторов === // Параметры скользящей средней (MA) maLength = input.int(30, title="Период скользящей средней (MA)") maType = input.string("EMA", title="Тип скользящей средней", options=["SMA", "EMA"]) // Параметры ATR atrLength = input.int(10, title="Период ATR") atrMultiplier = input.float(10, title="ATR множитель для стоп-лосса") // Параметры MACD macdFastLength = input.int(8, title="Период быстрой EMA для MACD") macdSlowLength = input.int(26, title="Период медленной EMA для MACD") macdSignalLength = input.int(5, title="Период сигнальной линии MACD") // === Рассчёт индикаторов === // Скользящая средняя ma = if maType == "SMA" ta.sma(close, maLength) else ta.ema(close, maLength) // ATR (Средний истинный диапазон) atr = ta.atr(atrLength) // MACD [macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength) // Условия для входа на покупку и продажу longCondition = ta.crossover(macdLine, signalLine) and close < ma shortCondition = ta.crossunder(macdLine, signalLine) and close > ma // === Управление позициями === if (longCondition) strategy.entry("Buy", strategy.long) // Стоп-лосс на основе ATR stopLossLevel = close - atr * atrMultiplier strategy.exit("Take Profit/Stop Loss", "Buy", stop=stopLossLevel) if (shortCondition) strategy.entry("Sell", strategy.short) // Стоп-лосс на основе ATR stopLossLevel = close + atr * atrMultiplier strategy.exit("Take Profit/Stop Loss", "Sell", stop=stopLossLevel) // Визуализация plot(ma, title="MA", color=color.blue, linewidth=2) plot(macdLine, title="MACD Line", color=color.green) plot(signalLine, title="Signal Line", color=color.red) hline(0, "Zero Line", color=color.gray)