Estratégia de reversão quantitativa baseada em MFI e MA


Data de criação: 2023-12-27 14:42:16 última modificação: 2023-12-27 14:42:16
cópia: 5 Cliques: 761
1
focar em
1623
Seguidores

Estratégia de reversão quantitativa baseada em MFI e MA

Visão geral

A estratégia é uma estratégia de negociação de curta distância que usa o indicador MFI para identificar áreas de sobrevenda e sobrevenda, combinada com filtragem MA para determinar a direção da inversão de preços. Pode ser eficaz em mercados como ações, divisas, commodities e criptomoedas.

Princípio da estratégia

A estratégia usa o indicador MFI para avaliar o fenômeno de sobrecompra e sobrevenda no mercado. Quando os MFI entram na zona de sobrevenda abaixo de 20, indicam a zona de fundo, onde o valor é subestimado e, nesse momento, é pessimista; Quando os MFI entram na zona de sobrecompra acima de 80, indicam a zona de topo, onde o ativo é supervalorizado e, nesse momento, é pessimista.

Para filtrar falsas reversões, a estratégia também introduziu o indicador de MA para determinar a direção da tendência de preços. O sinal de negociação é gerado apenas quando o preço sobe ou desce a linha média da MA ao mesmo tempo que a reversão da MFI.

A lógica da transação é a seguinte:

  1. MFI abaixo de 20 abaixo de entrar em zona de oversold, ao mesmo tempo em que o preço de fechamento na linha média MA, gerando um sinal de compra
  2. Os MFI ultrapassaram os 80 e entraram na zona de sobrecompra, enquanto o preço de fechamento caiu abaixo da linha média do MA, gerando um sinal de venda

Assim, através de uma filtragem de duplo indicador, é possível identificar com eficiência as oportunidades de reversão e os sinais de entrada são mais confiáveis.

Vantagens estratégicas

  1. Confirmação com duplo indicador, evita falsas rupturas, sinal de alta confiabilidade
  2. A inversão de zona de sobrecompra e sobrevenda é uma técnica de negociação clássica e eficaz.
  3. Combinação de filtros de tendência para um sinal mais preciso e confiável
  4. Aplicável a vários mercados, com grande flexibilidade

Risco estratégico

  1. O mercado pode subir ou descer por um longo período, causando um stop loss.
  2. Atenção aos riscos sistêmicos para evitar que eventos extremos levem a uma reviravolta equivocada
  3. A frequência de transações pode ser mais alta, e é necessário controlar os custos das transações.

Como reagir:

  1. Aumentar a margem de manobra para a estratégia
  2. Aumentar posições com atenção aos gráficos de maior nível e avaliar riscos sistêmicos
  3. Parâmetros de otimização para reduzir transações sem sentido

Direção de otimização da estratégia

  1. Optimizar os parâmetros de MA para se adequarem às características das variedades negociadas
  2. Optimizar os parâmetros de sobrecompra e sobrevenda para se adaptar a diferentes sentimentos de mercado
  3. Aumentar o mecanismo de gestão de posições para controlar mais os lucros

Resumir

A estratégia, que integra métodos analíticos clássicos com técnicas modernas de quantificação, mostra uma forte adaptabilidade em várias variedades através de uma rigorosa filtragem de duplos indicadores, sendo uma estratégia de linha curta recomendada para todos.

Código-fonte da estratégia
/*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 **********