Esta estrategia utiliza principalmente el indicador de cruce de la línea media de la relación de pentagrama de la línea de sol (RB) para determinar la tendencia, y se opera con un stop loss y un stop loss para realizar operaciones automáticas. La línea media de la diferencia de pentagrama de la línea de sol en el nombre de la estrategia se refiere a la media de la diferencia de pentagrama de la línea de sol.
La estrategia se basa en el indicador RBI de Vitelot, que se calcula como una media móvil de la relación de penes en la línea K de días (RB). La forma de calcular RB es:
En la fórmula, RB es igual a la proporción de la longitud de la línea de Y a la longitud de la línea de K entera, tomando un valor positivo; RB de la línea negativa toma un valor negativo. El rango de valoración de RB está entre -1 y 1 .
El indicador RBI filtra el ruido a través del promedio móvil de RB, capturando las características esenciales del mercado. Cuando el indicador RBI atraviesa su línea de señal, genera una señal de compra; Cuando el indicador RBI atraviesa su línea de señal, genera una señal de venta.
Para filtrar las falsas señales de las fases de incertidumbre de múltiples cabezas, la estrategia también determina si el precio de cierre está por encima de la línea media de la EMA de 13 ciclos al atravesar la línea de señal en el indicador RBI, y si está por encima de la línea media de la EMA de 13 ciclos para generar una verdadera señal de compra, ejecuta la estrategia de múltiples cabezas. De manera similar, la estrategia de cabeza vacía solo se ejecuta cuando el precio de cierre está por debajo de la EMA de 13 ciclos.
La estrategia también establece un mecanismo de stop loss y stop-loss para controlar el riesgo y bloquear las ganancias. Una vez abierta la posición, el trail seguirá el número de puntos de stop-loss establecidos, al tiempo que establece un número fijo de puntos de stop-loss.
Los indicadores del RBI filtran la gran cantidad de ruido para capturar las características de las tendencias del mercado y evitar ser engañados por las falsas señales de los mercados inestables.
La combinación de filtración uniforme evita la aparición de señales falsas en períodos de incertidumbre de múltiples cabezas y reduce la pérdida de cabezas en blanco.
La configuración de stop loss ayuda a reducir el riesgo de pérdidas en posiciones individuales, al tiempo que bloquea las ganancias y mejora la rentabilidad en general.
La estrategia tiene pocos parámetros, es fácil de entender y es adecuada para operaciones automáticas.
La estrategia se basa solo en los indicadores del RBI, y si los indicadores en sí mismos producen una señal errónea, la estrategia en general también fallará.
La configuración incorrecta de los parámetros del indicador también puede causar una disminución en la calidad de la señal de negociación.
Cualquier indicador técnico puede fallar en determinadas condiciones de mercado y no evitar completamente las pérdidas.
Un punto de parada demasiado pequeño puede causar un alto de pérdidas demasiado frecuente; un punto de parada demasiado grande puede ampliar las pérdidas individuales.
La falta de control de las retiradas puede provocar el riesgo de que la cuenta explote.
Se pueden probar diferentes combinaciones de parámetros para optimizar los parámetros de los indicadores de RBI.
Se puede añadir otros indicadores auxiliares para filtrar y mejorar la calidad de la señal.
Los parámetros para el stop loss se pueden optimizar mediante entrenamiento de aprendizaje automático.
Se puede incorporar a la estrategia de gestión de fondos para controlar la posición global y la brecha de riesgo.
Se pueden probar diferentes estrategias para mantener posiciones, como mantener posiciones durante la noche o comerciar en línea corta.
La estrategia en general es una estrategia de seguimiento de tendencias más simple y directa. Para determinar la dirección de la tendencia, calcula el cruce de la línea media de la relación entre la línea de solvencia y el peso de la pluma, y al mismo tiempo agrega filtros de línea media y paradas de pérdida para controlar el riesgo, lo que puede evitar de manera efectiva las falsas señales de los mercados oscilantes.
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("RBI Backtest /w TSSL", shorttitle="RBI Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
// RBI:
// The EMA of the relative body (RB) of Japanese candles is evaluated.
// The RB of a candle (my definition) is simply the ratio of the body with respect to its full length
// and taken positive for bull candles and negative for bear candles:
// e.g. a bull "marubozo" has RB=1 a bear "marubozo" has RB=-1;
// a "doji" has RB=0.
// This simple indicator grasps the essence of the market by filtering out a great deal of noise.
//
// A flag can be selected to calculate its very basic binary version, where a bull candle counts as a one
// and a bear candle counts as a minus one.
//
// Enter (or exit) the market when the signal line crosses the base line.
// When the market is choppy we have a kind of alternating bear and bull candles so that
// RBI is FLAT and usually close to zero.
// Therefore avoid entering the market when RBI is FLAT and INSIDE the Exclusion level.
// The exclusion level is to be set by hand: go back in history and check when market was choppy; a good
// way to set it is to frame the oscillations of RBI whe price was choppy.
//
// RBI is more effective when an EMA of price is used as filtering. I found EMA(13) to be
// a decent filter: go long when base crosses signal upwards AND closing price is above EMA(13);
// same concept for going short.
//
// As any other indicator, use it with responsibility: THERE CAN'T BE A SINGLE MAGIC INDICATOR winning
// all trades.
//
// Above all, have fun.
//
// Vitelot/Yanez/Vts March 31, 2019
par1 = input(5, title="MA1 Period")
par2 = input(5, title="Signal Period")
exclusion = input(0.2, title="Exclusion level")
useBin = input(false, title="Calculate the binary version")
treshold_long = input(0, title="Treshold Long")
treshold_short = input(0, title="Treshold Short")
fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=120)
trailTP = input(title="TP Trigger", defval=1)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 2020, title = "To Year", minval = 2017)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
startTimeOk() => true // create function "within window of time" if statement true
ynSimple(t) =>
s = (close>open)? 1: -1
ema(sum(s,t),t)
ynRel(t) =>
s = (close-open)/(high-low)
ema(sum(s,t),t)
yn = useBin? ynSimple(par1): ynRel(par1)
sig = ema(yn,par2)
plot(yn, color=aqua, title="RBI", linewidth=3, transp=0)
plot(sig, color=orange, title="Signal", linewidth=2, transp=0)
hline(0, color=white, title="Zero level", editable=false)
hline(exclusion, color=yellow, title="Exclusion level +", editable=true, linestyle=line)
hline( 0-exclusion, color=yellow, title="Exclusion level -", editable=true, linestyle=line)
long = crossover(yn,sig) and yn < treshold_long
short = crossover(sig,yn) and yn > treshold_short
// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)