Стратегия двойного пересечения скользящих средних - это количественная стратегия торговли, которая использует пересечения скользящих средних для определения сигналов входа и выхода.
Основная логика этой стратегии заключается в отслеживании 2 скользящих средних (10-дневных и 200-дневных) в течение 3 временных рамок (180 минут, 60 минут, 120 минут). Когда более быстрый скользящий средний пересекает более медленный скользящий средний, генерируется золотой кроссовер, указывающий на то, что инструмент находится в восходящем тренде. Когда более быстрый скользящий средний пересекает ниже более медленного, генерируется кроссовер смерти, указывающий на нисходящий тренд.
Сначала 10-дневные и 200-дневные скользящие средние рассчитываются отдельно для 180-минутных и 60-минутных временных рамок. Когда 10-дневный MA на 180-минутных временных рамах пересекает 200-дневный MA, генерируется золотой кроссоверный сигнал. Когда он пересекается ниже, генерируется сигнал кроссовера смерти. Это обеспечивает быстрые торговые сигналы.
Далее стратегия вводит 200-дневный MA на 120-минутный временной рамок в качестве
Например, когда на 180-минутном цикле происходит золотой кроссовер, только если 60-минутный 200-дневный MA превышает 120-минутный 200-дневный MA, стратегия будет длинной. Долгая позиция будет открыта только при выполнении этого условия.
В целом, сравнивая отношения между скользящими средними за разные временные рамки, эта стратегия создает несколько слоев фильтрации для повышения надежности сигнала, что делает ее распространенным типом стратегии торговли на основе фильтров.
Улучшенная точность с помощью подтверждения с несколькими временными рамками. По сравнению с сигналами с одним временным рамком, использование MAs от 180/60/120 мин резко уменьшает ложные сигналы и улучшает качество торговых сигналов.
Разумная частота операции. В отличие от высокочастотных стратегий, эта стратегия торгуется реже, избегая необходимости непрерывного мониторинга рынка. Более подходит для ручной торговли.
Эта стратегия имеет низкий барьер для входа и легко понятна для начинающих.
Оптимизируемый в различных периодах и параметрах. Типы и периоды использования MA регулируемы. Различные наборы параметров могут быть протестированы для разных продуктов и режимов рынка.
Основные скользящие средние имеют задержку по дизайну и часто не могут улавливать быстрые изменения тренда.
Когда рынок находится в диапазоне, отношения MA могут очень часто пересекаться, вызывая чрезмерные входы и триггеры стоп-лосса, повышая затраты и риски потери.
Опасность переустройства от оптимизации параметров. Альфа в основном происходит от настройки параметров на основе ограниченных наборов данных. Это, вероятно, приводит к проблемам с переустройством и переустройством.
Решения:
Есть еще возможности для дальнейшей оптимизации:
Попробуйте различные комбинации временных рамок и настроить периоды MA, чтобы найти лучшие параметры, с помощью методов оптимизации грубой силы и машинного обучения.
Включить анализ тенденций объема и более высоких временных рамок для дополнительного подтверждения сигнала, например, избегать записей во время низкого объема торговли.
Прогнозировать закономерности кривой заранее, используя модели глубокого обучения, такие как RNN, для принятия решений.
Внедрить адаптивные скользящие средние для улучшения логики фильтрации. Динамически регулировать периоды MA для сокращения входов во время неопределенности рынка.
Стратегия двойной переменной средней кроссовер сравнивает переменные средние отношения в нескольких временных рамках, чтобы отфильтровать ложные сигналы, улучшая надежность сигнала.
/*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")