Стратегия прорыва импульса в движущейся средней

Автор:Чао Чжан, Дата: 2023-11-27 16:25:54
Тэги:

img

Обзор

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

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

Ключевыми компонентами этой стратегии являются:

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

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

  3. Индикатор StockRSI: Сигналы запускаются, когда StockRSI выше уровня OVERBOUGHT (80) или ниже уровня OVERSOLD (20).

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

  5. Перестаньте терять и получайте прибыль: рассчитывается на основе 14-периодного ATR.

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

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

Ключевыми достоинствами этой стратегии являются:

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

  2. Оптимальные параметры: Ключевые параметры, такие как периоды EMA и полосы Боллинджера, оптимизированы для повышения стабильности.

  3. Автоматизированная остановка потерь/прибыль: Болинджерские полосы и ATR позволяют динамически регулировать остановки для лучшего контроля риска.

  4. Легко применяется: Чистая кодовая структура и легкий доступ к данным позволяют осуществлять простые практические операции.

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

Несмотря на хорошие результаты, основные риски включают:

  1. Ложные сигналы: Необычные колебания рынка или сбои показателей могут генерировать неправильные сигналы.

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

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

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

  1. Ручное вмешательство: В ненормальных ситуациях сигналы могут быть проверены вручную, параметры перенаправлены или стратегии временно остановлены.

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

  3. Скорректированные по волатильности остановки: диапазоны стоп-лосса могут быть установлены в 1-3 раза выше ATR для учета волатильности.

Возможности для расширения

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

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

  2. Фильтры объема: Добавление показателей объема для предотвращения ложных прорывов.

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

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

Заключение

Стратегия Momentum Breakout Moving Average использует преимущества сочетания нескольких технических индикаторов и достигла приличной прибыльности с долгосрочным и краткосрочным подтверждением.


/*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)


Больше