Esta estrategia se basa en una clásica estrategia de negociación a corto plazo, en la que se forman varias líneas de sol seguidas, y las líneas negativas se quedan vacías; después de varias líneas negativas consecutivas, aparecen más líneas de sol. Concretamente, la estrategia detecta la altura y el color de la entidad de las líneas K, para determinar si aparecen varias líneas K consecutivas del mismo color, y luego, a través del indicador RVI, para determinar si se invierte o no. En general, esta es una estrategia que utiliza las características de las líneas K consecutivas a corto plazo en combinación con el indicador RVI para realizar operaciones de inversión a corto plazo.
La lógica central de esta estrategia incluye principalmente lo siguiente:
Detecta si la altura de la entidad de la línea K supera el umbral de altura mínima para filtrar las fluctuaciones de la línea y la línea negativa demasiado pequeñas.
Si las dos primeras líneas de K son iguales, se puede generar una oportunidad de reversión de precios a corto plazo.
Después de determinar que las dos líneas K anteriores son del mismo color, si la línea K actual es de un color diferente al de las dos líneas K anteriores, se genera una señal de transacción. Es decir, una línea de sol aparece después de dos líneas de sol consecutivas; una línea de sol aparece después de dos líneas de sol consecutivas.
Después de la entrada de la operación, la dirección de la posición se determina a través del cruce de varios espacios del indicador RVI. El indicador RVI puede determinar el punto de inflexión a corto plazo.
En general, la estrategia integra las características de la línea K y los indicadores RVI para formar un sistema de negociación de reversión a corto plazo. Se aprovechan las oportunidades de reversión para obtener ganancias cuando se produce un comportamiento anormal de precios a corto plazo.
La estrategia tiene las siguientes ventajas:
Capturar las anomalías de los precios a corto plazo. Cuando se presentan múltiples líneas positivas o múltiples líneas negativas, indica que los precios se presentan con anomalías a corto plazo, y se espera obtener un mejor rendimiento al hacer operaciones en reversa.
Los indicadores RVI ayudan a la determinación. Los indicadores RVI pueden determinar con eficacia los puntos de inflexión a corto plazo, se complementan con las características de la línea K y mejoran la estabilidad del sistema.
La frecuencia de operación es más alta y es adecuada para operaciones de línea corta. Las situaciones en las que las líneas K consecutivas son del mismo color son frecuentes, y en combinación con el indicador RVI, esta estrategia puede proporcionar más oportunidades de negociación.
El riesgo es controlado. Se utiliza un número fijo de días de negociación y se establece un Stop Loss.
La lógica es clara y sencilla. Es fácil de entender e implementar, y la operación en el disco duro no es muy difícil.
La estrategia también tiene algunos riesgos a tener en cuenta:
Las inversiones a corto plazo no siempre son válidas. En caso de una tendencia continua, las señales de inversiones a corto plazo pueden fallar y generar una entrada errónea.
El indicador RVI puede emitir una señal errónea. El indicador RVI también puede fallar debido a circunstancias especiales.
La configuración incorrecta del parón de pérdidas puede ampliar las pérdidas. Se necesita una configuración razonable del punto de parada de pérdidas.
El estándar de las líneas K consecutivas de un mismo color es demasiado rígido. Se puede considerar la optimización de la proporción de líneas K de un mismo color que aparecen en el X% de las líneas K de raíz N.
El número de manos fijas no controla el margen de riesgo general, y las operaciones de las grandes manos son propensas a explotar.
La estrategia también puede ser optimizada en los siguientes aspectos:
Optimización de la lógica de determinación homogénea de la línea K continua, utilizando métodos estadísticos en lugar de raíces fijas rígidas.
Optimización de los parámetros RVI para encontrar la combinación óptima de parámetros.
La estrategia móvil de trailing stop loss se puede agregar en función de las fluctuaciones del mercado.
Añadir un módulo de gestión de posiciones para ajustar dinámicamente el número de transacciones en función del uso de fondos.
Aumentar las condiciones de filtración y mejorar la estabilidad del sistema mediante una combinación de indicadores como canales, tendencias y otros.
Optimización de parámetros para diferentes variedades y mejora de la adaptabilidad.
Introducción de aprendizaje automático para entrenamiento de datos históricos y optimización dinámica de los parámetros del sistema.
Esta estrategia en su conjunto es una típica estrategia de inversión a corto plazo basada en la anomalía de la línea K a corto plazo con el indicador RVI. Tiene ciertas ventajas, pero también existe un posible riesgo. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más mediante la optimización continua de los parámetros y la creación de un sistema más riguroso.
/*backtest
start: 2022-10-07 00:00:00
end: 2023-10-07 00:00:00
period: 3d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules.
//
//This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€
//LOGIC:
//- LONG ENTRY when previous candle is bear
//- LONG EXIT: RVI > signal line
//- SHORT ENTRY when previous candle is bull
//- SHORT EXIT: RVI < signal line
//
//NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script
//
//Take profit = no
//Stop loss = no
// strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)
//INPUTS
src = input(close, "source")
min_body_height = input(42, "Minimum body height", type=input.float)
//bars_back=input(2, "Consecutive bars of same color")
rvi_period = input(55, "RVI period")
//CALCULATIONS_____________________________
//candle color
body_height = abs(open - close) / syminfo.mintick
body_color = open > close ? color.red : color.green
//da migliorare for i=0 to bars_back-1
//RVI -------- thanks to hecate
p = rvi_period
CO = close - open
HL = high - low
value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6
num = sum(value1, p)
denom = sum(value2, p)
RVI = denom != 0 ? num / denom : 0
RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6
plot(RVI, color=color.green, style=plot.style_line, linewidth=1)
plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1)
//----------------------------------
longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and
body_height[0] >= min_body_height and body_color[0] == color.red and
RVIsig > RVI
exitLong = RVI > RVIsig
shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and
body_height[0] >= min_body_height and body_color[0] == color.green and
RVIsig < RVI
exitShort = RVI < RVIsig
if longCondition and strategy.opentrades == 0
strategy.entry("Long", strategy.long)
strategy.close("Long", when=exitLong)
if shortCondition and strategy.opentrades == 0
strategy.entry("Short", strategy.short)
strategy.close("Short", when=exitShort)
// === Backtesting Dates === thanks to Trost
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(7, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()