Тенденционная система с переломными точками - это стратегия отслеживания тренда, которая использует движущиеся средние, CCI и сверхтенденционные индикаторы для идентификации тренда, который входит в игру при обратном вызове. Она может определить направление тренда и подать сигнал входа при отзыве.
Эта стратегия использует 21-циклическую ЭМА как короткую, а 55-циклическую ЭМА как длительную. 21-циклическая ЭМА выше 55-циклической ЭМА показывает, что она находится в текущем тренде на подъем, а 21-циклическая ЭМА ниже 55-циклической ЭМА показывает, что она находится в текущем тренде на падение.
CCI может показать, достиг ли цена крайнего уровня. Когда CCI достигает 100 или 100 по умолчанию, это сигнал первого уровня, 140/-140 - сигнал второго уровня, 180/-180 - сигнал третьего уровня. Это означает, что в настоящее время может быть состояние перекупки или перепродажи.
Сверхтенденционный индикатор позволяет определить направление конкретного тренда. Он сочетает в себе средние истинные значения колебаний, чтобы определить стоп-лосс и вход в рост и спад.
При появлении 21-дневной ЭМА выше 55-дневной ЭМА и достижении CCI низких значений (что указывает на то, что она находится в зоне перепродажи) можно делать большие входы. При появлении 21-дневной ЭМА ниже 55-дневной ЭМА и достижении CCI высоких значений (что указывает на то, что она находится в зоне перепродажи) можно делать пустые входы.
Эта стратегия, в сочетании с различными показателями, определяет тенденции и перепродажи, что позволяет эффективно отфильтровывать ложные прорывы. Применение фиксированных препятствий обеспечивает стабильное соотношение риска и прибыли. Следование тренду позволяет получить более высокий процент выигрыша.
Стратегия требует оптимизации параметров для различных видов торговли, различные параметры для различных видов торговли влияют на эффективность стратегии. Установка стоп-потери довольно обширна и не может быть адаптирована к различным рынкам. Фиксированный стоп-поток не может регулировать уровень прибыли и убытков в зависимости от степени волатильности рынка. CCI может создавать ложные сигналы. Необходимо дальнейшее определение силы трендовых колебаний, чтобы избежать повторной торговли в бурном тренде.
Можно протестировать параметровые настройки различных торговых сортов, оптимизируя такие параметры, как циклы движущихся средних, циклы ATR, умножение ATR. Можно рассмотреть возможность изменения стоп-стоп в ATR или trailing stop для адаптации к рыночным колебаниям. Можно протестировать стоп-стоп в ATR, чтобы установить целевую прибыль в соответствии с значениями ATR. Можно увеличить фильтрационные условия, чтобы определить силу тренда при появлении сигналов CCI, чтобы избежать фиксированности в нестабильном рынке. Можно увеличить количественный показатель трендоспособности, чтобы избежать ошибочного определения тренда.
Тенденционная система с переломными точками включает в себя движущиеся средние, CCI и супертенденции для определения направления тренда и перепродажи, чтобы войти в момент реванша. Она обладает более высокой стабильностью и выигрышными показателями, но требует дальнейшей оптимизации механизмов остановки, остановки и определения тренда, чтобы параметры стратегии могли быть адаптированы к различным сортам и рыночным условиям. В целом, стратегия, которая сочетает в себе несколько индикаторов в простом и прямом способе, для захвата трендовых возможностей, заслуживает дальнейшего изучения и применения.
/*backtest start: 2022-10-16 00:00:00 end: 2023-01-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © greenmask9 //@version=4 strategy("Oath", overlay=true) // 21 EMA emalength = input(21, title="Short EMA") emashort = ema(close, emalength) // 55 EMA emalength2 = input(55, title="Long EMA") ema = ema(close, emalength2) //CCI calculation and inputs lengthcci = input(20, minval=1, title="Overbought/sold detector period") src = input(close, title="Overbought/sold detector source") ma = sma(src, lengthcci) ccivalue = (src - ma) / (0.015 * dev(src, lengthcci)) //CCI plotting ccioverbought = input(defval=100, title="Overbought level 1") ccioverbought2 = input(defval=140, title="Overbought level 2") ccioverbought3 = input(defval=180, title="Overbought level 3") ccioversold = input(defval=-100, title="Oversold level 1") ccioversold2 = input(defval=-140, title="Oversold level 2") ccioversold3 = input(defval=-180, title="Oversold level 3") //cciOB = (ccivalue >= ccioverbought and ccivalue < ccioverbought2) //cciOS = (ccivalue <= ccioversold and ccivalue > ccioversold2) //cciOB2 = (ccivalue >= ccioverbought2 and ccivalue < ccioverbought3) //cciOS2 = (ccivalue <= ccioversold and ccivalue > ccioversold3) //cciOB3 = (ccivalue >= ccioverbought3) //cciOS3 = (ccivalue <= ccioversold3) //Supertrend length = input(title="ATR Period", type=input.integer, defval=55) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=5.0) wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=true) illuminate = input(title="Illuminate Trend", type=input.bool, defval=false) atr = mult * atr(length) longStop = hl2 - atr longStopPrev = nz(longStop[1], longStop) longStop := (wicks ? low[1] : close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = hl2 + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir //entries uptrend = emashort>ema and dir == 1 upsignal = ccivalue<=ccioversold and ccivalue>ccioversold2 upsignal2 = ccivalue<=ccioversold2 and ccivalue>ccioversold3 upsignal3 = ccivalue<=ccioversold3 downtrend = emashort<ema and dir == -1 downsignal = ccivalue>=ccioverbought and ccivalue<ccioverbought2 downsignal2 = ccivalue>=ccioverbought2 and ccivalue<ccioverbought3 downsignal3 = ccivalue>=ccioverbought3 //adapts to the current bar, I need to save the bars number when the condition for buy was true, static number is spread spread = input (0.00020, title="Spread") upstoploss = longStop - spread downstoploss = shortStop + spread strategy.initial_capital = 50000 ordersize=floor(strategy.initial_capital/close) testlong = input(title="Test longs", type=input.bool, defval=true) testshort = input(title="Test shorts", type=input.bool, defval=true) //new degree = input(title="Test level 1 overbought/sold levels", type=input.bool, defval=true) degree2 = input(title="Test level 2 overbought/sold levels", type=input.bool, defval=false) degree3 = input(title="Test level 3 overbought/sold levels", type=input.bool, defval=false) statictarget = input(title="Use static target", type=input.bool, defval=true) statictargetvalue = input(title="Static target in pips", type=input.integer, defval=400) //timetrade = input(title="Open trades only withing specified time", type=input.bool, defval=true) //timtrade = input() //přidat možnost TP podle ATR a sl podle ATR buy1 = uptrend and upsignal and strategy.opentrades==0 and testlong and degree x1 = barssince (buy1) if (buy1) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath1", strategy.long, ordersize) strategy.exit( "Oath1 Close", from_entry="Oath1" , profit=statictargetvalue,stop=upstoploss[x1]) buy2 = uptrend and upsignal2 and strategy.opentrades==0 and testlong and degree2 x2 = barssince (buy2) if (buy2) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath2", strategy.long, ordersize) strategy.exit( "Oath2 Close", from_entry="Oath2" , profit=statictargetvalue,stop=upstoploss[x2]) buy3 = uptrend and upsignal3 and strategy.opentrades==0 and testlong and degree3 x3 = barssince (buy3) if (buy3) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath3", strategy.long, ordersize) strategy.exit( "Oath3 Close", from_entry="Oath3" , profit=statictargetvalue,stop=upstoploss[x3]) sell1 = downtrend and downsignal and strategy.opentrades==0 and testshort and degree y1 = barssince (sell1) if (sell1) if (statictarget) strategy.entry("Oath1.s", strategy.short, ordersize) strategy.exit( "Oath1 Close", from_entry="Oath1.s" , profit=statictargetvalue,stop=downstoploss[y1]) sell2 = downtrend and downsignal2 and strategy.opentrades==0 and testshort and degree2 y2 = barssince (sell2) if (sell2) if (statictarget) strategy.entry("Oath2.s", strategy.short, ordersize) strategy.exit( "Oath2 Close", from_entry="Oath2.s" , profit=statictargetvalue,stop=downstoploss[y2]) sell3 = downtrend and downsignal3 and strategy.opentrades==0 and testshort and degree3 y3 = barssince (sell3) if (sell3) if (statictarget) strategy.entry("Oath3.s", strategy.short, ordersize) strategy.exit( "Oath3 Close", from_entry="Oath3.s" , profit=statictargetvalue,stop=downstoploss[y3]) plotshape(uptrend and upsignal and degree, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up") plotshape(downtrend and downsignal and degree, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down") plotshape(uptrend and upsignal2 and degree2, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up+") plotshape(downtrend and downsignal2 and degree2, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down+") plotshape(uptrend and upsignal3 and degree3, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up++") plotshape(downtrend and downsignal3 and degree3, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down++")