
El sistema de punto de inflexión de la oscilación de la tendencia es una estrategia de seguimiento de la tendencia que utiliza los promedios móviles, el indicador CCI y el indicador de tendencia súper para identificar la tendencia y entrar en juego en el momento de la desviación. Puede confirmar la dirección de la tendencia y proporcionar una señal de entrada en el momento de la desviación.
La estrategia utiliza un EMA de 21 períodos como promedio móvil a corto plazo y un EMA de 55 períodos como promedio móvil a largo plazo. Un EMA de 21 días por encima de un EMA de 55 días indica que se encuentra actualmente en una tendencia al alza y un EMA de 21 días por debajo de un EMA de 55 días indica que se encuentra actualmente en una tendencia a la baja.
El indicador CCI puede mostrar si el precio ha alcanzado un nivel extremo. Cuando el CCI alcanza los 100 o -100 por defecto, es una señal de primer nivel, 140/-140 es una señal de segundo nivel, y 180/-180 es una señal de tercer nivel. Esto indica que actualmente puede estar sobrecomprado o sobrevendido.
El indicador de tendencia súper puede determinar la dirección de la tendencia específica. Combina la amplitud de fluctuación real promedio para determinar los puntos de parada y entrada de la tendencia alcista y la tendencia bajista.
Se puede hacer una entrada en blanco cuando el EMA del día 21 está por encima del EMA del día 55 y el CCI alcanza un nivel bajo, lo que indica que se encuentra en la zona de sobreventa. Cuando el EMA del día 21 está por debajo del EMA del día 55 y el CCI alcanza un nivel alto, lo que indica que se encuentra en la zona de sobreventa, se puede hacer una entrada en blanco.
La estrategia combina varios indicadores para determinar la tendencia y las situaciones de sobreventa y sobreventa para filtrar eficazmente las brechas falsas. El uso de paradas fijas permite obtener un riesgo de retorno estable. El seguimiento de la tendencia de las operaciones puede obtener una mayor tasa de éxito.
La estrategia necesita optimización de los parámetros de las variedades de negociación, ya que la configuración de los parámetros de las diferentes variedades puede afectar la eficacia de la estrategia. La configuración de los parámetros de stop loss es más amplia y no se puede ajustar a los diferentes mercados. Los parámetros de stop loss fijos no pueden ajustar la ganancia y la pérdida según la volatilidad del mercado.
Se puede probar la configuración de parámetros de diferentes variedades de operaciones, optimizar el ciclo de las medias móviles, el ciclo de ATR, el multiplicador de ATR, etc. Se puede considerar cambiar el stop loss a un stop loss o trailing stop ATR para adaptarse a la fluctuación del mercado. Se puede probar el stop loss a un stop loss de fluctuación y establecer el objetivo de ganancias en función del valor de ATR. Se pueden agregar condiciones de filtrado para determinar la intensidad de la tendencia cuando aparece la señal CCI y evitar ser bloqueado en un mercado convulso. Se puede aumentar el indicador de determinación de la intensidad de la tendencia cuantitativa y evitar el error de determinación de la tendencia.
El sistema de puntos de inflexión de la oscilación de la tendencia combina los promedios móviles, el indicador CCI y la supertrend para identificar la dirección de la tendencia y las situaciones de sobreventa y sobreventa para entrar en juego cuando la tendencia se desvía. Tiene una mayor estabilidad y tasa de ganancias, pero requiere una mayor optimización de los mecanismos de stop loss, stop loss y juicio de tendencia para que los parámetros de la estrategia se adapten a diferentes variedades y entornos del mercado. En general, la estrategia combina varios indicadores para capturar oportunidades de tendencia de manera simple y directa.
/*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++")