
Una estrategia de inversión de la red de la media de la intención es una estrategia de inversión de la intención basada en la media móvil. La estrategia utiliza la media móvil de los dos índices como base de cálculo y agrega varias bandas de la red de la media de la intención por encima y por debajo de ella.
La estrategia utiliza la media móvil de doble índice (DEMA) como indicador básico. La media móvil de doble índice es una media móvil de alta sensibilidad a los cambios de precio. Sobre su base, la estrategia agrega varias bandas de precios en los lados superior e inferior, respectivamente, para formar una red de zonas de red de línea uniforme.
La estrategia abre una posición baja cuando el precio se acerca a la banda de cobertura superior; cuando el precio baja y toca la banda de cobertura inferior, la estrategia abre más posiciones. Cada vez que se toca una nueva banda de precios, se aumenta la posición.
La estrategia capta la hipervolatilidad de los precios a través de la zona de enlace y se retira de la ganancia cuando llega la reversión, logrando el objetivo de negociación de compra y venta. Se aplica a los ciclos de mercado con características de regreso a la media evidente, como las monedas digitales como Bitcoin.
Se puede reducir el riesgo de la ampliación adecuada de la zona de la red de paquetes, aumentando la sensibilidad a los cambios en los precios de desencadenamiento. Al mismo tiempo, se puede ajustar el parámetro de longitud de la línea media móvil para adaptarse a las diferentes circunstancias del ciclo.
La estrategia puede ser optimizada en los siguientes aspectos:
Optimización de algoritmos de medias móviles. Se puede probar el efecto de diferentes tipos de indicadores de medias móviles.
Ajuste el parámetro de longitud media de la línea. Reducir los ciclos puede mejorar la captura de cambios de precios a corto plazo, pero también puede aumentar el ruido de las transacciones.
Optimice los parámetros de la red de enlaces. Puede probar diferentes configuraciones porcentuales para encontrar la combinación óptima de parámetros.
Aumentar las estrategias de stop loss. Configurar un stop loss móvil o un stop loss de retiro para controlar eficazmente las pérdidas individuales.
Aumentar las condiciones de filtración. En combinación con otras señales de indicadores, evitar la invalidación de la posición en circunstancias irracionales.
La estrategia de mediana de la red de inversiones con intención de invertir captura eficazmente las oportunidades de reversión de precios mediante la construcción de un canal de precios mediano. Puede ajustar los parámetros con flexibilidad y se aplica a diferentes entornos de mercado. La estrategia tiene un costo de transacción bajo y un alto rendimiento, y es una estrategia de comercio cuantitativa recomendable.
/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )
// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN
// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders")
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")
// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
if(ma_type == '1. SMA')
ta.sma(src, ma_window)
if(ma_type == '2. EMA')
ta.ema(src, ma_window)
if(ma_type == '3. RMA')
ta.rma(src, ma_window)
if(ma_type == '4. DEMA')
2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)
ma_base = ma_funct()
ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na
ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na
// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))
if use_short
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))
strategy.exit('close', limit=ma_base)
// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)
ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)
ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)