Стратегия торговли с двойной перемещающейся средней реверсией

Автор:Чао Чжан, Дата: 2023-10-16 15:50:35
Тэги:

img

Обзор

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

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

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

В частности, стратегия рассчитывает два МА с использованием функции sma ((), присваивая результат xSMA (медленной линии) и быстрой линии. МА рассчитываются на основе цены закрытия. Когда цена закрытия пересекает xSMA, принимается длинная позиция. Когда цена закрытия пересекает xSMA, принимается короткая позиция. Стратегия также устанавливает лимит временного диапазона торговли, так что торговые сигналы генерируются только в указанном временном диапазоне.

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

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

  • Использование системы двойного MA позволяет эффективно отслеживать тенденции и избегать введения в заблуждение краткосрочным рыночным шумом
  • Сочетание быстрых и медленных МА может улучшить качество торговых сигналов
  • Контроль риска получения прибыли и остановки потерь для каждой сделки
  • Ограничение временного диапазона торговли позволяет избежать огромных колебаний вокруг крупных событий
  • Планирование торговых сигналов на барах создает визуальную помощь и улучшает интуитивность

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

  • Системы двойного MA, как правило, генерируют больше ложных сигналов, увеличивая частоту торговли и затраты
  • Параметры ПДУ должны быть установлены разумно, иначе эффект сглаживания пострадает или слишком много упущенных возможностей.
  • Системы MA имеют задержку и могут пропустить поворотные моменты тренда
  • Фиксированная прибыль/остановка убытков может быть слишком тупой и не может динамически корректироваться
  • Ограничение временного диапазона торговли может привести к потере возможностей в другие периоды

Риск может быть уменьшен путем корректировки параметров MA, оптимизации стратегии take profit/stop loss, устранения временных ограничений или установления более разумных периодов торговли.

Руководство по оптимизации

  • Испытать различные комбинации периодов MA для поиска оптимальных параметров
  • Принимать во внимание динамические сдерживающие стоп-потери/прибыль, например, на основе ATR.
  • Включить другие индикаторы, такие как MACD, KD и т. д. в качестве сигналов фильтрации
  • Оптимизируйте временной диапазон торговли, чтобы использовать больше возможностей
  • Комбинируйте с стратегией выхода, ищите сигналы выхода вокруг МА
  • Построить динамические механизмы выхода, активно останавливаясь, когда цена входит в диапазон

Резюме

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


/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
basePeriod: 15m
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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0

strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
    strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
    strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0) 
    strategy.close_all()

if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)

Больше