На основе классической стратегии Ларри Коннорса


Дата создания: 2023-10-27 16:32:19 Последнее изменение: 2023-10-27 16:32:19
Копировать: 1 Количество просмотров: 747
1
Подписаться
1702
Подписчики

На основе классической стратегии Ларри Коннорса

Обзор

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

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

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

  2. Для определения направления большого тренда используйте длинноциклическую среднюю ((200 циклов)). Позиции следует рассматривать только тогда, когда цена выше длинноциклической средней.

  3. Откройте позицию по рыночной цене, когда цена выше среднесрочной, а RSI ниже отметки пробы.

  4. Когда цены поднимаются выше средней короткого цикла (< 5 циклов), они останавливаются на одном уровне с рыночной ценой.

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

  • RSI параметры: длина цикла, местоположение линий перекупа и перепродажи.

  • Среднелинейный параметр: длинный и короткий среднелинейный цикл.

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

  • Параметры сдерживания убытков: можно выбрать, добавлять ли сдерживание убытков.

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

  1. Использование двойной равнолинейной системы позволяет эффективно отслеживать долголинейные тренды.

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

  3. Гибкость в настройках, оптимизация для различных параметров.

  4. Это не так просто, как думать.

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

  1. Двойная равнолинейная стратегия чувствительна к параметрам и требует оптимизации параметров для достижения оптимального эффекта.

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

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

  4. Риск повторной совместимости данных. Необходимо проверять устойчивость стратегии на протяжении длительного периода времени на нескольких рынках.

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

  1. Оптимизируйте комбинацию RSI и средней линии, чтобы найти оптимальные параметры.

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

  3. Присоединение к отслеживанию стоп-лосса для контроля за отдельными потерями. Необходимо оценить влияние установки стоп-лосса на общую прибыль.

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

  5. Проверка устойчивости стратегии на более длительных временных периодах (например, на уровне солнечных лучей).

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

Эта стратегия объединяет в себе отслеживание двойной равномерной тенденции и особенности 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()