
La estrategia es una estrategia de comercio cuantitativa que combina la regresión de la media y el seguimiento de la tendencia, principalmente a través del uso de la combinación de tres indicadores técnicos MA, MACD y ATR para lograr la generación de señales de comercio y el control del riesgo. La idea central de la estrategia es capturar oportunidades de reversión del mercado cuando los precios se desvían de la línea de la media, en combinación con las señales cruzadas del indicador MACD, y al mismo tiempo usar el stop loss dinámico de ATR para controlar el riesgo.
La estrategia se basa en un mecanismo de triple verificación:
La estrategia permite un sistema de negociación relativamente robusto a través de la combinación de la regresión de la media y el seguimiento de la tendencia. El mecanismo de verificación de múltiples indicadores mejora la fiabilidad de las señales de negociación, mientras que los paros dinámicos de ATR controlan el riesgo. Aunque hay espacio para algunas optimizaciones, en general es un marco estratégico lógicamente claro y práctico.
/*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)