Стратегия динамического пересечения скользящих средних


Дата создания: 2024-02-05 10:23:10 Последнее изменение: 2024-02-05 10:23:10
Копировать: 0 Количество просмотров: 536
1
Подписаться
1617
Подписчики

Стратегия динамического пересечения скользящих средних

Обзор

Движущаяся средняя кроссоверная комбинация (Dynamic Moving Average Crossover Combo Strategy) - это комплексная торговая стратегия, которая интегрирует несколько технических показателей и рыночную фазу обнаружения. Она динамически рассчитывает волатильность рынка, судя по трем этапам рынка: колебаниям, тенденциям и сортировке, исходя из расстояния и волатильности цены от долгосрочных движущихся средних.

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

Расчет рыночной волатильности

Средняя волатильность за последние 14 дней рассчитывается с помощью ATR (средняя реальная волатильность). Средняя волатильность получается, отфильтровав 100-дневную простую скользящую среднюю.

Рыночный этап

Расчет расстояния цены от 200-дневного простого скользящего среднего. Если расстояние превышает среднюю волатильность в 1,5 раза, и направление четко определено, то следует рассматривать как трендовую ситуацию. Если текущая волатильность превышает среднюю волатильность в 1,5 раза, то следует рассматривать как шокирующую ситуацию.

EMA/SMA скрещивание

Быстрая EMA имеет 10-дневный цикл, а медленная SMA - 30-дневный. При прохождении медленной SMA через быструю EMA образуется сигнал к покупке.

MACD

Вычислите 12, 26, 9 параметры MACD. При положительном изменении столбца MACD, появляется сигнал покупки.

Bollinger Bands

Если ширина канала меньше, чем 20-дневная SMA, то рассчитывается как период сверки.

Правила участия

Во время колебаний: быстрое или медленное пересечение линий или коррекция столбца MACD, и закрытие цены в пределах Bollinger Bands.

Тенденционный период: быстрые и медленные пересечения линий или повороты MACD-полюсов.

В этом случае, если вы хотите, чтобы ваша ставка была выше, вы можете купить ее, но вы не можете купить ее, если вы не хотите, чтобы она была выше.

Правила игры

При условии, что MACD имеет две последовательные отрицательные линии K, и цена закрытия падает два дня подряд.

Например, в случае, когда RSI входит в зону сверхпокупок.

Сборка: выступление в группах, где цены ниже Upper Band.

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

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

  1. Систематизация и сокращение субъективного вмешательства.

  2. В сочетании с параметрами стратегии, адаптированной к рыночной среде, более адаптивная.

  3. Многопоказательная комбинация для повышения точности сигналов.

  4. Bollinger Bands автоматически останавливает убытки, снижая риск.

  5. Всесторонний анализ, фильтрация ложных сигналов.

  6. Динамические стоп-лосы, отслеживание трендов, прибыль.

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

Основные риски:

  1. Неправильная настройка параметров может привести к сбоям в стратегии. Рекомендуется оптимизировать комбинацию параметров.

  2. Внезапные события приводят к сбоям в модели. Рекомендуется своевременно обновлять стратегическую логику.

  3. Компрессионные сборы для получения прибыли. Рекомендуется выбрать брокер с низкой комиссионной.

  4. Многополюсные комбинации повышают сложность стратегии. Рекомендуется выбирать ключевые показатели.

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

Продолжайте оптимизацию с помощью следующих параметров:

  1. Оптимизация критериев оценки рыночной ситуации, повышение точности.

  2. Добавление модулей машинного обучения для самостоятельной адаптации параметров.

  3. В сочетании с текстовой обработкой оценивается риск крупного события.

  4. Поиск оптимального сочетания в многорыночной ретроспекции.

  5. Добавление стратегии trailing stop для остановки.

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

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

Исходный код стратегии
/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

// Volatility
volatility = ta.atr(14)
avg_volatility_sma = ta.sma(volatility, 100)
avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma

// Market Phase detection
long_term_ma = ta.sma(close, 200)
distance_from_long_term_ma = close - long_term_ma
var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma)
var bool isVolatile = volatility > 1.5 * avg_volatility

// EMA/MA Crossover
fast_length = 10
slow_length = 30
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 or (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)
isConsolidating = (upper - lower) < ta.sma(upper - lower, 20)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 75
oversold = 25

var float potential_SL = na
var float potential_TP = na
var bool buy_condition = na
var bool sell_condition = na

// Buy and Sell Control Variables
var bool hasBought = false
var bool hasSold = true

// Previous values tracking
prev_macdHistogram = macdHistogram[1]
prev_close = close[1]

// Modify sell_condition with the new criteria
if isVolatile
    buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper)
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

if isTrending
    buy_condition := not hasBought and crossover_signal or macd_signal
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - volatility
    potential_TP := close + 2 * volatility

if isConsolidating
    buy_condition := not hasBought and crossover_signal and (close > lower)
    sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

// Update the hasBought and hasSold flags
if buy_condition
    hasBought := true
    hasSold := false

if sell_condition
    hasBought := false
    hasSold := true

// Strategy Entry and Exit
if buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05)

if sell_condition
    strategy.close("BUY")
    
// Visualization
plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)
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)

bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)