Basierend auf der doppelten Moving Average Reversal Tracking-Strategie


Erstellungsdatum: 2024-02-20 17:08:43 zuletzt geändert: 2024-02-20 17:08:43
Kopie: 1 Klicks: 527
1
konzentrieren Sie sich auf
1617
Anhänger

Basierend auf der doppelten Moving Average Reversal Tracking-Strategie

Überblick

Die Binary Average Reversal Tracking Strategie ist eine quantitative Trading-Strategie, die Moving Average Crossover als Handelssignal verwendet. Die Strategie kombiniert die schnelle und langsame Durchschnittsdifferenz des MACD-Indikators mit seiner Signallinie und der positiven Verhältnisberechnung des Transaktionsvolumens zu einem Handelssignal, um eine Marktumkehr zu erfassen.

Strategieprinzip

Die Strategie beurteilt hauptsächlich die Beziehung zwischen schneller und langsamer Linie, indem sie mehrere Signale erzeugt, wenn die schnelle Linie die langsame Linie durchläuft, und unterhalb der schnellen Linie wird ein Leerlaufsignal erzeugt. Darüber hinaus wird die Leerlauflage des Marktes in Kombination mit der Leerlauflage des MACD-Differenzwerts, der Beziehung zwischen der Leerlauflage und der Signallinie und der Leerlauflage der Transaktionsmenge beurteilt.

Konkret beurteilt die Strategie die Größe und Richtung der MACD-Differenz, die Kreuzung der Differenz und der Signallinie, die Übereinstimmung oder Gegensatz zwischen der Differenz und der Signallinie. Diese Situationen spiegeln die Subidabubb-Ripp-Reball-Charakteristik des Marktes wider. Zusätzlich kann die hohere Verteilung der Transaktionsmenge als Hilfsindikator verwendet werden.

Eine Handelsstrategie wird erstellt, wenn die Differenz und die Signallinie ein Marktausweißsignal zeigen und die Transaktionsmenge bestätigt, dass der Markt sich umkehrt.

Strategische Vorteile

  • Die Reptilien-Theorie ist auf der Grundlage von Doppel-Even-Linien-Kreuzung für die Marktausweichung festgestellt.
  • Zusammenfassende Verkehrsbeurteilung, um falsche Durchbrüche zu vermeiden
  • Der MACD-Indikator beurteilt Subsection-Trend und identifiziert Rebound-Charakteristiken
  • Parameters: Ein Teil der Steuerung ist flexibel

Risiken und Lösungen

  • Doppel-Eigen-Kreuzung verursacht Whipsaw-Probleme

    • Anpassung der Mittellinienparameter und Erhöhung der Threshold
  • Der Umsatz konnte nicht vollständig durch den Fake-Break filtern.

    • In Kombination mit Nebenindikatoren wie OBV beurteilt man die tatsächlichen Transaktionstrends.
  • Unmöglichkeit, die Tiefe und Stärke der Subsection-Anpassung zu beurteilen

    • Erhöhung der Stop-Loss-Rate und Bewertung der wichtigen Unterstützungen

Optimierungsrichtung

  • Mit Hilfe von maschinellen Lernmodellen statt mit Regeln

    • Erhöhung der Strategie-Rufigkeit und Verringerung der Überpassung
  • Erhöhung der Stop-Loss-Technik

    • Ein Teil der Gewinne zu sichern und das Risiko zu senken
  • Mit Emotionsindikatoren und Nachrichtenseitenanalyse

    • Erhöhung der Modellgenauigkeit
  • Transplantation in andere Sorten und Märkte

    • Skalierbarkeit der Teststrategien

Zusammenfassen

Die Doppel-Gleichgewichtsumkehr-Tracking-Strategie berücksichtigt die Gleichgewichts-, MACD- und Transaktionsmenge-Indikatoren und erstellt eine Position, indem sie das Umkehrsignal erfasst und den geeigneten Umkehrpunkt auswählt. Es gibt noch viel Spielraum für die Optimierung der Strategie, um die Strategie-Stabilität und die Ertragsrate durch maschinelle Lern- und Wind-Control-Methoden weiter zu verbessern.

Strategiequellcode
/*backtest
start: 2024-01-20 00:00:00
end: 2024-02-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 Oscillator Profile Flagging", overlay=true)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.8)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=10)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
//plot(macdSlope, color=color.red, title="Total Volume")
//plot(signalSlope, color=color.green, title="Total Volume")
intrabarRange = high - low

getLookBackSlope(lookBack) => signal - signal[lookBack]
getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0
    float s = 0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0 and signalSlope[1] > 0
bool isNegativeMacdReversal = macdSlope < 0 and macdSlope[1] > 0

bool isPositiveSignalReversal = signalSlope > 0 and signalSlope[1] < 0
bool isPositiveMacdReversal = macdSlope > 0 and macdSlope[1] < 0

bool hasBearInversion = signalSlope > 0 and macdSlope < 0
bool hasBullInversion = signalSlope < 0 and macdSlope > 0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0
bool hasSignalSellerBias = hasSignalBias and signal < 0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )

// 7.48 Profit 52.5% 
if ( hasSignificantBuyerVolBias and getPriceRising(shortLookBack) == shortLookBack  and getBuyerVolBias(shortLookBack) == shortLookBack and hasPositiveMACDBias and hasBullInversion)
    strategy.entry("Short1", strategy.short)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - 0.75, stop=strategy.position_avg_price + 0.5)

// 32.53 Profit 47.91%
if ( getPriceFalling(shortLookBack) and (getVolBias(shortLookBack) == false) and signalSlope < 0 and hasSignalSellerBias)
    strategy.entry("Long1", strategy.long)
strategy.exit("TPS", "Long1", limit=strategy.position_avg_price + 0.75, stop=strategy.position_avg_price - 0.5)