В процессе загрузки ресурсов... загрузка...

Двойная стратегия захвата движущейся средней тенденции с динамическим стоп-лосом и фильтром

Автор:Чао Чжан, Дата: 2024-07-31 11:46:38
Тэги:М.А.ЕМАSMAWMAТПSL

img

Обзор

Это стратегия, основанная на двойной системе скользящих средних, включающей динамические стоп-лосс и фильтр скользящих средних. Стратегия использует две скользящие средние разных периодов для захвата рыночных тенденций, используя при этом фильтр для ограничения направления торговли и предоставления гибких вариантов стоп-лосса. Этот подход направлен на захват средне- и долгосрочных тенденций при защите капитала посредством динамического управления рисками.

Принципы стратегии

Основные принципы этой стратегии включают:

  1. Система двойных скользящих средних: использует две скользящие средние, одну в качестве основной линии сигнала (краткий период) и другую в качестве фильтра (длительный период).

  2. Подтверждение тренда: рассматривает только открытие позиций, когда цена и основная скользящая средняя находятся на одной стороне фильтрующей скользящей средней.

  3. Сигналы входа: запускает сигналы входа, когда цена пробивается через основную скользящую среднюю и соответствует условиям фильтра.

  4. Динамический стоп-лосс: предлагает два варианта стоп-лосса - динамический стоп-лосс, основанный на процентах, или фиксированный стоп-лосс, основанный на предыдущем высоком/низком уровне свечи.

  5. Фиксированная прибыль: использует фиксированный уровень прибыли, основанный на процентах от входной цены.

  6. Визуализация: графики скользящих средних значений, входных цен, уровней стоп-лосса и уровень прибыли на графике для интуитивного анализа сделок.

Преимущества стратегии

  1. Следование тенденции: используя двойную систему скользящих сред, стратегия может эффективно отслеживать средне- и долгосрочные тенденции, увеличивая возможности получения прибыли.

  2. Управление рисками: Динамический вариант стоп-лосса позволяет стратегии автоматически корректировать риск на основе волатильности рынка, повышая защиту капитала.

  3. Гибкость: стратегия позволяет пользователям выбирать различные типы скользящих средних (SMA, EMA, WMA) и настраивать различные параметры, адаптируясь к различным стилям торговли и рыночным условиям.

  4. Механизм фильтрации: Использование длительного скользящего среднего в качестве фильтра помогает уменьшить ложные прорывы и контратендентные сделки, улучшая стабильность стратегии.

  5. Визуальные эффекты: путем составления графиков ключевых уровней цен и скользящих средних на графике, трейдеры могут интуитивно понять логику стратегии и текущие рыночные условия.

  6. Автоматическое исполнение: стратегия может быть выполнена автоматически на торговых платформах, уменьшая вмешательство человека и эмоциональное влияние.

Стратегические риски

  1. Отставание: скользящие средние по своей сути являются отстающими показателями, которые могут привести к поздним входам или выходам во время перемены тренда.

  2. Успех на различных рынках: на боковых или неуравновешенных рынках стратегия может генерировать частые ложные сигналы, что приводит к последовательным потерям.

  3. Чувствительность параметров: эффективность стратегии сильно зависит от выбранных параметров; неправильное настройка параметров может привести к переоценке или упущению важных возможностей.

  4. Фиксированные ограничения на получение прибыли: использование фиксированного процента на получение прибыли может преждевременно прекратить прибыльные сделки во время сильных тенденций.

  5. Изменение рыночных условий: эффективность стратегии может значительно варьироваться в различных рыночных условиях, что требует регулярной оценки и корректировки.

  6. Расходы на сдвиг и торговлю: в фактической торговле, сдвиг и торговые расходы могут существенно повлиять на прибыльность стратегии, особенно в сценариях высокочастотного трейдинга.

Направления оптимизации стратегии

  1. Динамическая корректировка параметров: внедрение адаптивных скользящих средних периодов и процентов стоп-лосса для удовлетворения различных волатильностей рынка и сильных тенденций.

  2. Многочасовой анализ: интегрировать информацию о тенденциях из более длительных временных рамок для улучшения точности решений о входе и уменьшения ложных сигналов.

  3. Фильтрация волатильности: внедрять индикаторы волатильности (например, ATR), чтобы приостановить торговлю в периоды низкой волатильности, уменьшая потери на нестабильных рынках.

  4. Подтверждение силы тренда: комбинировать другие технические показатели (например, ADX) для оценки силы тренда и открывать только позиции в условиях сильных тенденций.

  5. Динамическое получение прибыли: внедрять динамический механизм получения прибыли, основанный на волатильности рынка или силе тренда, чтобы максимизировать потенциал прибыли.

  6. Оптимизация размеров позиций: динамическое регулирование размеров позиций на основе размера счета и волатильности рынка для оптимизации соотношения риск-прибыль.

  7. Интеграция машинного обучения: Использование алгоритмов машинного обучения для оптимизации выбора параметров и сроков входа, улучшение адаптивности и производительности стратегии.

  8. Анализ настроения: включить индикаторы настроения рынка для корректировки поведения стратегии в период экстремальных настроений, избегая переполненных сделок.

Заключение

Стратегия с двойным движущимся средним трендом с динамическим стоп-лосом и фильтром - это комплексная система отслеживания трендов, предназначенная для отслеживания средне- и долгосрочных рыночных тенденций. Объединяя движущийся средний основного сигнала с движущимся средним фильтром, стратегия может эффективно определять направление тренда и генерировать торговые сигналы. Динамический вариант стоп-лосса обеспечивает гибкое управление рисками, а функции визуализации повышают интерпретативность стратегии.

Хотя стратегия показывает большой потенциал, она по-прежнему несет в себе риски, такие как отставание и чувствительность к изменяющимся рыночным условиям.

В целом, эта стратегия предоставляет трейдерам прочную основу, которую можно настроить и улучшить на основе индивидуальных потребностей и характеристик рынка.


/*backtest
start: 2024-06-30 00:00:00
end: 2024-07-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Moving Average Breakout with Filter and Dynamic Stop Loss", overlay=true)

// Параметры
maLength = input.int(14, "MA Length")
maType = input.string("SMA", "MA Type", options=["SMA", "EMA", "WMA"])
takeProfitPercent = input.float(1.0, "Take Profit (%)", step=0.1)
filterMaLength = input.int(50, "Filter MA Length")
filterMaType = input.string("SMA", "Filter MA Type", options=["SMA", "EMA", "WMA"])
useDynamicStopLoss = input.bool(false, "Use Dynamic Stop Loss")
dynamicStopLossPercent = input.float(1.0, "Dynamic Stop Loss (%)", step=0.1)

// Выбор типа основной скользящей средней
float ma = na
switch maType
    "SMA" => ma := ta.sma(close, maLength)
    "EMA" => ma := ta.ema(close, maLength)
    "WMA" => ma := ta.wma(close, maLength)

// Выбор типа скользящей средней фильтра
float filterMa = na
switch filterMaType
    "SMA" => filterMa := ta.sma(close, filterMaLength)
    "EMA" => filterMa := ta.ema(close, filterMaLength)
    "WMA" => filterMa := ta.wma(close, filterMaLength)

// Построение скользящих средних
plot(ma, color=color.blue, linewidth=2, title="Moving Average")
plot(filterMa, color=color.orange, linewidth=2, title="Filter Moving Average")

// Логика открытия позиций
longCondition = ta.crossover(close, ma) and close > filterMa
shortCondition = ta.crossunder(close, ma) and close < filterMa

var bool inPosition = false
var float entryPrice = na
var float takeProfitLevel = na
var float stopLossLevel = na

if (longCondition and not inPosition and strategy.position_size == 0)
    entryPrice := close
    takeProfitLevel := close * (1 + takeProfitPercent / 100)
    if (useDynamicStopLoss)
        stopLossLevel := close * (1 - dynamicStopLossPercent / 100)
    else
        stopLossLevel := low[1]
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit/Stop Loss", from_entry="Long", limit=takeProfitLevel, stop=stopLossLevel)
    // line.new(bar_index, entryPrice, bar_index + 1, entryPrice, color=color.blue, width=2)
    // line.new(bar_index, takeProfitLevel, bar_index + 1, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
    // line.new(bar_index, stopLossLevel, bar_index + 1, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
    inPosition := true

if (shortCondition and not inPosition and strategy.position_size == 0)
    entryPrice := close
    takeProfitLevel := close * (1 - takeProfitPercent / 100)
    if (useDynamicStopLoss)
        stopLossLevel := close * (1 + dynamicStopLossPercent / 100)
    else
        stopLossLevel := high[1]
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit/Stop Loss", from_entry="Short", limit=takeProfitLevel, stop=stopLossLevel)
    // line.new(bar_index, entryPrice, bar_index + 1, entryPrice, color=color.blue, width=2)
    // line.new(bar_index, takeProfitLevel, bar_index + 1, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
    // line.new(bar_index, stopLossLevel, bar_index + 1, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
    inPosition := true

// Проверка закрытия позиции по тейк-профиту или стоп-лоссу
if (strategy.position_size == 0)
    inPosition := false

// Отображение текущих линий стоп-лосса и тейк-профита
// if (strategy.position_size > 0)
    // line.new(bar_index[1], takeProfitLevel, bar_index, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
    // line.new(bar_index[1], stopLossLevel, bar_index, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
    // line.new(bar_index[1], entryPrice, bar_index, entryPrice, color=color.blue, width=2)

// if (strategy.position_size < 0)
    // line.new(bar_index[1], takeProfitLevel, bar_index, takeProfitLevel, color=color.green, width=2, style=line.style_dashed)
    // line.new(bar_index[1], stopLossLevel, bar_index, stopLossLevel, color=color.red, width=2, style=line.style_dashed)
    // line.new(bar_index[1], entryPrice, bar_index, entryPrice, color=color.blue, width=2)


Связанные

Больше