Двойная скользящая средняя Алгоритмическая торговая стратегия Золотой крест и Крест смерти


Дата создания: 2024-01-29 15:11:58 Последнее изменение: 2024-01-29 15:11:58
Копировать: 0 Количество просмотров: 590
1
Подписаться
1617
Подписчики

Двойная скользящая средняя Алгоритмическая торговая стратегия Золотой крест и Крест смерти

Обзор

Dual Moving Average Crossover Strategy - это количественная торговая стратегия, которая использует уравненные золотые и мертвые форки для определения входа и выхода. Эта стратегия одновременно сочетает в себе уравненные линии разных циклов, образуя многослойную фильтрацию, которая может эффективно снизить ложные сигналы и повысить надежность торговых сигналов.

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

Основная логика этой стратегии заключается в том, чтобы отслеживать 2 скользящих средних за 3 временных периода: 180 минут, 60 минут, 120 минут. Когда быстрая линия пересекает медленную линию в нижнем направлении, она создает золотое форекс, означающее, что сорт переходит в многоголовый режим. Когда быстрая линия пересекает медленную линию в верхнем направлении, она создает мертвое форекс, означающее, что сорт переходит в пустой режим.

Сначала стратегия рассчитывает 10-дневную и 200-дневную линии в 180-минутных и 60-минутных циклах соответственно. Когда 180-минутная 10-дневная линия проходит через 200-дневную линию в нижнем направлении, генерируется сигнал золотой форки; когда она проходит в верхнем направлении, генерируется сигнал мертвой форки. Это эквивалентно торговым сигналам с быстрым циклом.

Затем стратегия вводит 200-дневную линию с 120-минутным циклом в качестве контрольной линии. Только при появлении золотой или мертвой вилки, принимается решение о начале торговли, чтобы устранить некоторые ложные сигналы, путем оценки того, выше или ниже 200-дневная линия с 60-минутным циклом, чем 200-дневная линия с 120-минутным циклом.

Например, когда 180 минут дает золотую вилку, если 200-минутная линия 60 минут выше, чем 200-минутная линия 120 минут, смотрите больше; только при этом условии открывается больше. Напротив, если 200-минутная линия 60 минут ниже, чем 200-минутная линия 120 минут, не смотрите больше и не открывайте позицию.

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

Стратегические преимущества

  • Многоциклическое подтверждение, повышение точности сигнала. По сравнению с одноциклическим суждением, эта стратегия использует три цикла 180 минут, 60 минут и 120 минут для подтверждения среднелинейных отношений, что значительно снижает количество ложных сигналов и повышает качество торговых сигналов.

  • Средняя частота операций. По сравнению с высокочастотными торговыми стратегиями, эта стратегия имеет более низкую частоту операций, не требует частых операций и лучше подходит для ручного отчета.

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

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

Стратегический риск

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

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

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

Решения, отвечающие риску, следующие:

  • Сокращение средних параметров, чтобы ускорить реакцию.

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

  • Тестирование данных для разных сортов и периодов времени, оценка устойчивости параметров.

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

Однако есть еще много возможностей для дальнейшей оптимизации этой стратегии:

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

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

  • В сочетании с глубоким обучением модели прогнозирования кривой. Использование глубокого обучения модели, такие как RNN для прогнозирования будущих цен, вспомогательные решения.

  • Применение адаптивной средней линии, улучшение логики фильтрации. Когда рынок входит в состояние шока, динамически корректировать длину средней линии, снизить частоту открытия позиций.

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

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

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

//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)

bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false

MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)

MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)

MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)

if MA23Crossover
    startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
    lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
    label.set_y(lblBull, MA2)  
    strategy.close("go Short")
    strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
    //not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
    startSHORTBOTandDEAL := true
    lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
    label.set_y(lblBull, MA2)
    strategy.close("go Long")
    strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
    if MA2 >= MA3
        openLONG := true
        lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.entry("go Long", strategy.long, comment="go Long")
    if MA2 <= MA3
        closeSHORT := true
        lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
        strategy.close("go Short")
    
if MA12Crossunder
    if MA2 >= MA3
        closeLONG := true
        lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.close("go Long")
    if MA2 <= MA3
        openSHORT := true
        lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
        strategy.entry("go Short", strategy.short, comment="go Short")


plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")


alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")