
Стратегия по захвату трендов с использованием многомерных технических индикаторов - это комплексная количественная торговая система, которая сочетает в себе несколько технических индикаторов и графическое распознавание. Стратегия используется для выявления высоковероятных точек входа на рынок путем интеграции индексов с подвижными средними (EMA), относительно сильными (RSI), подвижными средними с обратным отклонением (MACD), средними реальными диапазонами (ATR), индикаторами направленного движения (ADX) и более высокими временными рамками. Стратегия особо подчеркивает возможность торговли при условии одновременного подтверждения нескольких технических индикаторов.
Основная идея стратегии по захвату трендов с помощью многоуровневого технологического фильтрации заключается в том, чтобы подтвердить эффективность торговых сигналов. Стратегия объединяет шесть ключевых условий, которые вызывают торговые сигналы только при выполнении достаточного количества условий:
EMA перекрестный сигнал: Относительное положение быстрой ЭМА ((9 циклов) и медленной ЭМА ((21 циклов) используется для определения направления краткосрочной тенденции. Многоголовый сигнал требует, чтобы быстрая ЭМА находилась над медленной ЭМА, а головной сигнал наоборот.
Высокий срок подтвержденияСтратегия: убедиться в том, что торговое направление согласуется с более широкой тенденцией, сравнивая текущую цену с позицией EMA в более высоких временных рамках (на выбор 15 минут до солнечной линии). Многоглазые требует цены выше, чем высокие временные рамки EMA, в то время как пустоглазые требуют цены ниже высоких временных рамок EMA.
RSI двойное подтверждение: RSI текущего временного фрейма совместно с RSI высокого временного фрейма подтверждают динамику. Многоголовый сигнал требует текущего RSI> 55 и высокого временного фрейма RSI> 50, а головной сигнал требует текущего RSI< 45 и высокого временного фрейма RSI< 50.
MACD подтверждает тренд: Используйте MACD относительно его положения к сигнальной линии для проверки направления тренда. Многоголовый сигнал требует, чтобы MACD находился над сигнальной линией, а пустой сигнал требует, чтобы MACD находился ниже сигнальной линии.
Прорыв подтвержден: требует, чтобы текущий объем торгов превышал в 1,3 раза средний объем торгов за 20 циклов (может быть скорректирован), чтобы обеспечить достаточную долю участия в рынке для поддержки ценового движения.
Отображение формата: выявление определенных форм рисунка, включая многоголовое поглощение, скобную нить, обратную скобную нить, крестозвезду, K-линию (полиголовую), а также пустоголовое поглощение, метеоритную нить, крестозвезду, K-линию (пустоголовую).
Также в стратегию добавлен фильтр тренда ADX (вариант), который подтверждает, что рынок находится в заметной тенденции, только если ADX>20. При исполнении сделки используются динамические уровни остановки и остановки, основанные на ATR, с установкой остановки в 1,5 раза выше ATR и остановки в 3 раза выше ATR, что обеспечивает риск-возвращение в соотношении 2:1.
Механизм многократного подтверждения: существенно снижает риск ложных сигналов, требуя одновременного подтверждения нескольких технических показателей. В строгом режиме требуется выполнение всех шести условий, в то время как в расслабленном режиме требуется выполнение только четырех условий, что обеспечивает гибкость для трейдеров.
Приспособность к управлению рискамиДинамические параметры остановок и остановок, основанные на ATR, могут автоматически корректироваться в зависимости от волатильности рынка, что более адаптируется к различным рыночным условиям, чем остановки в фиксированных точках.
Согласованные временные рамкиАнализ текущих и более высоких временных рамок, обеспечивающий согласованность направления торговли с более широкими тенденциями, повышает вероятность успешной торговли.
Подтверждение поставкиСнижение ошибочных сделок в условиях недостаточной рыночной заинтересованности путем фильтрации сигналов в условиях низкой ликвидности с требованием прорыва в объемах сделок.
Фильтрация интенсивности трендаС помощью ADX-фильтров обеспечивается торговля только в ясных тенденциях, избегая недействительных сделок на рынках с временными колебаниями.
Визуализация отзывов: Стратегия предоставляет подробные графические обозначения, включая входные сигналы, уровни стоп-лода и стоп-стоп, а также данные о эффективности стратегии в реальном времени, которые помогают трейдерам визуально оценивать эффективность стратегии.
Проверка форматаВ качестве дополнительного подтверждения добавляется измерение анализа ценового поведения, чтобы запечатлеть ключевые моменты изменения настроения рынка.
Оптимизация рискаВ стратегии участвуют несколько параметров и условий, таких как циклы EMA, RSI, ATR, и т. д. Существует риск чрезмерного соответствия историческим данным, что приводит к снижению будущей производительности. Стабильность параметров должна быть подтверждена многорыночными и многовременными отсчетами.
Пропущенная сделкаВ строгом режиме требуется выполнение всех шести условий одновременно, что может привести к упущению многих потенциально выгодных торговых возможностей. В менее волатильных рынках редко бывает время, когда все условия выполняются.
Ограничение риска проникновения: В рынках с высокой волатильностью или низкой ликвидностью, стоп-потери, основанные на ATR, могут быть пробиты из-за скачков или скольжения цены, что приводит к более высоким, чем ожидалось, реальным потерям.
Задержка сигналаПри использовании нескольких индикаторов, основанных на движущихся средних, существует определенная задержка, которая может привести к пропуску оптимальной точки входа или неудачного выхода вовремя в начале перехода.
Ограничение частоты торгов: Стратегия устанавливает ограничения на время торговли ((2:00-20:00) и ограничения на одно держание позиции, что может привести к упущению хороших возможностей в некоторых рыночных условиях.
Зависимость от технических показателейСтратегия полностью основана на техническом анализе, не учитывая другие факторы, такие как фундаментальные или рыночные настроения, и может плохо работать перед крупными новостными событиями или событиями с черными лебедями.
Оптимизация параметров машинного обученияВнедрение алгоритмов машинного обучения для динамического изменения весов и значений значений для различных показателей, адаптации параметров в зависимости от различных рыночных условий, повышения адаптивности стратегии.
Присоединение к механизму регулирования рыночной волатильности: Динамическая корректировка торгового масштаба и стоп-дистанции в зависимости от волатильных показателей, таких как изменение VIX или ATR, уменьшение позиций на высоковолатильных рынках и увеличение позиций на низковолатильных рынках.
Интеграция показателей рыночных настроенийВведение таких измерений, как индекс рынка паники, индикатор настроения спекулянтов или анализ настроения в социальных сетях, чтобы добавить в стратегию рыночную психологию.
Фильтр времени добавленияВ частности, было принято решение о том, что в течение следующих нескольких месяцев в течение года будет проводиться ежемесячная работа по определению сроков проведения транзакций, чтобы избежать низкой ликвидности и публикации важных экономических данных.
Оптимизация форматного распознаванияВ настоящее время распознавание форм на рисунках является относительно простым, но может быть дополнено более сложными и точными алгоритмами распознавания форм, такими как определение форм с корректировкой волатильности или распознавание форм с помощью машинного обучения.
Введение частичного управления позициямиВ настоящее время стратегия использует фиксированный процент управления капиталом (<10% позиции), оптимизируемый для динамического управления позициями по формуле Келли, основанной на соотношении выигрыша и возврата риска, или для реализации функции пирамидального наращивания позиций для максимизации выгодных тенденций.
Интеграция динамики многовременных рамок: расширение существующего анализа высоких временных рамок, добавление большего количества временных рамок, подтверждение согласованности, торговля только тогда, когда тенденции в нескольких временных рамах совпадают.
Стратегия по захвату трендов с использованием многоуровневых технических показателей является полной и строгой количественной системой торговли, которая эффективно отфильтровывает низкокачественные торговые сигналы путем сочетания многоуровневых технических показателей и распознавания форм. Стратегия особенно подходит для среднесрочных и долгосрочных временных рамок ((1 час и 4 часа), которые лучше всего работают в четких тенденциях.
Ключевые преимущества заключаются в многомерности механизма подтверждения и адаптируемой системе управления рисками, а основные риски исходят из оптимизации параметров и адаптации к рыночной среде. Будущее направление оптимизации должно сосредоточиться на уменьшении отсталости стратегии, повышении адаптивности параметров и интеграции более многомерных рыночных показателей.
Для трейдеров, которые ищут системный метод торговли, эта стратегия предоставляет структурированную структуру, но использует предварительные данные для полной обратной связи и оптимизации параметров, чтобы убедиться, что она подходит для конкретных торговых рынков и личных предпочтений риска. С помощью упомянутых выше направлений оптимизации можно еще больше повысить устойчивость и адаптацию стратегии в различных рыночных условиях.
/*backtest
start: 2024-05-13 00:00:00
end: 2025-05-11 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("🚀 Sniper Entry Finder Enhanced [Backtest Enabled]", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// === USER INPUTS ===
emaFastLen = input.int(9, title="Fast EMA Length")
emaSlowLen = input.int(21, title="Slow EMA Length")
rsiLength = input.int(14, title="RSI Length")
atrMultiplierSL = input.float(1.5, title="ATR Multiplier (Stop Loss)")
atrMultiplierTP = input.float(3.0, title="ATR Multiplier (Take Profit)")
volMult = input.float(1.3, title="Volume Multiplier")
htfPeriod = input.string('60', title='Higher TF EMA Period', options=['15','30','60','120','240','D'])
strictMode = input.bool(true, title="Strict Mode (All 6 Conditions)")
useTrendFilter = input.bool(true, title="Use ADX Trend Filter")
// === CANDLE PATTERN TOGGLES ===
useBullEngulf = input.bool(true, title="Use Bullish Engulfing")
useHammer = input.bool(true, title="Use Hammer")
useInvHammer = input.bool(true, title="Use Inverted Hammer")
useDoji = input.bool(true, title="Use Doji")
useInsideBar = input.bool(true, title="Use Inside Bar")
useBearEngulf = input.bool(true, title="Use Bearish Engulfing")
useShootingStar = input.bool(true, title="Use Shooting Star")
// === CALCULATIONS ===
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
rsi = ta.rsi(close, rsiLength)
[macd, signal, _] = ta.macd(close, 12, 26, 9)
atr = ta.atr(14)
volAvg = ta.sma(volume, 20)
htfEma = request.security(syminfo.tickerid, htfPeriod, ta.ema(close, emaSlowLen))
htfRsi = request.security(syminfo.tickerid, htfPeriod, ta.rsi(close, rsiLength))
[plusDI, minusDI, adx] = ta.dmi(14, 14)
trendOK = adx > 20 or not useTrendFilter
// === CONDITIONS ===
emaBull = emaFast > emaSlow
emaBear = emaFast < emaSlow
htfBull = close > htfEma
htfBear = close < htfEma
rsiBull = rsi > 55 and htfRsi > 50
rsiBear = rsi < 45 and htfRsi < 50
macdBull = macd > signal
macdBear = macd < signal
volCond = volume > volAvg * volMult
// === PATTERNS ===
bullEngulf = useBullEngulf and (close > open and close[1] < open[1] and close > high[1])
hammer = useHammer and (close > open and (high - low) > 3 * math.abs(open - close) and (close - low) / (0.001 + high - low) > 0.6)
invertedHammer = useInvHammer and (close > open and (high - low) > 3 * math.abs(close - open) and (high - close) / (0.001 + high - low) > 0.6)
doji = useDoji and (math.abs(close - open) <= (high - low) * 0.1)
insideBar = useInsideBar and (high < high[1] and low > low[1])
bearEngulf = useBearEngulf and (close < open and close[1] > open[1] and close < low[1])
shootingStar = useShootingStar and (close < open and (high - low) > 3 * math.abs(open - close) and (high - close) / (0.001 + high - low) > 0.6)
bullPattern = bullEngulf or hammer or invertedHammer or doji or insideBar
bearPattern = bearEngulf or shootingStar or doji or insideBar
// === SCORING ===
bullCondCount = (emaBull ? 1 : 0) + (htfBull ? 1 : 0) + (rsiBull ? 1 : 0) + (macdBull ? 1 : 0) + (volCond ? 1 : 0) + (bullPattern ? 1 : 0)
bearCondCount = (emaBear ? 1 : 0) + (htfBear ? 1 : 0) + (rsiBear ? 1 : 0) + (macdBear ? 1 : 0) + (volCond ? 1 : 0) + (bearPattern ? 1 : 0)
// === ENTRY LOGIC ===
allowedSession = (hour >= 2 and hour < 20)
canTrade = strategy.opentrades == 0
longEntry = allowedSession and trendOK and canTrade and (strictMode ? (bullCondCount == 6) : (bullCondCount >= 4))
shortEntry = allowedSession and trendOK and canTrade and (strictMode ? (bearCondCount == 6) : (bearCondCount >= 4))
// === SL / TP ===
longSL = low - atr * atrMultiplierSL
longTP = close + atr * atrMultiplierTP
shortSL = high + atr * atrMultiplierSL
shortTP = close - atr * atrMultiplierTP
// === ALERTS ===
alertcondition(longEntry, title="Long Entry Alert", message="🚀 Long Entry Signal on {{ticker}} @ {{close}} | SL: {{low - atr * atrMultiplierSL}} | TP: {{close + atr * atrMultiplierTP}}")
alertcondition(shortEntry, title="Short Entry Alert", message="🔻 Short Entry Signal on {{ticker}} @ {{close}} | SL: {{high + atr * atrMultiplierSL}} | TP: {{close - atr * atrMultiplierTP}}")
// === STRATEGY ENTRIES + LABELS ===
if longEntry
strategy.entry("Long", strategy.long)
strategy.exit("TP/SL", from_entry="Long", limit=longTP, stop=longSL)
label.new(bar_index, close, "🚀 Long Entry @ " + str.tostring(close, '#.##'), style=label.style_label_up, yloc=yloc.belowbar, color=color.green, textcolor=color.white)
label.new(bar_index, longTP, "🎯 TP: " + str.tostring(longTP, '#.##'), style=label.style_label_up, yloc=yloc.belowbar, color=color.lime, textcolor=color.white)
label.new(bar_index, longSL, "🛑 SL: " + str.tostring(longSL, '#.##'), style=label.style_label_down, yloc=yloc.belowbar, color=color.red, textcolor=color.white)
if shortEntry
strategy.entry("Short", strategy.short)
strategy.exit("TP/SL", from_entry="Short", limit=shortTP, stop=shortSL)
label.new(bar_index, close, "🔻 Short Entry @ " + str.tostring(close, '#.##'), style=label.style_label_down, yloc=yloc.abovebar, color=color.red, textcolor=color.white)
label.new(bar_index, shortTP, "🎯 TP: " + str.tostring(shortTP, '#.##'), style=label.style_label_down, yloc=yloc.abovebar, color=color.lime, textcolor=color.white)
label.new(bar_index, shortSL, "🛑 SL: " + str.tostring(shortSL, '#.##'), style=label.style_label_up, yloc=yloc.abovebar, color=color.red, textcolor=color.white)
// === PLOTS ===
plot(emaFast, "EMA Fast", color=color.purple, linewidth=2)
plot(emaSlow, "EMA Slow", color=color.yellow, linewidth=2)
plotshape(longEntry, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(shortEntry, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plot(longEntry ? longSL : na, title="Long SL", color=color.red, style=plot.style_cross, linewidth=2)
plot(longEntry ? longTP : na, title="Long TP", color=color.green, style=plot.style_cross, linewidth=2)
plot(shortEntry ? shortSL : na, title="Short SL", color=color.red, style=plot.style_cross, linewidth=2)
plot(shortEntry ? shortTP : na, title="Short TP", color=color.green, style=plot.style_cross, linewidth=2)
// === MODE LABEL ===
var label modeLabel = na
if (bar_index % 5 == 0)
label.delete(modeLabel)
modeLabel := label.new(bar_index, high, strictMode ? "STRICT MODE" : "LOOSE MODE", style=label.style_label_down, yloc=yloc.abovebar, color=strictMode ? color.red : color.green, textcolor=color.white, size=size.normal)