Стратегия с двойным трендом и фильтрацией цепной скользящей средней


Дата создания: 2023-12-28 17:37:14 Последнее изменение: 2023-12-28 17:37:14
Копировать: 1 Количество просмотров: 623
1
Подписаться
1623
Подписчики

Стратегия с двойным трендом и фильтрацией цепной скользящей средней

Обзор

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

Стратегический принцип

  1. Рассчитывается быстрое движущееся среднее ((10-дневная линия) и медленно движущееся среднее ((50-дневная линия)), и вычисляется их соотношение, называемое соотношением средней движущейся цены. Это соотношение позволяет эффективно идентифицировать изменения длинной линии в ценах.
  2. Переведите средний коэффициент движения цены в процент, который показывает, насколько сильным был текущий коэффициент за предыдущий период времени. Этот процент определяется как волатильный.
  3. При прохождении установленного торгового порога ((10) на волнорегуляторе появляется сигнал покупки, при прохождении установленного торгового порога ((90) появляется сигнал продажи.
  4. Фильтрация торговых сигналов в сочетании с индикатором полосы пропускания буринга, действие при сужении полосы пропускания буринга.
  5. Используя двойные индикаторы фильтрации трендов, только тогда, когда цена находится в канале восходящего тренда, создается сигнал покупки, и только тогда, когда цена находится в канале нисходящего тренда, создается сигнал продажи, что позволяет избежать обратной операции.
  6. Установка механизма цепного выхода, включающего в себя остановку, остановку убытков и комбинированный выход, с возможностью предустановки нескольких условий выхода, приоритетом выхода из наиболее выгодных условий.

Стратегические преимущества

  1. Двойной механизм фильтрации трендов, надежное определение направления основного тренда, избегание обратных операций.
  2. Показатель пропорций скользящих средних более эффективен в определении изменений тенденций, чем одиночные скользящие средние.
  3. Показатель пропускной способности BRI эффективно ориентируется на низкие периоды колебаний рынка, когда торговые сигналы более надежны.
  4. Цепная система выхода из сделки позволяет увеличить прибыль и максимизировать ее.

Риски и решения

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

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

  1. Параметрическая оптимизация. Для поиска оптимальной комбинации параметров можно провести экспериментальные тесты на циклы скользящих средних, торгово-продажное положение колебателей, параметры Брин-полосы и параметры фильтрации тенденций.
  2. Интеграция с другими показателями. Для повышения точности стратегии можно рассмотреть возможность включения других показателей, определяющих изменение тенденции, таких как показатели KD, MACD и т. Д.
  3. Машинное обучение. Можно собирать исторические данные, использовать алгоритмы машинного обучения для обучения моделей, динамически оптимизировать различные параметры, реализовать адаптивную коррекцию параметров.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-12-20 00:00:00
end: 2023-12-27 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Premium MA Ratio Strategy", overlay = true)

// Input: Adjustable parameters for Premium MA Ratio
fast_length = input(10, title = "Fast MA Length")
slow_length = input(50, title = "Slow MA Length")
oscillator_threshold_buy = input(10, title = "Oscillator Buy Threshold")
oscillator_threshold_sell = input(90, title = "Oscillator Sell Threshold")

// Input: Adjustable parameters for Bollinger Bands
bb_length = input(20, title = "Bollinger Bands Length")
bb_source = input(close, title = "Bollinger Bands Source")
bb_deviation = input(2.0, title = "Bollinger Bands Deviation")
bb_width_threshold = input(30, title = "BB Width Threshold")
use_bb_filter = input(true, title = "Use BB Width Filter?")

// Input: Adjustable parameters for Trend Filter
use_trend_filter = input(true, title = "Use Trend Filter?")
trend_filter_period_1 = input(50, title = "Trend Filter Period 1")
trend_filter_period_2 = input(200, title = "Trend Filter Period 2")
use_second_trend_filter = input(true, title = "Use Second Trend Filter?")

// Input: Adjustable parameters for Exit Strategies
use_exit_strategies = input(true, title = "Use Exit Strategies?")
use_take_profit = input(true, title = "Use Take Profit?")
take_profit_ticks = input(150, title = "Take Profit in Ticks")
use_stop_loss = input(true, title = "Use Stop Loss?")
stop_loss_ticks = input(100, title = "Stop Loss in Ticks")
use_combined_exit = input(true, title = "Use Combined Exit Strategy?")
combined_exit_ticks = input(50, title = "Combined Exit Ticks")

// Input: Adjustable parameters for Time Filter
use_time_filter = input(false, title = "Use Time Filter?")
start_hour = input(8, title = "Start Hour")
end_hour = input(16, title = "End Hour")

// Calculate moving averages
fast_ma = sma(close, fast_length)
slow_ma = sma(close, slow_length)

// Calculate the premium price moving average ratio
premium_ratio = fast_ma / slow_ma * 100

// Calculate the percentile rank of the premium ratio
percentile_rank(src, length) =>
    rank = 0.0
    for i = 1 to length
        if src > src[i]
            rank := rank + 1.0
    percentile = rank / length * 100

// Calculate the percentile rank for the premium ratio using slow_length periods
premium_ratio_percentile = percentile_rank(premium_ratio, slow_length)

// Calculate the oscillator based on the percentile rank
oscillator = premium_ratio_percentile

// Dynamic coloring for the oscillator line
oscillator_color = oscillator > 50 ? color.green : color.red

// Plot the oscillator on a separate subplot as a line
hline(50, "Midline", color = color.gray)
plot(oscillator, title = "Oscillator", color = oscillator_color, linewidth = 2)

// Highlight the overbought and oversold areas
bgcolor(oscillator > oscillator_threshold_sell ? color.red : na, transp = 80)
bgcolor(oscillator < oscillator_threshold_buy ? color.green : na, transp = 80)

// Plot horizontal lines for threshold levels
hline(oscillator_threshold_buy, "Buy Threshold", color = color.green)
hline(oscillator_threshold_sell, "Sell Threshold", color = color.red)

// Calculate Bollinger Bands width
bb_upper = sma(bb_source, bb_length) + bb_deviation * stdev(bb_source, bb_length)
bb_lower = sma(bb_source, bb_length) - bb_deviation * stdev(bb_source, bb_length)
bb_width = bb_upper - bb_lower

// Calculate the percentile rank of Bollinger Bands width
bb_width_percentile = percentile_rank(bb_width, bb_length)

// Plot the Bollinger Bands width percentile line
plot(bb_width_percentile, title = "BB Width Percentile", color = color.blue, linewidth = 2)

// Calculate the trend filters
trend_filter_1 = sma(close, trend_filter_period_1)
trend_filter_2 = sma(close, trend_filter_period_2)

// Strategy logic
longCondition = crossover(premium_ratio_percentile, oscillator_threshold_buy)
shortCondition = crossunder(premium_ratio_percentile, oscillator_threshold_sell)

// Apply Bollinger Bands width filter if enabled
if (use_bb_filter)
    longCondition := longCondition and bb_width_percentile < bb_width_threshold
    shortCondition := shortCondition and bb_width_percentile < bb_width_threshold

// Apply trend filters if enabled
if (use_trend_filter)
    longCondition := longCondition and (close > trend_filter_1)
    shortCondition := shortCondition and (close < trend_filter_1)

// Apply second trend filter if enabled
if (use_trend_filter and use_second_trend_filter)
    longCondition := longCondition and (close > trend_filter_2)
    shortCondition := shortCondition and (close < trend_filter_2)

// Apply time filter if enabled
if (use_time_filter)
    longCondition := longCondition and (hour >= start_hour and hour <= end_hour)
    shortCondition := shortCondition and (hour >= start_hour and hour <= end_hour)

// Generate trading signals with exit strategies
if (use_exit_strategies)
    strategy.entry("Buy", strategy.long, when = longCondition)
    strategy.entry("Sell", strategy.short, when = shortCondition)
    
    // Define unique exit names for each order
    buy_take_profit_exit = "Buy Take Profit"
    buy_stop_loss_exit = "Buy Stop Loss"
    sell_take_profit_exit = "Sell Take Profit"
    sell_stop_loss_exit = "Sell Stop Loss"
    combined_exit = "Combined Exit"
    
    // Exit conditions for take profit
    if (use_take_profit)
        strategy.exit(buy_take_profit_exit, from_entry = "Buy", profit = take_profit_ticks)
        strategy.exit(sell_take_profit_exit, from_entry = "Sell", profit = take_profit_ticks)
    
    // Exit conditions for stop loss
    if (use_stop_loss)
        strategy.exit(buy_stop_loss_exit, from_entry = "Buy", loss = stop_loss_ticks)
        strategy.exit(sell_stop_loss_exit, from_entry = "Sell", loss = stop_loss_ticks)
    
    // Combined exit strategy
    if (use_combined_exit)
        strategy.exit(combined_exit, from_entry = "Buy", loss = combined_exit_ticks, profit = combined_exit_ticks)