Estrategia de reversión cuantitativa basada en las IFM y los MA

El autor:¿ Qué pasa?, Fecha: 2023-12-27 14:42:16
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el indicador MFI para identificar zonas de sobrecompra y sobreventa combinadas con el MA para filtrar la dirección de inversión de precios.

Estrategia lógica

La estrategia aprovecha el indicador de las IFM para medir las condiciones de sobrecompra y sobreventa en el mercado. Cuando la IFM cae por debajo de 20 en la zona de sobreventa, indica que el activo está infravalorado y se está formando un fondo, lo que implica una señal larga. Cuando la IFM se eleva por encima de 80 en el área de sobrecompra, sugiere que el activo está sobrevalorado y es probable que se corrija más pronto, lo que desencadena una señal corta.

Para evitar inversiones falsas, la estrategia también emplea el indicador MA para determinar la dirección de la tendencia.

La lógica de negociación específica es:

  1. Cuando la IFM rompe por debajo de 20 en la zona de sobreventa y el cierre se sitúa por encima de la línea MA, se genera una señal de compra.

  2. Cuando la IFM supera los 80 para entrar en la zona de sobrecompra y el cierre rompe la línea MA, se activa una señal de venta.

Con la confirmación del doble indicador, la estrategia puede identificar de manera efectiva las oportunidades de reversión con señales de entrada fiables.

Ventajas

  1. La confirmación de dos indicadores evita errores y garantiza una alta fiabilidad de la señal.

  2. El uso de inversiones de sobrecompra/sobreventa es una técnica de negociación clásica y probada en el tiempo.

  3. Incorporar el filtrado de tendencias hace que las señales sean más precisas y confiables.

  4. Aplicable en diversos mercados con una gran adaptabilidad.

Los riesgos

  1. El mercado puede tener una tendencia persistente hacia arriba o hacia abajo que conduzca a un stop loss.

  2. Necesidad de tener cuidado con los riesgos sistemáticos en condiciones extremas de mercado que causan puntos de inversión perdidos.

  3. La alta frecuencia de las operaciones puede conducir a un aumento de los costes de transacción.

Mitigantes:

  1. Permitir un stop loss más amplio para dar más espacio a la estrategia.

  2. Aumentar el tamaño de las posiciones con precaución mientras se observan los gráficos de los marcos de tiempo más altos para detectar señales de riesgo sistémico.

  3. Optimice los parámetros para evitar intercambios innecesarios.

Oportunidades de mejora

  1. Optimizar los parámetros del MA para que coincidan con las características del instrumento de negociación.

  2. Ajuste fino de los niveles de sobrecompra/sobreventa basado en el sentimiento variable del mercado.

  3. Incorporar reglas de tamaño de posición para obtener ganancias más controladas.

Conclusión

Esta estrategia integra técnicas clásicas de análisis con métodos cuánticos modernos. Al aplicar rigurosamente confirmaciones de indicadores duales, demuestra una robusta adaptabilidad a través de varios instrumentos, lo que la convierte en una estrategia genérica recomendada a corto plazo.


/*backtest
start: 2023-12-19 00:00:00
end: 2023-12-26 00:00:00
period: 1m
basePeriod: 1m
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/
// © vikris

//@version=4
strategy("[VJ]Thor for MFI", overlay=true, calc_on_every_tick = false,pyramiding=0)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=1) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=0.5) * 0.01    

i_MFI = input(3, title="MFI Length")
OB=input(100, title="Overbought Level")
OS=input(0, title="Oversold Level")
barsizeThreshold=input(.5, step=.05, minval=.1, maxval=1, title="Bar Body Size, 1=No Wicks")
i_MAFilter = input(true, title="Use MA Trend Filter")
i_MALen = input(80, title="MA Length")
// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = true

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
 

MFI=mfi(close,i_MFI)
barsize=high-low
barbodysize=close>open?(open-close)*-1:(open-close)
shortwicksbar=barbodysize>barsize*barsizeThreshold
SMA=sma(close, i_MALen)
MAFilter=close > SMA



BUY = MFI[1] == OB and close > open and shortwicksbar and (i_MAFilter ? MAFilter : true)

SELL = MFI[1] == OS and close < open and shortwicksbar and (i_MAFilter ? not MAFilter : true) 

//Final Long/Short Condition
longCondition = BUY
shortCondition = SELL
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("Buy", strategy.long)
    strategy.exit("TP/SL", "Buy", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("Sell", strategy.short)
    strategy.exit("TP/SL", "Sell", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Más.