Estrategia de reversión cuantitativa basada en MFI y MA


Fecha de creación: 2023-12-27 14:42:16 Última modificación: 2023-12-27 14:42:16
Copiar: 5 Número de Visitas: 761
1
Seguir
1623
Seguidores

Estrategia de reversión cuantitativa basada en MFI y MA

Descripción general

La estrategia es una estrategia de negociación en línea corta que utiliza el indicador MFI para identificar zonas de sobreventa y sobrecompra, combinada con filtros MA para determinar la dirección de reversión de los precios. Puede ser efectiva en mercados como acciones, divisas, productos básicos y criptomonedas.

Principio de estrategia

La estrategia utiliza el indicador MFI para determinar el fenómeno de sobreventa y sobrecompra en el mercado. Cuando las MFI entran en la zona de sobreventa por debajo de 20, indican la zona inferior, el valor está subestimado, y entonces se ve al alza; cuando las MFI entran en la zona de sobrecompra por encima de 80, indican la zona superior, el activo está sobrevalorado, y entonces baja.

Para filtrar las falsas inversiones, la estrategia también introduce un indicador de MA para determinar la dirección de la tendencia de los precios. La señal de negociación se genera solo cuando los precios se encuentran por encima o por debajo de la línea media de la MA al mismo tiempo que la inversión de las MFI.

La lógica de la transacción es la siguiente:

  1. MFI rompió por debajo de 20 y entró en zona de sobreventa, al mismo tiempo que el precio de cierre subió a la línea media MA y generó una señal de compra
  2. Los MFI superan los 80 y entran en zona de sobrecompra, mientras que el cierre cae por debajo de la línea media de la MA, generando una señal de venta

De esta manera, mediante el filtro de doble indicador, se puede identificar eficazmente la oportunidad de reversión, y la señal de entrada es más confiable.

Ventajas estratégicas

  1. Confirmación con doble indicador, evita falsas brechas, la señal es de alta fiabilidad
  2. La inversión de zona de sobreventa es una técnica de negociación clásica y efectiva
  3. Combinado con filtros de tendencia, hace que la señal sea más precisa y confiable
  4. Adaptable a varios mercados y muy flexible

Riesgo estratégico

  1. El mercado puede seguir subiendo o bajando durante un largo período de tiempo, lo que provoca un alto de pérdidas
  2. Necesidad de prestar atención a los riesgos sistémicos para evitar que las tendencias extremas produzcan errores de giro
  3. La frecuencia de las transacciones puede ser alta y se debe tener en cuenta el control de los costos de las transacciones.

Cómo hacer frente a esto:

  1. La liberación adecuada de los límites de pérdidas, dando más espacio a las estrategias
  2. Aumentar posiciones con cuidado en el gráfico de mayor nivel para juzgar el riesgo sistémico
  3. Optimización de parámetros y reducción de transacciones sin sentido

Dirección de optimización de la estrategia

  1. Optimización de los parámetros de MA para que coincidan con las características de las variedades comercializadas
  2. Optimización de los parámetros de sobrecompra y sobreventa para adaptarse a las diferentes emociones del mercado
  3. Mecanismos de gestión de posiciones para controlar mejor los beneficios

Resumir

La estrategia, que integra métodos analíticos clásicos con técnicas cuantitativas modernas, muestra una fuerte adaptabilidad en una variedad de variedades a través de un riguroso filtrado de doble indicador, y es una estrategia de línea corta genérica que merece la pena.

Código Fuente de la Estrategia
/*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 **********