
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")