
Стратегия представляет собой систему отслеживания трендов на основе многоуровневых скользящих средних (SMA) в сочетании с точными методами перекрестного выявления. Она определяет рыночные тенденции посредством иерархических отношений 20-ти, 50-ти, 100-ти и 200-ти циклов скользящих средних и использует перекрестки в режиме реального времени с скользящими средними для запуска торговых сигналов.
Стратегия использует трехслойный механизм фильтрации трендов, требуя, чтобы 50-циклическая средняя линия была выше 100-циклической средней линии, а 100-циклическая средняя линия была выше 200-циклической средней линии, чтобы подтвердить восходящий тренд, а наоборот, подтвердить нисходящий тренд. Входный сигнал основан на перекрестке цены с 50-циклической средней линией, используя расчетные данные для достижения точного перекрестного обнаружения, чтобы определить, когда происходит перекресток, сравнивая текущее поведение цены с отношением к положению предыдущей K-линии.
Это целостная, логически ясная стратегия отслеживания тенденций, которая обеспечивает как надежность сигналов, так и эффективное отслеживание тенденций путем совместного использования многоуровневых движущихся средних. Стратегия была разработана с учетом практичности и универсальности и подходит для использования в разных рыночных условиях.
/*backtest
start: 2024-02-22 00:00:00
end: 2024-06-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Multi-SMA Strategy - Core Signals", overlay=true)
// ———— Universal Inputs ———— //
int smaPeriod1 = input(20, "Fast SMA")
int smaPeriod2 = input(50, "Medium SMA")
bool useTickCross = input(true, "Use Tick-Precise Crosses")
// ———— Timezone-Neutral Calculations ———— //
sma20 = ta.sma(close, smaPeriod1)
sma50 = ta.sma(close, smaPeriod2)
sma100 = ta.sma(close, 100)
sma200 = ta.sma(close, 200)
// ———— Tick-Precise Cross Detection ———— //
golden_cross = useTickCross ?
(high >= sma50 and low[1] < sma50[1]) :
ta.crossover(sma20, sma50)
death_cross = useTickCross ?
(low <= sma50 and high[1] > sma50[1]) :
ta.crossunder(sma20, sma50)
// ———— Trend Filter ———— //
uptrend = sma50 > sma100 and sma100 > sma200
downtrend = sma50 < sma100 and sma100 < sma200
// ———— Entry Conditions ———— //
longCondition = golden_cross and uptrend
shortCondition = death_cross and downtrend
// ———— Exit Conditions ———— //
exitLong = ta.crossunder(low, sma20)
exitShort = ta.crossover(high, sma20)
// ———— Strategy Execution ———— //
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)
strategy.close("Long", when=exitLong)
strategy.close("Short", when=exitShort)
// ———— Clean Visualization ———— //
plot(sma20, "20 SMA", color.new(color.blue, 0))
plot(sma50, "50 SMA", color.new(color.red, 0))
plot(sma100, "100 SMA", color.new(#B000B0, 0), linewidth=2)
plot(sma200, "200 SMA", color.new(color.green, 0), linewidth=2)
// ———— Signal Markers ———— //
plotshape(longCondition, "Long Entry", shape.triangleup, location.belowbar, color.green, 0)
plotshape(shortCondition, "Short Entry", shape.triangledown, location.abovebar, color.red, 0)
plotshape(exitLong, "Long Exit", shape.xcross, location.abovebar, color.blue, 0)
plotshape(exitShort, "Short Exit", shape.xcross, location.belowbar, color.orange, 0)