MFI- und MA-basierte quantitative Umkehrstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-27 14:42:16
Tags:

img

Übersicht

Diese Strategie nutzt den MFI-Indikator, um überkaufte und überverkaufte Zonen zu identifizieren, kombiniert mit dem MA, um die Kursumkehrrichtung zu filtern.

Strategie Logik

Die Strategie nutzt den MFI-Indikator, um überkaufte und überverkaufte Bedingungen auf dem Markt zu messen. Wenn der MFI unter 20 in die Überverkaufszone fällt, signalisiert er, dass der Vermögenswert unterbewertet ist und sich ein Boden bildet, was ein langes Signal bedeutet. Wenn der MFI über 80 in den überkauften Bereich steigt, deutet er darauf hin, dass der Vermögenswert überbewertet ist und wahrscheinlich bald niedriger korrigiert wird, was ein Kurzsignal auslöst.

Um falsche Umkehrungen zu vermeiden, verwendet die Strategie auch den MA-Indikator, um die Trendrichtung zu bestimmen.

Die spezifische Handelslogik lautet:

  1. Wenn der MFI unter 20 in die Überverkaufszone bricht und der Close über der MA-Linie steht, wird ein Kaufsignal generiert.

  2. Wenn der MFI über 80 in die Überkaufzone bricht und der Close die MA-Linie bricht, wird ein Verkaufssignal ausgelöst.

Mit der Bestätigung der doppelten Indikatoren kann die Strategie mit zuverlässigen Einstiegssignalen umkehrbare Chancen effektiv erkennen.

Vorteile

  1. Die Doppelindikatorbestätigung verhindert falsche Ausbrüche und gewährleistet eine hohe Signalzuverlässigkeit.

  2. Die Nutzung von Überkauf/Überverkauf ist eine klassische und bewährte Handelstechnik.

  3. Die Einbeziehung von Trendfiltern macht die Signale genauer und zuverlässiger.

  4. Anwendbar auf verschiedenen Märkten mit hoher Anpassungsfähigkeit.

Risiken

  1. Der Markt kann eine anhaltend höhere oder niedrigere Tendenz haben, was zu einem Stop-Loss führt.

  2. Es ist notwendig, auf systematische Risiken in extremen Marktbedingungen zu achten, die zu verpassten Umkehrpunkten führen.

  3. Eine hohe Handelsfrequenz kann zu erhöhten Transaktionskosten führen.

Abmilderung:

  1. Ein breiterer Stop-Loss ist zulässig, um der Strategie mehr Spielraum zu geben.

  2. Vergrößern Sie die Positionsgröße vorsichtig und beobachten Sie die Diagramme mit höheren Zeitrahmen auf Systemrisikoseinzelpunkte.

  3. Optimieren Sie die Parameter, um unnötige Transaktionen zu vermeiden.

Möglichkeiten zur Verbesserung

  1. Optimierung der MA-Parameter, damit sie den Merkmalen des Handelsinstruments entsprechen.

  2. Die Überkäufe/Überkäufe werden anhand der unterschiedlichen Marktstimmung abgestimmt.

  3. Einbeziehung von Positionsgrößenregeln für mehr kontrollierte Gewinne.

Schlussfolgerung

Diese Strategie integriert klassische Analysetechniken mit modernen Quantenmethoden.Durch die strikte Anwendung von Dual-Indikator-Bestätigungen zeigt sie eine robuste Anpassungsfähigkeit über verschiedene Instrumente hinweg, was sie zu einer empfohlenen generischen Kurzzeitstrategie macht.


/*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 **********

Mehr