
Стратегия представляет собой умную стратегию DCA, основанную на перекрестном сигнале EMA, которая сочетает в себе адаптивное развертывание безопасных ордеров SO и инновационный двойной механизм стоп-лосса. Она выходит на рынок при подтверждении восходящей тенденции, а затем автоматически развертывает дополнительные безопасные ордера в соответствии с рыночной волатильностью, используя при этом стандартные стоп-лосса и систему отслеживания локса прибыли для защиты доходов.
Основная логика этой стратегии заключается в следующих ключевых компонентах:
Система распознавания тенденций: Используйте пересечение быстрых ЭМА (например, 9-ти циклов) и медленных ЭМА (например, 21-ти циклов) для выявления потенциальной тенденции к повышению. Когда быстрые ЭМА пересекают медленные ЭМА вверх, система подтверждает тенденцию к повышению и запускает базовые входные заказы.
Многоуровневая система доступа DCAНапример, если вы хотите, чтобы ваш ребенок учился в университете, то вы должны быть готовы к тому, что ему предстоит сделать.
Волатильный механизм адаптации: Триггерная цена для безопасных ордеров может быть динамически рассчитана на основе ATR (средний реальный диапазон), что позволяет стратегии автоматически корректировать входную позицию в зависимости от текущих колебаний рынка. Пользователь может выбрать использование ATR-множества (по умолчанию SO1 в 1,2 раза больше ATR, SO2 в 2,5 раза больше ATR) или фиксированный процентный спад (по умолчанию SO1 в 4% и SO2 в 8%) для расчета триггерной точки для безопасных ордеров.
Двухколесная система защиты от повреждений:
Механизм охлаждения: После выполнения базового ордера вводится период охлаждения ((по умолчанию 4 K-линии), чтобы предотвратить чрезмерную торговлю в короткие сроки.
Анализ этой стратегии показал следующие значительные преимущества:
Умение адаптироватьсяС помощью ATR вычисляется цена, заданная для заказа безопасности, что позволяет стратегии разумно адаптироваться к различным рыночным волатильным условиям, а также расширять интервал заказа безопасности в период высокой волатильности и сжимать интервал в период низкой волатильности.
Оптимизация управления капиталомПрименение метода нарастающего распределения средств ((1000 долларов → 1250 долларов → 1750 долларов) соответствует принципу управления позициями “пирамиды”, что позволяет стратегии получать лучшую среднюю цену входа с большим количеством средств при падении цен.
Двухуровневый механизм защитыИнновационная двойная система остановки убытков обеспечивает базовую защиту от снижения риска, а также автоматически переключается на более консервативный режим остановки убытков при получении прибыли, эффективно уравновешивая максимизацию прибыли и контроль риска.
Гибкость настройки: Все ключевые параметры могут быть настроены, включая циклы EMA, длину ATR, интервал между безопасными ордерами, стоп-роль и размер ордера, что позволяет трейдеру оптимизировать в соответствии с личными предпочтениями в отношении риска и рыночными условиями.
Интеграция: Стратегия встроена в форматирование предупреждающих условий в виде сообщений JSON, что позволяет интегрироваться с сторонними платформами автоматического трейдинга (например, 3Commas) для полностью автоматизированного исполнения сделок.
Несмотря на всеобъемлющую разработку стратегии, существуют следующие потенциальные риски и проблемы:
Риск изменения тренда: Стратегия зависит от перекрестных сигналов EMA, которые могут вызывать ошибочные сигналы в быстро меняющихся или колеблющихся рынках, что приводит к ненужному вхождению. Решением является изменение длины цикла EMA или добавление дополнительных подтверждающих показателей.
Риск потери средств: В условиях продолжающегося падения рынка средняя цена за вход может быть намного выше рыночной, даже если все безопасные ордера были развернуты, что приводит к долгосрочным потерям. Рекомендуется установить максимальный лимит потери или ограничение общего размера позиции.
Риски чрезмерной торговлиВ условиях резкой волатильности рынка, EMA может часто пересекаться, вызывая перебор торгов. Несмотря на встроенный механизм охлаждения, возможно, потребуется дальнейшая оптимизация или добавление дополнительных ограничений на частоту торгов.
Двойные тормоза помешали друг другу: В некоторых рыночных условиях два механизма остановки могут взаимодействовать друг с другом, что приводит к преждевременному выходу или повторному сигналу.
Трудности оптимизации параметров: Некоторые параметры стратегии требуют согласования друг с другом для достижения оптимального эффекта, что увеличивает сложность оптимизации параметров. Рекомендуется использовать инструмент оптимизации обратной связи для полного анализа параметров.
Основываясь на глубоком анализе кода, можно выделить следующие возможные направления оптимизации стратегии:
Введение механизма многократного подтверждения тенденцийВ настоящее время стратегия зависит только от одного перекрестного сигнала EMA. Можно рассмотреть возможность добавления дополнительных признаков подтверждения тренда, таких как RSI, MACD или более длительный период, чтобы уменьшить ошибочный сигнал. Это значительно снижает риск ложных прорывов.
Динамическая система распределения средствВ настоящей стратегии используются фиксированные суммы в долларах США в качестве размеров ордеров, которые могут быть оптимизированы в соответствии с динамической системой корректировки, основанной на рыночной волатильности или интересах счетов, что обеспечивает поддержание надлежащего уровня риска в различных рыночных условиях.
Оптимизированная стратегия стоп-лоссаМожно разработать более сложную логику остановки убытков, например, адаптивное отслеживание остановок на основе рыночной волатильности или интеграцию показателей количества движения и объема сделок для оптимизации решений о выходе, чтобы избежать преждевременного выхода из рынка при краткосрочных колебаниях.
Укрепление контроля за отходамиДобавлена функция ограничения общего вывода, которая автоматически приостанавливает новые заказы или закрывает существующие позиции, когда стратегия достигает заданного максимального процента вывода, чтобы предотвратить катастрофические потери в экстремальных рыночных условиях.
Система оптимизации циклаРазработка функции автоматической оптимизации циклов, позволяющей стратегии автоматически корректировать длину EMA, циклы ATR и другие временные параметры в зависимости от недавних рыночных условий, чтобы адаптироваться к изменению состояния рынка.
“Интеллектуальная стратегия DCA с отслеживанием колебаний и двойной системой остановок” - это хорошо продуманная программа количественной торговли, особенно подходящая для захвата восходящих тенденций и управления риском в волатильных рынках. Она искусно сочетает отслеживание тенденций, среднее значение стоимости доллара и механизм самостоятельной адаптации колебаний, а также защищает доходы с помощью инновационной двойной системы остановок.
Ключевое преимущество этой стратегии заключается в ее адаптивности и балансе управления рисками, а также в возможности автоматической адаптации решений о входе и выходе в различных рыночных условиях. Используя ATR для динамического расчета точек запуска безопасных заказов, стратегия может разумно реагировать на рыночные условия в реальном времени, а не полагаться на заранее установленные статические параметры.
Хотя существуют потенциальные риски, связанные с идентификацией тенденций и управлением средствами, они могут быть эффективно смягчены с помощью предлагаемых направлений оптимизации. В частности, внедрение системы многократного признания тенденций и динамического распределения средств значительно повысит устойчивость и долгосрочную эффективность стратегии.
Для количественных трейдеров, которые ищут системный способ торговли на волатильных рынках, стратегия предоставляет всеобъемлющую и масштабируемую структуру, позволяющую одновременно улавливать возможности в восходящих тенденциях и обеспечивать достаточную защиту от риска в неблагоприятных рыночных условиях.
/*backtest
start: 2025-03-14 00:00:00
end: 2025-04-02 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy(
title="BONK/USD (1H) - $4k DCA + Dual Trailing + Date Filter", // Updated Title
overlay=true,
initial_capital=4000,
currency=currency.USD,
default_qty_type=strategy.fixed,
default_qty_value=0, // Quantity calculated dynamically based on USD value
commission_type=strategy.commission.percent, // Example: Add commission settings
commission_value=0.1 // Example: 0.1% commission
)
// 1) USER INPUTS (Defaults adjusted for 1H timeframe - REQUIRES BACKTESTING/TUNING)
// --- Trend ---
fastMALen = input.int(9, title="Fast EMA Length (Default for 1H)")
slowMALen = input.int(21, title="Slow EMA Length (Default for 1H)")
// --- Trailing Stops ---
trailStopPerc = input.float(8.0, title="Standard Trailing Stop (%) (Default for 1H)", minval=0.1) / 100
lockInThreshold = input.float(2.5, title="Profit Lock-In Trigger (%) (Default for 1H)", minval=0.1) / 100
lockInTrailPct = input.float(1.5, title="Lock-In Trail (%) after Trigger (Default for 1H)", 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 (Default for 1H)", minval=0.1)
atrSo2Multiplier = input.float(2.5, title="ATR SO2 Multiplier (Default for 1H)", minval=0.1)
// --- Fallback SO Spacing (if not using ATR) ---
fallbackSo1Perc = input.float(4.0, title="Fallback SO1 Drop (%) (Default for 1H)", minval=0.1) / 100
fallbackSo2Perc = input.float(8.0, title="Fallback SO2 Drop (%) (Default for 1H)", minval=0.1) / 100
// --- Entry Cooldown ---
cooldownBars = input.int(4, "Cooldown Bars After Base Entry (Default for 1H)", minval=0)
// --- Order Sizes in USD ---
baseUsd = input.float(1000.0, title="Base Order Size (USD)", minval=1.0)
so1Usd = input.float(1250.0, title="Safety Order 1 Size (USD)", minval=1.0)
so2Usd = input.float(1750.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 ---
// Added 'inDateRange' to the condition
if baseBuySignal and strategy.position_size == 0 and not inCooldown
baseQty = baseUsd / close // Calculate quantity based on USD
strategy.entry("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 not na(baseEntryPrice) // 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 = not na(baseEntryPrice) and strategy.position_size > 0 and close <= so1TriggerPrice and strategy.opentrades == 1
bool so2Condition = not na(baseEntryPrice) and strategy.position_size > 0 and close <= so2TriggerPrice and strategy.opentrades == 2
// --- Execute SO1 ---
if so1Condition
so1Qty = so1Usd / close // Calculate quantity based on USD
strategy.entry("Safety Order 1", strategy.long, qty=so1Qty, comment="SO1")
// --- Execute SO2 ---
if so2Condition
so2Qty = so2Usd / close // Calculate quantity based on USD
strategy.entry("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
baseEntryPrice := na
// 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, within the active date range
exitCondition = (stopHitNormal or stopHitLockIn or trendDown) and strategy.position_size > 0
if exitCondition
strategy.close_all(comment="Exit: SL / LockIn / TrendDown")
// 8) ALERT CONDITIONS (Potential 3Commas Integration)
// WARNING: Verify and adapt these JSON message strings for your specific 3Commas bot configuration!
// The required format ('action', parameters, etc.) can vary.
// Added 'inDateRange[1]' check for Base Alert
alertcondition(inDateRange[1] and baseBuySignal and strategy.position_size[1] == 0 and not inCooldown[1],
title="Base Buy Alert",
message='{"action":"start_deal","order":"base"} // Verify/Adapt JSON for your 3Commas bot!')
// Added 'inDateRange' check for SO1 Alert
alertcondition(so1Condition, title="SO1 Alert",
message='{"action":"add_funds","order":"so1"} // Verify/Adapt JSON for your 3Commas bot!')
// Added 'inDateRange' check for SO2 Alert
alertcondition(so2Condition, title="SO2 Alert",
message='{"action":"add_funds","order":"so2"} // Verify/Adapt JSON for your 3Commas bot!')
// Added 'inDateRange' check for Exit Alert
alertcondition(exitCondition, title="Exit Alert",
message='{"action":"close_at_market_price"} // Verify/Adapt JSON for your 3Commas bot!')
// 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)
// --- Debug Info Table ---
var table tradeInfo = table.new(position=position.bottom_right, columns=2, rows=10, border_width=1)