Стратегия прорыва колебаний

Автор:Чао Чжан, Дата: 2023-10-27 16:32:19
Тэги:

img

Обзор

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

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

  1. Используйте 2-периодический RSI, чтобы определить, находится ли цена в регионе перепроданности.

  2. Для определения основного направления тренда используйте длительную скользящую среднюю (200 периодов).

  3. Когда цена выше длинной MA и RSI ниже линии перепродажи, открыть длинную позицию по рыночной цене.

  4. Когда цена проходит через короткий период MA (5 периодов) вверх, закрыть длинную позицию по рыночной цене, чтобы получить прибыль.

Кроме того, стратегия предусматривает следующие варианты конфигурации:

  • Параметры RSI: длина периода, уровни перекупленности/перепроданности.

  • Параметры МО: длительный и короткий период.

  • Фильтр RSI MA: добавьте RSI MA, чтобы избежать колебаний RSI.

  • Стоп-потеря: настраивается для добавления стоп-потерь или нет.

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

  1. Система двойного MA может эффективно отслеживать средне- и долгосрочные тенденции.

  2. РСИ не позволяет пропустить лучшее время входа во время сильных колебаний.

  3. Гибкая конфигурация, подходящая для оптимизации параметров.

  4. Прорывная стратегия, не исключено, что вы пропустите сигналы.

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

  1. Стратегия двойного MA чувствительна к параметрам, что требует оптимизации для достижения наилучшей производительности.

  2. Неиспользование стоп-лосса несет в себе риск увеличения потерь.

  3. Ложный прорыв рискует потерями на колеблющемся рынке.

  4. Риск чрезмерной адаптации к тесту. Требует валидации на рынках и временных периодах.

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

  1. Испытать и оптимизировать комбинации параметров RSI и MA для поиска оптимального.

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

  3. Добавьте остаточный стоп-лосс, чтобы контролировать потерю одной сделки.

  4. Оценить влияние различных периодов хранения для определения оптимального.

  5. Проверяйте прочность в более длительные периоды времени, например, ежедневно.

Резюме

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


/*backtest
start: 2023-09-26 00:00:00
end: 2023-10-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RSI Strategy", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

//Starter Parameters

length = input(title="RSI Lenght", defval=2)
overBoughtRSI = input(title="OverBought Level for RSI",  defval=10)
shortLength = input(title="Short MA Length",  defval=5)
longLength = input(title="Long MA Length",  defval=200)

RuleMRSI=input(title="RSI Moving Average Filter", defval= true)
lengthmrsi=input(title="RSI Moving Average Length",  defval=4)
overBoughtMRSI=input(title="OverBought Level for the Moving Average of the RSI",  defval=30)

Rulestop=input(title="Apply Stop Loss", defval=false)
stop_percentual=input(title="% Stop Loss",  defval=10)

//RSI

vrsi = rsi(close, length)

//Moving Averages

longma = sma(close,longLength)
shortma = sma(close,shortLength)
mrsi=sma(vrsi,lengthmrsi)

//Stop Loss

stop_level = strategy.position_avg_price*((100-stop_percentual)/100)

//Backtest Period
testStartYear = input(2009, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true
    
//Strategy

if testPeriod() and (not na(vrsi))
    if  (RuleMRSI==false) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==false)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==false) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

    if (RuleMRSI==true) and (Rulestop==true)
        if (vrsi<overBoughtRSI) and (close>longma) and (mrsi<overBoughtMRSI)
            strategy.entry("RsiLE", strategy.long , comment="Open")
            strategy.exit("RsiLE", stop = stop_level)
        if (close>shortma)
            strategy.close_all()

Больше