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

Автор:Чао Чжан, Дата: 2024-02-27 16:21:02
Тэги:

img

Обзор

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

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

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

В частности, рассчитываются два набора быстрых и медленных скользящих средних:

  • 1 Fast EMA, длина 8 дней
  • 2-я быстрая EMA, длина 21 день
  • 1-я медленная SMA, длина 50 дней
  • 2-я медленная SMA, длина 200 дней

Затем проверяются перекрестки между быстрыми EMA и медленными SMA:

  • Если 8-дневная EMA пересекает 50-дневную SMA, золотистый крестный сигнал
  • Если 8-дневная EMA пересекается ниже 50-дневной SMA, сигнал смерти.

Для фильтрации ложных сигналов для подтверждения требуется второй перекресток EMA/SMA:

  • Только когда 21-дневная EMA также пересекает 50-дневную SMA, торговой сигнал запускается.

Требуя двух быстрых/медленных перекресток MA, можно отфильтровать многие ложные сигналы и повысить надежность.

Когда вы покупаете сигнальные триггеры, покупайте длинные, когда вы продаете сигнальные триггеры, покупайте короткие.

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

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

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

  1. Дизайн двойного MA фильтрует ложные сигналы и улучшает точность
  2. Комбинация EMA и SMA использует чувствительность EMA и плавность SMA
  3. Приобретение прибыли и остановка убытков - блокировка прибыли и контроль рисков
  4. Простая логика, легко понятная и модифицируемая.
  5. Настраиваемые параметры подходят для различных рыночных условий

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

Риски стратегии:

  1. Страты MA, как правило, приводят к большому количеству небольших выигрышей/убытков на нестабильных рынках.
  2. Может столкнуться с большими потерями на сильно развивающихся рынках
  3. Плохая настройка параметров также приводит к низкой производительности

Для контроля рисков:

  1. Корректировка параметров для различных рыночных условий
  2. Оптимизировать на основе обратных тестов, чтобы соответствовать целевому рынку
  3. Использовать стоп-лосс для ограничения размера потерь

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

Стратегия может быть дополнительно оптимизирована путем:

  1. Испытание более быстрых/медленных комбинаций MA для поиска наилучших
  2. Использование машинного обучения или генетических алгоритмов для автоматической оптимизации
  3. Добавление фильтра тренда для предотвращения контратендных сделок
  4. Добавление остаточных стоп-лосса для блокировки прибыли
  5. Включающие фильтры объема или волатильности для подтверждения сигналов
  6. Сочетание с другими слоями/продуктами для использования низкой корреляции

Заключение

В целом, двойная стратегия перекрестного MA генерирует сигналы с быстрыми / медленными перекрестками MA, наборами с прибылью и стоп-лосом для контроля рисков, и является простой, интуитивно понятной и простой в реализации. Параметры могут быть настроены и объединены с другими индикаторами для лучшей производительности.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JMLSlop

//@version=4

src = close
strategy("Crossover moving averages", shorttitle="Cross MA-EMA", overlay=true, calc_on_order_fills=false)

// first fast EMA
len = input(8, "Length", type=input.integer, minval=1)
doma1 = input(true, title="EMA")
out1 = ema(src, len) 

//Second fast EMA
len2 = input(21, minval=1, title="Length")
doma2 = input(true, title="EMA")
out2 = ema(src, len2)

//First slow MA
len3 = input(50, minval=1, title="Length")
doma3 = input(true, title="SMA")
out3 = sma(src, len3)

//Second slow MA
len4 = input(200, minval=1, title="Length")
doma4 = input(true, title="SMA")
out4 = sma(src, len4)

// Profit
profit = input(8, "Profit/lost %", type=input.float, minval=1) * 0.01


plot(doma1 and out1 ? out1: na, color=color.blue, linewidth=1, title="1st EMA")
plot(doma2 and out2 ? out2: na, color=color.red, linewidth=1, title="2nd EMA")
plot(doma3 and out3 ? out3: na, color=color.green, linewidth=2, title="1st MA")
plot(doma4 and out4 ? out4: na, color=color.orange, linewidth=3, title="2nd MA")

// Orders config
takeProfitPrice =
     (strategy.position_size > 0) ? strategy.position_avg_price + open*profit : (strategy.position_size < 0) ? strategy.position_avg_price - (open*profit) : na

longStopPrice  = strategy.position_avg_price * (1 - profit)
shortStopPrice = strategy.position_avg_price * (1 + profit)

longCondition2 = (out2>out3 and (crossover(out1, out4) or crossover(out1[1], out4[1]) or crossover(out1[2], out4[2]) or (crossover(out1[3], out4[3]))) or (out2>out3 and (crossover(out1, out3) or crossover(out1[1], out3[1]) or crossover(out1[2], out3[2]) or crossover(out1[3], out3[3]))))
if (longCondition2)
    strategy.entry("Enter L", strategy.long)

shortCondition2 = (out2<out3 and (crossunder(out1, out4) or crossunder(out1[1], out4[1]) or crossunder(out1[2], out4[2]) or crossunder(out1[3], out4[3]))) or (out2<out3 and (crossunder(out1, out3) or crossunder(out1[1], out3[1]) or crossunder(out1[2], out3[2]) or crossunder(out1[3], out3[3])))
if (shortCondition2)
    strategy.entry("Enter S", strategy.short)


if (strategy.position_size > 0)
    strategy.exit("Exit L", limit=takeProfitPrice, stop=longStopPrice)

if (strategy.position_size < 0)
    strategy.exit("Exit S", limit=takeProfitPrice, stop=shortStopPrice)


Больше