Шафф тренд цикл импульс в соответствии со стратегией

Автор:Чао Чжан, Дата: 2023-11-01 16:08:35
Тэги:

img

Обзор

Эта стратегия основана на индикаторе Schaff Trend Cycle, в сочетании с принципами перекупленности и перепроданности Stoch RSI, для определения и отслеживания тенденций с использованием показателей импульса. Она длится, когда цена выходит из перепроданного региона в перепроданный регион, и становится короткой, когда цена выходит из перепроданного региона в перепроданный регион. Стратегия динамически корректирует позиции, фиксируя изменения ценовых тенденций.

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

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

Преимущества

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

Риски

    1. STC чувствителен к параметрам. Различные монеты и временные рамки требуют настройки параметров в соответствии с характеристиками рынка.
    1. Стратегии выхода склонны к ловушкам, требующие остановок для контроля риска.
    1. Низкая ликвидность ложных прорывов может генерировать плохие сигналы, требующие фильтра объема.
    1. Только STC рискует повлиять на результат, необходимо подтверждение с использованием других факторов.
    1. Ключевые уровни поддержки/сопротивления следует следить, чтобы избежать плохих сигналов.

Возможности для расширения

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

Заключение

Стратегия цикла трендов Шаффа определяет перекупленность/перепроданность с помощью показателей импульса для определения краткосрочных изменений тренда цен. Хотя она проста и регулируема, она рискует попасть в ловушку. Подтверждение и остановки помогают оптимизировать сильные тенденции.


/*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)


Больше