Стратегия прорыва стохастического импульса

Автор:Чао Чжан, Дата: 2023-10-24 16:35:24
Тэги:

img

Обзор

Стратегия Momentum Breakout в основном использует индикатор стохастического осциллятора для определения направления тренда на рынке, в сочетании с индикатором ADX для оценки силы тренда, для генерации торговых сигналов.

Логика стратегии

Стратегия основана на двух технических показателях:

  1. Стохастический осциллятор: используется для определения направления тренда на рынке. Стохастический осциллятор имеет значение от 0 до 100. Значение между 45 и 55, когда период составляет 14, означает отсутствие четкой тенденции. Стохастический выше 55 является бычьим сигналом, а ниже 45 является медвежьим сигналом.

  2. Индикатор ADX: используется для оценки силы тренда.

Стратегия сначала оценивает наличие четкого восходящего или нисходящего тренда на основе значения стохастического осциллятора. Когда стохастический показатель превышает 55, он сигнализирует о восходящем тренде. Когда он ниже 45, он сигнализирует о нисходящем тренде.

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

При сочетании стохастического осциллятора и ADX торговые сигналы генерируются при выполнении обоих следующих условий:

  1. Стохастический показатель выше 55, что сигнализирует о подъеме.
  2. ADX выше 20, что подтверждает сильный подъем.

Сигналы продажи генерируются при выполнении обоих следующих условий:

  1. Стохастический показатель ниже 45, что сигнализирует о нисходящем тренде.
  2. ADX выше 20, что подтверждает сильный спад.

С помощью этих правил стратегия формирует среднесрочную и долгосрочную тенденционную систему.

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

Преимущества этой стратегии включают:

  1. Поймать средне- и долгосрочные тенденции: путем объединения Stochastic и ADX, он может эффективно определить направление и силу тенденции рынка, поймав основные тенденции.

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

  3. Настройка параметров: периоды стохастического и ADX могут быть оптимизированы для разных рынков.

  4. Простота: общая логика проста и интуитивно понятна, она состоит из двух общих технических показателей.

  5. Универсальность: стратегия может применяться на разных рынках с настройкой параметров.

Риски

Некоторые риски этой стратегии:

  1. Отсутствующие точки прорыва: как индикаторы, следующие за трендом, Stochastic и ADX могут пропустить потенциальные точки переворота тренда и ранние сделки с прорывом.

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

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

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

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

Риски могут быть смягчены:

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

  2. Включение сигналов отмены тренда для своевременного выхода, когда тенденции существенно изменятся.

  3. Использование машинного обучения для автоматической оптимизации параметров.

  4. Повышение порога ADX для фильтрации слабых сигналов тренда на различных рынках.

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

Направления к улучшению

Некоторые способы улучшения стратегии:

  1. Оптимизация стохастических параметров, таких как периоды K и D, для точной локализации поворотных точек.

  2. Оптимизация периода ADX для определения наилучших параметров для оценки силы тренда.

  3. Добавление сигналов отмены тренда, таких как увеличение размера позиции в стохастических зонах перекупа/перепродажи с остановкой потерь.

  4. Сочетание других индикаторов, таких как RSI и MACD, для уточнения времени входа и выхода.

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

  6. Использование стратегий стоп-лосса, таких как перемещение стоп-лосса или обратный стоп-лосс для контроля одиночных потерь.

  7. Trailong стоп-лосс: Добавить последующий стоп-лосс, чтобы зафиксировать прибыль по мере расширения тренда.

  8. Управление деньгами: оптимизировать управление рисками путем корректировки размеров позиций на основе силы ADX.

Резюме

Подводя итог, эта стратегия Momentum Breakout в целом является системой, следующей за трендом, используя Stochastic для определения направления тренда и ADX для измерения силы, формируя средне- и долгосрочную торговую стратегию. Преимущества заключаются в улавливании тенденций и контроле снижений с простой и интуитивной логикой. Слабыми сторонами являются потенциальные пропущенные ранние сделки с прорывом и риски переворота тренда. Мы можем оптимизировать ее с помощью таких методов, как настройка параметров, добавление сигналов, реализация стоп-лосса для улучшения вознаграждения / риска при одновременном контроле рисков.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Created by Bitcoinduke
//Original Creator is Jake Bernstein 
// Link: https://school.stockcharts.com/doku.php?id=trading_strategies:stochastic_pop_drop
// Tested: XBTUSD 3h | BTCPERP FTX 3h
//@version=4
// strategy(shorttitle="Stochastic Pop and Drop", title="Pop and Drop", overlay=false, 
//      calc_on_every_tick=false, pyramiding=0, default_qty_type=strategy.cash, 
//      default_qty_value=1000, currency=currency.USD, initial_capital=1000,
//      commission_type=strategy.commission.percent, commission_value=0.075)

upper_threshold_buy = input(55, minval=50, title="Buy Entry/Exit Line")
lower_threshold_sell = input(45, maxval=50, title="Sell Entry/Exit Line")

oscillator_length = input(14, minval=1, title="Stochastic Length - Default 14")
sma_length = input(2, minval=1, title="SMA Length - 3-day (3 by default) simple moving average of stoch")

stoch_oscillator = sma(stoch(close, high, low, oscillator_length), sma_length)

//Upper and Lower Entry Lines
upper_line = upper_threshold_buy
lower_line = lower_threshold_sell

stoch_color = stoch_oscillator >= upper_line ? green : stoch_oscillator <= lower_line ? red : purple

//Charts
plot(stoch_oscillator, title="Stochastic", style=histogram, linewidth=4, color=stoch_color)
upper_threshold = plot(upper_line, title="Upper Line", style=line, linewidth=4, color=green)
lower_threshold = plot(lower_line, title="Lower Line", style=line, linewidth=4, color=red)

// Strategy Logic
LongSignal = stoch_oscillator >= upper_line and not (stoch_oscillator > lower_line and stoch_oscillator < upper_line) ? true : false
ShortSignal = stoch_oscillator <= lower_line and not (stoch_oscillator > lower_line and stoch_oscillator < upper_line) ? true : false

strategy.entry("POP_Short", strategy.short, when=ShortSignal)
strategy.entry("POP_Long", strategy.long, when=LongSignal)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(true, "Custom Backtesting Dates")
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(5, "Backtest Stop Day")
testStopHour = input(0, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END



Больше