Стратегия Momentum Breakout Momentum Average


Дата создания: 2023-11-27 16:25:54 Последнее изменение: 2023-11-27 16:25:54
Копировать: 0 Количество просмотров: 608
1
Подписаться
1617
Подписчики

Стратегия Momentum Breakout Momentum Average

Обзор

Движущаяся стратегия прорыва средней линии - это стратегия торговли акциями, использующая сочетание сигналов пересечения средней линии с динамическими индикаторами. Эта стратегия использует множество технических индикаторов, таких как индексы сдвигающейся средней ((EMA), простой подвижной средней ((SMA), сдвигающийся средний сжатый индекс ((MACD) и относительно сильный индекс после его изменения ((StockRSI), чтобы сформировать сигнал покупки при условии, что долгосрочная тенденция подтверждена.

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

Стратегия включает в себя следующие компоненты:

  1. EMA/SMA среднелинейный пересечение: устанавливается 9-циклическая EMA-быстрая линия и 21-циклическая SMA-медленная линия, которая генерирует сигнал покупки, когда быстрая линия проходит медленную линию.

  2. Индекс MACD: MACD-индикатор включает в себя MACD-линию, сигнальную линию и MACD-пост. В качестве дополнительной подтверждения, когда столбики являются положительными и синхронизированы с сигналом покупки, генерируемым EMA/SMA.

  3. Индекс StockRSI: StockRSI для улучшенной версии RSI. Показательная линия выше линии OVERBOUGHT ((80) или ниже линии OVERSOLD ((20) создает сигнал покупки.

  4. Брин-пояс: средняя траектория бурин - 20-дневная SMA, диапазон - разница между двумя стандартами. Требуется, чтобы цена находилась в пределах буринской зоны, чтобы создать торговый сигнал.

  5. Остановка убытков и остановка позицийСтоп-стоп и стоп-призы рассчитаны на основе ATR за последние 14 дней.

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

Анализ преимуществ

Эта стратегия, сочетающая в себе преимущества равнолинейного скрещивания, динамического показателя и показателя волатильности, имеет следующие основные преимущества:

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

  2. Оптимизированные параметрыОсновные параметры, такие как циклы EMA, каналы пояса Брин, были оптимизированы, что позволило повысить стабильность системы.

  3. Автоматическая остановка / остановкаБрин-пояса и ATR могут регулировать стоп-позиции в реальном времени, что способствует контролю риска.

  4. Не слишком сложноКод прост, показатели доступны, практическая работа не так сложна.

Анализ рисков

Несмотря на хорошую эффективность, существуют следующие основные риски:

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

  2. Неправильный параметрНеправильная настройка параметров может привести к слишком частым сделкам или нечувствительной реакции. Следует адаптироваться в зависимости от разных сортов и рыночных условий.

  3. Слишком маленький или слишком большой стоп-убыток: Слишком маленький стоп-убыток легко поддается обману, слишком большой - слишком большой убыток. Стоп-убыток должен быть сбалансирован с остановкой.

В связи с вышеуказанными рисками могут быть приняты следующие меры:

  1. Человеческое вмешательство и модификация: В случае возникновения аномалий, можно вручную подтвердить сигнал, изменить параметры или приостановить политику.

  2. Оптимизация параметровПрименение более научных и объективных методов, таких как генетические алгоритмы, для оптимизации параметров.

  3. Стоп-стоп в сочетании с коэффициентом колебаний: может автоматически корректироваться в зависимости от колебаний, например, в 1-3 раза ATR.

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

Эта стратегия может быть улучшена в следующих аспектах:

  1. Повышение устойчивости механизмов сдерживания убытков: можно добавить отслеживание стоп или индексные скользящие средние для стоп.

  2. Фильтр объема транзакцийВключение показателя объема сделок, чтобы избежать неэффективного прорыва.

  3. Динамические параметры настройки: можно автоматически оптимизировать средний цикл в зависимости от рыночной среды, ширины каналов и т. д.

  4. Внедрение алгоритмов машинного обучения: Динамическая оптимизация параметров с использованием алгоритмов RNN, LSTM и др.

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

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

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

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)

// EMA/MA Crossover
fast_length = 9
slow_length = 21
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal and (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)

// Fractal-based Support and Resistance levels
isFractalHigh = high[2] < high[1] and high[1] > high[0]
isFractalLow = low[2] > low[1] and low[1] < low[0]
resistance = ta.valuewhen(isFractalHigh, high[1], 0)
support = ta.valuewhen(isFractalLow, low[1], 0)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 80
oversold = 20
stockrsi_signal = ((K < D) and (K < oversold)) or ((K > D) and (K > overbought))

// Buy and sell conditions
mandatory_buy_conditions = (crossover_signal ? 1 : 0) + (macd_signal ? 1 : 0) + (stockrsi_signal ? 1 : 0)

// Long-term Trend Check
long_term_ma = ta.sma(close, 200)
long_term_bullish = close > long_term_ma
long_term_bearish = close < long_term_ma

// Plot the long-term MA for visual clarity
plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)

// Simplified Buy and Sell conditions
buy_condition = long_term_bullish and (mandatory_buy_conditions >= 2) and (close > lower) and (close < upper)
sell_condition = (macdHistogram < 0) and (K > D) and (K > overbought)


// Potential SL and TP based on volatility
potential_SL = close - volatility
potential_TP = close + 2 * volatility

plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

// ... (rest of your code above)

// State variable to track if we're in a position, a counter for trades, and a delayed counter for plotting
var bool inPosition = false
var tradeCounter = 0
var tradeCounterDelayed = 0 // Declaration of the variable

// Buy logic: Check if tradeCounter is 0 and the buy condition is met
if tradeCounter == 0 and buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    inPosition := true
    tradeCounter := tradeCounter + 1

// Sell logic: Check if tradeCounter is 1, the sell condition is met, and we are in a position
if tradeCounter == 1 and inPosition and sell_condition
    strategy.close("BUY")
    inPosition := false
    tradeCounter := tradeCounter - 1

// Update the delayed trade counter:
tradeCounterDelayed := tradeCounter

// Plotting
bgcolor(buy_condition ? color.new(color.green, 90) : sell_condition ? color.new(color.red, 90) : na)
plotshape(series=buy_condition and tradeCounterDelayed == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition and tradeCounterDelayed == 1, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

// ... (rest of your code if any)