Это стратегия, объединяющая несколько индикаторов. Для определения направления тренда и установления позиций используется три EMA с различными периодами, Stochastic RSI и ATR. Он длится, когда более быстрая EMA пересекает более медленную EMA, при этом стоп-лосс устанавливается в 3 раза выше недавнего значения ATR и прибыль получается в 2 раза выше недавнего ATR.
Стратегия использует три линии EMA - 8-, 14- и 50-периодные EMA, представляющие ценовые тенденции в разные временные рамки.
Индикатор Stochastic RSI включает в себя расчеты RSI и Stochastic для определения условий перекупленности/перепродажи.
ATR представляет собой недавний диапазон волатильности. Стратегия использует 3 раза ATR как дистанцию остановки потерь и 2 раза ATR как дистанцию получения прибыли для блокировки прибыли и контроля риска.
Оптимизация может быть выполнена путем корректировки периодов EMA для оптимизации чувствительности. Сделание коэффициентов ATR регулируемыми позволяет настраивать на основе рыночных условий. Добавление других индикаторов помогает подтвердить сигналы и избежать ошибок.
Стратегия рассматривает тренд, уровни перекупленности/перепроданности и диапазон волатильности для определения времени входа. В сочетании EMA и Stochastic RSI эффективно идентифицируют тенденции, в то время как динамический стоп-лосс/приобретение прибыли ATR
/*backtest start: 2023-10-15 00:00:00 end: 2023-11-14 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © FreddieChopin //@version=4 strategy("3 x EMA + Stochastic RSI + ATR", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) // 3x EMA ema1Length = input(8, "EMA1 Length", minval = 1) ema2Length = input(14, "EMA2 Length", minval = 1) ema3Length = input(50, "EMA3 Length", minval = 1) ema1 = ema(close, ema1Length) ema2 = ema(close, ema2Length) ema3 = ema(close, ema3Length) plot(ema1, color = color.green) plot(ema2, color = color.orange) plot(ema3, color = color.red) // Stochastic RSI smoothK = input(3, "K", minval=1) smoothD = input(3, "D", minval=1) lengthRSI = input(14, "RSI Length", minval=1) lengthStoch = input(14, "Stochastic Length", minval=1) src = input(close, title="RSI Source") rsi1 = rsi(src, lengthRSI) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = sma(k, smoothD) // ATR atrPeriod = input(14, "ATR Period") takeProfitMultiplier= input(2.0, "Take-profit Multiplier") stopLossMultiplier= input(3.0, "Stop-loss Multiplier") atrSeries = atr(atrPeriod)[1] longCondition = ema1 > ema2 and ema2 > ema3 and crossover(k, d) strategy.entry("long", strategy.long, when = longCondition) float stopLoss = na float takeProfit = na if (strategy.position_size > 0) if (na(stopLoss[1])) stopLoss := strategy.position_avg_price - atrSeries * stopLossMultiplier else stopLoss := stopLoss[1] if (na(takeProfit[1])) takeProfit := strategy.position_avg_price + atrSeries * takeProfitMultiplier else takeProfit := takeProfit[1] strategy.exit("take profit / stop loss", limit = takeProfit, stop = stopLoss) plot(stopLoss, color = color.red, linewidth = 2, style = plot.style_linebr) plot(takeProfit, color = color.green, linewidth = 2, style = plot.style_linebr)