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


Дата создания: 2024-02-27 16:21:02 Последнее изменение: 2024-02-27 16:21:02
Копировать: 0 Количество просмотров: 686
1
Подписаться
1617
Подписчики

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

Обзор

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

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

Основная логика этой стратегии заключается в том, что время входа и выхода определяется на основе пересечения двух групп скоростных средних линий.

Для начала рассмотрим две группы средних скоростных:

  • Первая группа быстрого ЭМА длится 8 дней.
  • Вторая группа быстрого ЭМА длиной 21 день
  • Первая группа - медленный SMA, длительность 50 дней
  • Вторая группа - медленный SMA, длительность 200 дней.

Затем, чтобы определить, является ли быстрая EMA золотым или медленным SMA:

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

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

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

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

При получении сигнала о покупке, вы должны сделать дополнительный вход; при получении сигнала о продаже, вы должны сделать дисконтный вход.

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

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

Эта стратегия имеет следующие преимущества:

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

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

Однако эта стратегия также несет в себе некоторые риски:

  1. Среднелинейная стратегия может привести к более волатильным небольшим прибылям и небольшим убыткам.
  2. В случае резкого изменения тренда, возможны большие убытки
  3. Неправильная настройка параметров может привести к низкой эффективности прибыли

Для того, чтобы контролировать риски, рекомендуется:

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

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

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

  1. Тестирование большего количества комбинаций с медленным и средним ускорением для поиска оптимальных комбинаций
  2. Автоматический поиск оптимальных параметров с использованием машинного обучения или генетических алгоритмов
  3. Повышение индексов трендового анализа и предотвращение неудачных торгов
  4. Увеличение движущихся стоп или движущихся стоп для лучшего блокирования прибыли
  5. Укрепление надежности сигнала в сочетании с объемом или волатильностью
  6. Многостратегические/многовидовые комбинации с использованием неразделенности для распределения риска

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

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

Исходный код стратегии
/*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)