Эта стратегия является количественной торговой системой, основанной на скользящих средних, индикаторе RSI и последующих стоп-лоссах. Она сочетает в себе индикаторы тренда и импульса из технического анализа, достигая контролируемой рисками торговли через строгие условия входа и выхода.
Стратегия использует 200-дневную простую скользящую среднюю (SMA) в качестве базовой для оценки тренда, в сочетании с индексом относительной силы (RSI) для генерации торговых сигналов. 1. использует 200-дневную SMA для оценки основного тренда, рассматривая только длинные позиции, когда цена выше средней 2. Определяет сигналы перепроданности, когда RSI падает ниже заданного порога (по умолчанию 40) 3. Запускает длительный вход, когда оба условия выполнены и истек период ожидания с момента последнего выхода (по умолчанию 10 дней) 4. Защищает прибыль во время хранения позиции через отслеживание стоп-лосса (по умолчанию 5%) 5. Выходит из позиции, когда цена проходит ниже отставания или 200-дневного SMA
Это количественная торговая стратегия с полной структурой и четкой логикой. Она преследует стабильную доходность, контролируя риск путем объединения нескольких технических индикаторов. Хотя есть возможности для оптимизации, основная структура имеет хорошую практичность и расширяемость. Стратегия подходит для средне- и долгосрочных инвесторов и хорошо адаптируется к различным рыночным условиям.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("200 SMA Crossover Strategy", overlay=false) // Define inputs smaLength = input.int(200, title="SMA Length") rsiLength = input.int(14, title="RSI Length") rsiThreshold = input.float(40, title="RSI Threshold") trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)") waitingPeriod = input.int(10, title="Waiting Period (Days)") // Calculate 200 SMA sma200 = ta.sma(close, smaLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Plot the 200 SMA and RSI plot(sma200, color=color.blue, linewidth=2, title="200 SMA") plot(rsi, color=color.purple, title="RSI", display=display.none) // Define buy and sell conditions var isLong = false var float lastExitTime = na var float trailStopPrice = na // Explicitly declare timeSinceExit as float float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000) canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod buyCondition = close > sma200 and rsi < rsiThreshold and canEnter if (buyCondition and not isLong) strategy.entry("Buy", strategy.long) trailStopPrice := na isLong := true // Update trailing stop loss if long if (isLong) trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100)) // Check for trailing stop loss or sell condition if (isLong and (close < trailStopPrice or close < sma200)) strategy.close("Buy") lastExitTime := time isLong := false // Plot buy and sell signals plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")