
Стратегия является системой для отслеживания трендов, основанной на Supertrend и DEMA. Стратегия создает надежную рамку для принятия решений о сделках, используя в сочетании способность распознавать трендовые направления индикатора Supertrend и функцию подтверждения трендов DEMA. Система поддерживает двусторонние сделки и имеет механизм динамической корректировки позиции, позволяя гибко переключаться в направлениях в зависимости от рыночных условий.
Основная логика стратегии основана на следующих ключевых компонентах:
Эта стратегия, умело сочетая показатели Supertrend и DEMA, создает стабильную систему отслеживания тенденций. Ее преимущества заключаются в высокой надежности сигнала, совершенном управлении рисками, но все еще требуют от трейдеров оптимизации параметров в соответствии с конкретными характеристиками рынка.
/*backtest
start: 2025-02-16 00:00:00
end: 2025-02-23 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Supertrend with DEMA Strategy (Reversal Enabled)", overlay=true)
// ===== Parameters for Supertrend =====
atrPeriod = input.int(10, "ATR Length", minval=1)
factor = input.float(3.0, "Factor", minval=0.01, step=0.01)
// ===== Parameters for Allowing Trade Directions =====
allowLong = input.bool(true, "Allow LONG")
allowShort = input.bool(true, "Allow SHORT")
// Supertrend Calculation
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
// Set the value to na for the first bar to avoid false signals
supertrend := barstate.isfirst ? na : supertrend
// Plot Supertrend Lines
plot(direction < 0 ? supertrend : na, "Up Trend", color=color.green, style=plot.style_linebr)
plot(direction < 0 ? na : supertrend, "Down Trend", color=color.red, style=plot.style_linebr)
// ===== Parameters and Calculation for DEMA =====
demaLength = input.int(100, "DEMA Length", minval=1)
e1 = ta.ema(close, demaLength)
e2 = ta.ema(e1, demaLength)
dema = 2 * e1 - e2
// Plot DEMA
plot(dema, "DEMA", color=#43A047)
// ===== Signal Definitions =====
// Basic Supertrend Trend Change Signals
trendUp = ta.crossover(close, supertrend)
trendDown = ta.crossunder(close, supertrend)
// Entry Signals considering DEMA
longSignal = trendUp and (close > dema)
shortSignal = trendDown and (close < dema)
// ===== Entry/Exit Logic =====
// LONG Signal
if (longSignal)
// If there is an open SHORT position – reverse it to LONG if allowed
if (strategy.position_size < 0)
if (allowLong)
strategy.close("Short")
strategy.entry("Long", strategy.long)
else
// If reversal to LONG is not allowed – just close SHORT
strategy.close("Short")
// If there is no position – open LONG if allowed
else if (strategy.position_size == 0)
if (allowLong)
strategy.entry("Long", strategy.long)
// SHORT Signal
if (shortSignal)
// If there is an open LONG position – reverse it to SHORT if allowed
if (strategy.position_size > 0)
if (allowShort)
strategy.close("Long")
strategy.entry("Short", strategy.short)
else
// If reversal to SHORT is not allowed – just close LONG
strategy.close("Long")
// If there is no position – open SHORT if allowed
else if (strategy.position_size == 0)
if (allowShort)
strategy.entry("Short", strategy.short)
// ===== Additional Position Closure on Trend Change without Entry =====
// If Supertrend crosses (trend change) but DEMA conditions are not met,
// close the opposite position if open.
if (trendUp and not longSignal and strategy.position_size < 0)
strategy.close("Short")
if (trendDown and not shortSignal and strategy.position_size > 0)
strategy.close("Long")