Стратегия Schaff Trend Cycle с последующим импульсом


Дата создания: 2023-11-01 16:08:35 Последнее изменение: 2023-11-01 16:08:35
Копировать: 2 Количество просмотров: 855
1
Подписаться
1617
Подписчики

Стратегия Schaff Trend Cycle с последующим импульсом

Обзор

Эта стратегия основана на циклическом индикаторе тренда Schaff, в сочетании с принципом перекупа и перепродажи Stoch RSI, для определения и отслеживания тренда с помощью динамического индикатора. Когда цена пробивается из зоны перепродажи в зону перекупа, делают больше; когда цена падает из зоны перекупа в зону перепродажи, делают больше.

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

    1. Вычислить MACD, где Fast Length по умолчанию 23 и Slow Length по умолчанию 50. MACD отражает разницу между краткосрочными и долгосрочными движущимися средними, используемыми для определения динамики цен.
    1. MACD обрабатывается Stoch RSI, чтобы получить значение K, где Cycle Length имеет значение 10, отражающее перекуп и перепродажу динамического индикатора MACD.
    1. Взвешенное передвижное среднее для K-значений, образующее D-значение, где 1st %D Length по умолчанию 3, исключает шум в K-значениях.
    1. Строх RSI обрабатывает значение D снова, образуя начальное значение STC, где 2nd %D Length имеет значение 3, образуя точный сигнал о перекупке.
    1. Взвешенное скользящее среднее для начального значения STC, полученного в конечном итоге, в диапазоне 0-100 ◦ STC выше 75 - зона перекупа, ниже 25 - зона перепродажи ◦
    1. Когда STC снизу вверх превышает 25, делайте больше; когда STC снизу вверх превышает 75, делайте пустоту.

Стратегические преимущества

    1. Индекс STC, в сочетании с конструкцией RSI Stoch, позволяет четко идентифицировать зоны перекупа и перепродажи, создавая более сильный сигнал тренда.
    1. С помощью двойного фильтра Stoch RSI можно эффективно отфильтровывать ложные прорывы.
    1. STC формирует стандартизированный диапазон от 0 до 100, что может способствовать формированию механизированного торгового сигнала.
    1. Стратегический отсчет позволяет визуализировать знаки прорыва и текстовые всплывающие сигналы, позволяющие четко и интуитивно улавливать торговые возможности.
    1. Стратегия использует оптимизированный набор параметров, чтобы эффективно контролировать бесполезные сделки и избегать чрезмерной чувствительности.

Стратегический риск

    1. STC-индикаторы чувствительны к параметрам, которые необходимо адаптировать к различным валютам и временным периодам, чтобы приспособить их к рыночным особенностям.
    1. Поскольку взломные стратегии легко поддаются обману, необходимо установить стоп-лосс, чтобы контролировать риски.
    1. Фальшивые прорывы в низколиквидных рынках могут вызвать ошибочные сигналы, которые необходимо отфильтровывать с помощью таких показателей, как комбинированный трафик.
    1. Эта стратегия основана только на показателях STC и может быть использована в сочетании с другими факторами, чтобы определить тенденцию подтверждения и избежать обратного остановки убытков.
    1. Необходимо обращать внимание на ключевые поддерживающие сопротивления, чтобы избежать ошибочного сигнала в этом районе.

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

    1. Оптимизация комбинации параметров MACD для различных циклов и валют.
    1. Оптимизация K-значений и D-значений параметров Stoch RSI, сглаживание STC-кривой.
    1. Комбинируя показатели оборота, избегайте ложных прорывов на низколиквидных рынках.
    1. Добавление других показателей, подтверждающих трендовые сигналы, например, пояса Брин.
    1. Добавление механизмов остановки убытков, таких как мобильная остановка или остановка ATR.
    1. Настройка входа в позицию, например, обратный вход после прорыва, чтобы обеспечить подтверждение тренда.

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

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

Исходный код стратегии
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// Copyright (c) 2018-present, Alex Orekhov (everget)
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("Schaff Trend Cycle", shorttitle="STC Backtest", overlay=true)

fastLength = input(title="MACD Fast Length",  defval=23)
slowLength = input(title="MACD Slow Length",  defval=50)
cycleLength = input(title="Cycle Length",  defval=10)
d1Length = input(title="1st %D Length",  defval=3)
d2Length = input(title="2nd %D Length",  defval=3)
src = input(title="Source",  defval=close)
highlightBreakouts = input(title="Highlight Breakouts ?", type=bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)

k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))

d = ema(k, d1Length)

kd = nz(fixnan(stoch(d, d, d, cycleLength)))

stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc

//stcColor = not highlightBreakouts ? (stc > stc[1] ? green : red) : #ff3013
//stcPlot = plot(stc, title="STC", color=stcColor, transp=0)

upper = input(75, defval=75)
lower = input(25, defval=25)

transparent = color(white, 100)

upperLevel = plot(upper, title="Upper", color=gray)
// hline(50, title="Middle", linestyle=dotted)
lowerLevel = plot(lower, title="Lower", color=gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? red : transparent

//fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
//fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)

long =  crossover(stc, lower) ? lower : na
short = crossunder(stc, upper) ? upper : na

long_filt = long and not short
short_filt = short and not long

prev = 0
prev := long_filt ? 1 : short_filt ? -1 : prev[1]

long_final = long_filt and prev[1] == -1
short_final = short_filt and prev[1] == 1

strategy.entry("long", strategy.long, when = long )
strategy.entry("short", strategy.short, when = short)

plotshape(crossover(stc, lower) ? lower : na, title="Crossover", location=location.absolute, style=shape.circle, size=size.tiny, color=green, transp=0)
plotshape(crossunder(stc, upper) ? upper : na, title="Crossunder", location=location.absolute, style=shape.circle, size=size.tiny, color=red, transp=0)

alertcondition(long_final, "Long", message="Long")
alertcondition(short_final,"Short", message="Short")

plotshape(long_final, style=shape.arrowup, text="Long", color=green, location=location.belowbar)
plotshape(short_final, style=shape.arrowdown, text="Short", color=red, location=location.abovebar)