Цикл тренда Schaff со стратегией перекрестки двойных скользящих средних

Автор:Чао Чжан, Дата: 2023-12-12 17:43:19
Тэги:

img

Обзор

Эта стратегия называется Schaff Trend Cycle with Double Moving Average Crossover Strategy. Основная идея заключается в определении длинных и коротких позиций на основе индикатора Schaff Trend Cycle (STC) и двойного пересечения скользящей средней. В частности, когда STC выходит из перекупленных или перепроданных районов, цена выше быстрой экспоненциальной скользящей средней, а быстрая EMA выше медленной EMA, открывается длинная позиция.

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

Стратегия основывается на двух технических показателях:

  1. Индикатор тренда: STC индикатор для определения направления тренда. STC включает в себя MACD, Stochastic и STC индикатор линии.

  2. Перекрещение скользящей средней: Быстрая простая скользящая средняя (период 35 по умолчанию) пересекается выше/ниже медленной SMA (период 200 по умолчанию).

Логика торговых сигналов определяется следующим образом:

  1. Длинный сигнал: STC прерывается выше линии 25, быстрая SMA находится выше медленной SMA, а цена закрытия выше быстрой SMA.

  2. Короткий сигнал: STC прерывается ниже линии 75, быстрая SMA ниже медленной SMA, а цена закрытия ниже быстрой SMA.

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

Преимущества этой стратегии включают:

  1. Надежные торговые сигналы от сочетания индикаторов тренда и скользящей средней.

  2. Периоды скользящих средних можно настраивать.

  3. Контролируемый риск. STC определяет уровни перекупа/перепродажи, чтобы избежать покупки вершин и продажи дна. Целевые остановки устанавливают диапазон прибыли/убытка в 400 пунктов.

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

Некоторые риски следует учитывать:

  1. Потенциал ложного выхода STC должен быть подтвержден ценовым движением.

  2. Больше ложных сигналов от пересечений МА. Требуется настройка периодов МА.

  3. Ограничивает пространство для открытых позиций.

  4. При торговле на маржи ФРС не используется риск спреда.

Оптимизация

Возможные пути оптимизации включают:

  1. Корректировать параметры перекупленности/перепроданности по STC.

  2. Оптимизировать периоды MA для повышения надежности перекрестного сигнала.

  3. Добавьте дополнительные фильтры, такие как полосы Боллинджера, чтобы уменьшить ложные сделки.

  4. Внедрить двунаправленную логику торговли для увеличения мощности.

  5. Добавьте логику остановки потери для контроля потери по сделке.

Заключение

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


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")

fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.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] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)

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

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

fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)

ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)

bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1

if (bullbuy)
    strategy.entry("Riposte", strategy.long, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

if (bearsell)
    strategy.entry("Riposte", strategy.short, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

//plotshape(bullbuy,  title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell,  title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
















Больше