
Индексовая подвижная средняя кросс-интеллектуальная цепная система отслеживания убытков - это количественная торговая стратегия, основанная на техническом анализе и тщательном управлении капиталом. Эта стратегия использует пересеченные сигналы EMA для выявления потенциальных тенденций к росту, в сочетании с долларовым средним коэффициентом стоимости (DCA) для интеллектуального набора позиций и защиты прибыли с помощью двойного отслеживания механизма отслеживания убытков.
Эта стратегия основана на нескольких ключевых компонентах:
Механизм определения тенденций: Используйте пересечение быстрой ЭМА ((дифолт 9 циклов) и медленной ЭМА ((дифолт 21 циклов) для выявления потенциальной восходящей тенденции. Когда быстрая ЭМА пересекает медленную ЭМА вверх, система генерирует сигнал покупки.
Базовый заказ и заказ безопасности: Стратегия использует подширенный подход к управлению капиталом, начиная с базового заказа (по умолчанию 1000 долларов США) и добавляя два дополнительных безопасных заказа (по умолчанию 1250 долларов США SO1 и 1750 долларов США SO2) при снижении цены.
Расчет динамического интервалаПримечание: Триггерная цена за безопасный заказ может быть рассчитана двумя способами:
Система двойного отслеживания:
Условия выходаСтратегия “понизить позицию” в следующих случаях:
Фильтр периода охлаждения и даты: Стратегия включает в себя период охлаждения после базового заказа (по умолчанию 4 часа) и выборочный фильтр даты, чтобы ограничить отсчет или выполнение определенного периода времени.
В ходе анализа кода стратегии можно выделить следующие основные преимущества:
Адаптивное управление капиталом: Стратегия использует долларовую среднюю стоимость в сочетании с динамическими безопасными ордерами, автоматически корректируя позиции в зависимости от рыночных условий. Этот метод особенно эффективен на волатильных рынках, снижая среднюю цену входа и увеличивая потенциальную прибыль.
Позиционная корректировка на основе волатильностиС помощью ATR, рассчитанного на безопасное местоположение ордера, стратегия может автоматически корректировать промежуток наращивания позиций в зависимости от текущих рыночных колебаний, что является более гибким, чем метод с фиксированным процентом.
Двойная защита прибылиДвойная система слежения за потерями обеспечивает инновационный риск-менеджмент, стандартная система слежения за потерями защищает большую часть средств, в то время как механизм блокировки прибыли активируется после достижения определенного целевого показателя прибыли и защищает полученную прибыль в более тесном процентном соотношении.
Полностью настраиваемыйВсе ключевые параметры (длина EMA, размер ордера, стоп-процент отслеживания, интервал безопасных ордеров) могут быть скорректированы в зависимости от предпочтений трейдера в отношении риска и рыночных условий.
Интегрированная система раннего предупреждения: Стратегия содержит форматированные предварительные условия, которые могут быть интегрированы с сторонними автоматизированными платформами (например, 3Commas) для осуществления полностью автоматизированных операций.
Прозрачная информация о приёме на работу: Содержит подробные таблицы дебютирования, отображающие ключевые показатели и состояние торгов, что позволяет осуществлять мониторинг в режиме реального времени и оптимизировать стратегию.
Несмотря на многочисленные преимущества, существуют следующие потенциальные риски:
Решение проблемы: скорректировать процентные стопы и интервалы между безопасными заказами в зависимости от конкретного вида сделки и временных рамок; рассмотреть возможность добавления глобальных стопов в качестве дополнительного уровня защиты.
Решение проблемы: проведение тщательного отслеживания и оптимизации для конкретных видов торговли и рыночных условий; внедрение механизма адаптивной корректировки параметров.
*Решение проблемы*Подумайте о более гибких механизмах инициирования безопасных заказов, таких как принудительное исполнение на основе времени или адаптация интервалов в определенных рыночных условиях.
*Решение проблемы*Добавление торговых фильтров, таких как признание волатильности или силы тренда; продление периода охлаждения для снижения частоты торгов.
*Решение проблемы*Включение: рассмотреть возможность интеграции базовых фильтров или показателей рисковой эмоциональности; добавление проверки кросс-маркетной релевантности в качестве сигналов подтверждения.
Основываясь на глубоком анализе кода стратегии, можно выделить несколько возможных направлений оптимизации:
Адаптационные параметры: реализация механизма автоматической корректировки длины EMA и кратности ATR в зависимости от волатильности рынка или объема сделок. Например, использование длинных EMA и больших кратностей ATR в условиях высокой волатильности, использование коротких EMA и меньших кратностей ATR в условиях низкой волатильности. Это повысит адаптивность стратегии в различных рыночных условиях.
Сигнал многократного подтверждения: Добавление дополнительных подтверждающих показателей, таких как относительно сильный и слабый индекс ((RSI), пересечение или ленты Брин, чтобы уменьшить ложные сигналы. Можно реализовать фильтры, требующие одновременного подтверждения входящих сигналов несколькими техническими показателями, что повышает качество сигналов.
Динамическое распределение средствНапример, увеличение базового размера ордера в периоды низкой волатильности или в периоды, когда рынок более вероятно будет расти, а уменьшение - в условиях высокого риска.
Умный выход: реализация механизма частичного получения прибыли, позволяющего постепенно выходить на разных уровнях прибыли, а не на одноразовые равные позиции. Это может быть достигнуто путем установки нескольких целевых показателей прибыли и соответствующих процентов выхода, оптимизируя отношение риска к прибыли.
Интеграция эмоциональных показателей: Добавление анализа рыночных настроений, таких как индекс страха и жадности или анализ объема торгов, в качестве дополнительного фильтра на вход и выход. Это поможет стратегии избежать ненужных сделок в периоды крайних рыночных настроений.
Управление риском: реализовать функцию динамического расчета максимального риска (сумма всех возможных безопасных ордеров) и установить приемлемый максимальный риск. Это гарантирует, что стратегия никогда не будет чрезмерно подвергаться воздействию денег на одну сделку.
Индексная мобильная средняя кросс-интеллектуальная цепная система отслеживания убытков - это хорошо продуманная количественная торговая стратегия, которая сочетает в себе обнаружение тенденций, сложное пополнение и продвинутое управление убытками. Ее основные преимущества заключаются в способности адаптироваться к колебаниям рынка, интеллектуальном управлении капиталом и двухслойной системе защиты прибыли.
С помощью соответствующей оптимизации параметров и усиления рекомендаций стратегия может быть еще более улучшена в своей производительности и устойчивости. В частности, адаптивная настройка параметров и многократное подтверждение сигналов могут значительно повысить качество входа, а динамическое распределение средств и стратегия умного выхода могут оптимизировать рисково-возвратные характеристики.
В конечном счете, эта стратегия представляет собой сбалансированный количественный подход к торговле, ориентированный на сохранение и согласованность средств, а не на стремление максимизировать прибыль с каждой сделки. Она предоставляет трейдерам мощную структуру, которая может быть настроена в соответствии с личными предпочтениями в отношении риска и рыночными условиями, что потенциально может привести к долгосрочным устойчивым результатам торговли.
/*backtest
start: 2025-04-15 00:00:00
end: 2025-07-13 19:30:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
*/
//@version=5
strategy(
title="DCA + Dual Trailing Strategy",
overlay=true
)
// --- Trend ---
fastMALen = input.int(9, title="Fast EMA Length")
slowMALen = input.int(21, title="Slow EMA Length")
// --- Trailing Stops ---
trailStopPerc = input.float(8.0, title="Standard Trailing Stop (%)", minval=0.1) / 100
lockInThreshold = input.float(2.5, title="Profit Lock-In Trigger (%)", minval=0.1) / 100
lockInTrailPct = input.float(1.5, title="Lock-In Trail (%) after Trigger", minval=0.1) / 100
// --- Safety Orders (SO) ---
useATRSpacing = input.bool(true, title="Use ATR-Based Spacing?")
atrLength = input.int(14, title="ATR Length", minval=1)
atrSo1Multiplier = input.float(1.2, title="ATR SO1 Multiplier", minval=0.1)
atrSo2Multiplier = input.float(2.5, title="ATR SO2 Multiplier", minval=0.1)
// --- Fallback SO Spacing (if not using ATR) ---
fallbackSo1Perc = input.float(4.0, title="Fallback SO1 Drop (%) ", minval=0.1) / 100
fallbackSo2Perc = input.float(8.0, title="Fallback SO2 Drop (%) ", minval=0.1) / 100
// --- Entry Cooldown ---
cooldownBars = input.int(4, "Cooldown Bars After Base Entry", minval=0)
// --- Order Sizes in USD ---
baseUsd = input.float(10000.0, title="Base Order Size (USD)", minval=1.0)
so1Usd = input.float(12500.0, title="Safety Order 1 Size (USD)", minval=1.0)
so2Usd = input.float(17500.0, title="Safety Order 2 Size (USD)", minval=1.0)
// 2) CALCULATIONS
// --- Trend & Reversal Detection ---
fastMA = ta.ema(close, fastMALen)
slowMA = ta.ema(close, slowMALen)
trendUp = ta.crossover(fastMA, slowMA)
trendDown = ta.crossunder(fastMA, slowMA)
// --- ATR Value ---
atrValue = ta.atr(atrLength)
// 3) BASE ENTRY LOGIC
// Base Buy Signal: EMA crossover
baseBuySignal = trendUp
var int lastBuyBar = na // Tracks the bar index of the last base entry
inCooldown = not na(lastBuyBar) and (bar_index - lastBuyBar < cooldownBars)
var float baseEntryPrice = na // Stores the price of the initial base entry for SO calculations
// --- Execute Base Entry ---
if baseBuySignal and strategy.position_size == 0 and not inCooldown
baseQty = baseUsd / close // Calculate quantity based on USD
strategy.order("Base Order", strategy.long, qty=baseQty, comment="Base Entry")
baseEntryPrice := close
lastBuyBar := bar_index
// 4) SAFETY ORDERS LOGIC
// --- Calculate SO Trigger Prices ---
float so1TriggerPrice = na
float so2TriggerPrice = na
if strategy.position_size > 0 // Only calculate if a base order has been placed
so1TriggerPrice := useATRSpacing ?
(baseEntryPrice - atrValue * atrSo1Multiplier) :
(baseEntryPrice * (1 - fallbackSo1Perc))
so2TriggerPrice := useATRSpacing ?
(baseEntryPrice - atrValue * atrSo2Multiplier) :
(baseEntryPrice * (1 - fallbackSo2Perc))
// --- Conditions for SO Execution ---
// Added 'inDateRange' check
// Ensure base order exists, price trigger hit, and the specific SO hasn't filled yet
bool so1Condition = strategy.position_size > 0 and close <= so1TriggerPrice and strategy.opentrades == 1
bool so2Condition = strategy.position_size > 0 and close <= so2TriggerPrice and strategy.opentrades == 2
// --- Execute SO1 ---
if so1Condition
so1Qty = so1Usd / close // Calculate quantity based on USD
strategy.order("Safety Order 1", strategy.long, qty=so1Qty, comment="SO1")
// --- Execute SO2 ---
if so2Condition
so2Qty = so2Usd / close // Calculate quantity based on USD
strategy.order("Safety Order 2", strategy.long, qty=so2Qty, comment="SO2")
// 5) AVERAGE ENTRY PRICE
// Use the built-in variable for the average price of the open position
avgEntryPrice = strategy.position_avg_price
// 6) DUAL TRAILING STOP LOGIC
// Variables to track trailing stop levels and states
var float highestSinceEntry = na
var float trailStopPrice = na
var bool stopHitNormal = false
var bool lockInTriggered = false
var float lockInPeak = na
var float lockInStopPrice = na
var bool stopHitLockIn = false
// --- Update Trailing Logic when in a Position ---
if strategy.position_size > 0
// --- Standard Trail ---
highestSinceEntry := na(highestSinceEntry) ? close : math.max(highestSinceEntry, close)
trailStopPrice := highestSinceEntry * (1 - trailStopPerc)
stopHitNormal := close < trailStopPrice
// --- Lock-In Trail ---
if not lockInTriggered and close >= avgEntryPrice * (1 + lockInThreshold)
lockInTriggered := true
lockInPeak := close
if lockInTriggered
lockInPeak := math.max(lockInPeak, close)
lockInStopPrice := lockInPeak * (1 - lockInTrailPct)
stopHitLockIn := close < lockInStopPrice
else
stopHitLockIn := false
lockInStopPrice := na
// --- Reset Variables when Flat ---
else
highestSinceEntry := na
trailStopPrice := na
stopHitNormal := false
lockInTriggered := false
lockInPeak := na
lockInStopPrice := na
stopHitLockIn := false
// lastBuyBar is intentionally NOT reset here, cooldown depends on it
// 7) EXIT CONDITIONS
// Added 'inDateRange' check
// Exit if either trailing stop is hit OR if the trend reverses downward
exitCondition = (stopHitNormal or stopHitLockIn or trendDown) and strategy.position_size > 0
if exitCondition
strategy.close_all(comment="Exit: SL / LockIn / TrendDown")
// 9) PLOTS & DEBUG TABLE
// --- Plot MAs ---
plot(fastMA, color=color.new(color.green, 0), title="Fast EMA", linewidth=2)
plot(slowMA, color=color.new(color.red, 0), title="Slow EMA", linewidth=2)
// --- Plot Trailing Stops ---
plot(strategy.position_size > 0 ? trailStopPrice : na, color=color.new(color.orange, 0), title="Standard Trailing Stop", style=plot.style_linebr, linewidth=2)
plot(lockInTriggered ? lockInStopPrice : na, color=color.new(color.fuchsia, 0), title="Lock-In Trailing Stop", style=plot.style_linebr, linewidth=2)