MACD-Zero-Cross-Reversal-Strategie für mehrere Zeiträume


Erstellungsdatum: 2024-02-18 15:27:21 zuletzt geändert: 2024-02-18 15:27:21
Kopie: 0 Klicks: 548
1
konzentrieren Sie sich auf
1617
Anhänger

MACD-Zero-Cross-Reversal-Strategie für mehrere Zeiträume

Überblick

Multi-Zeit-Perioden MACD Null-Achs-Kreuz-Umkehr-Strategie durch die Berechnung von MACD-Indikatoren für verschiedene Perioden, Identifizierung von Signalen, die den Preis möglicherweise umkehren, Trend-Tracking-Stopp-Loss-Methode, die Suche nach höherer Kapitalnutzung Effizienz.

Strategieprinzip

Die Strategie berechnet gleichzeitig den SMA für die 3- und 10-Zyklen, baut eine schnelle und langsame Linie auf und berechnet dann die MACD-Indikatoren und die Signallinien. Wenn die Schnelle und die Signallinie eine Aufwärts- oder Abwärts-Null-Achs-Kreuzung auftreten, zeigt dies, dass der Preis einen kritischen Punkt erreicht hat und eine Umkehr möglich ist.

Die Strategie beurteilt Preisschwankungen durch:

  1. Die MACD-Null-Achs-Kreuzung zeigt, dass der Preis einen kritischen Punkt erreicht hat
  2. Der Kauf- und Verkaufsschub bei der Erfüllung der Transaktionsmenge beurteilt die Leerstellung.
  3. Der RSI-Indikator bewertet die Trendwende in Kombination mit MACD-Schräglage und beurteilt die Stärke des Umkehrsignals
  4. Schnellleiter und Signalleiter kreuzen sich rückwärts und bilden ein Umkehrsignal

Wenn das Umkehrsignal zuverlässig ist, wird die Strategie eingeschaltet, um einen Trend zu verfolgen, um einen höheren Gewinn zu erzielen.

Analyse der Stärken

Die Strategie hat folgende Vorteile:

  1. Mehrfaches Urteilsvermögen macht die Umkehrsignale zuverlässiger
  2. Umkehrpunkte mit MACD Null-Achs-Kreuzung, hohe Genauigkeit
  3. RSI-Indikator und Hilfsbeurteilung für die Transaktionsmenge, hohe Zuverlässigkeit
  4. Trend-Tracking-Stop-Loss-Methoden, die auf eine höhere Effizienz der Kapitalnutzung abzielen

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Die MACD-Indikatoren haben eine hohe Wahrscheinlichkeit, falsche Signale zu senden und sind leicht zu erwischen
  2. Die Wahrscheinlichkeit, dass ein Stop-Loss durchbrochen wird, ist höher bei Multi-Space-Wechseln.
  3. Unkorrekt eingestellte Parameter können zu zu häufigen Transaktionen, erhöhten Transaktionskosten und Verlusten von Gleitpunkten führen

Das Risiko kann durch folgende Maßnahmen verringert werden:

  1. Entspannung der Stop-Loss-Marge und Vermeidung von Einbußen
  2. Optimierung der Parameter und Verringerung der Handelsfrequenz
  3. Berücksichtigen Sie nur den Eintritt in der Nähe der kritischen Resistenzstützpunkte

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Erweiterung der Algorithmen zur Unterstützung der Reliabilität von Umkehrsignalen
  2. Erhöhung der emotionalen Indikatoren für die Beurteilung der psychologischen Oberfläche
  3. Verbesserte Einstiegsgenauigkeit in Kombination mit wichtigen Stützungswiderstandspunkten
  4. Optimierung der Stop-Loss-Methode und weitere Effizienzsteigerung der Kapitalnutzung
  5. Tests für optimale Parameterkombinationen, um die Häufigkeit der Transaktionen zu reduzieren

Zusammenfassen

Eine mehrzeitige MACD-Null-Achs-Kreuz-Umkehrstrategie, die Informationen über mehrere Dimensionen wie Preis, Transaktionsvolumen und Schwankungsindikatoren berücksichtigt, um durch mehrere Indikatoren zu entscheiden, wann die Umkehr eingetreten ist, und nach einem profitablen Umsatz rechtzeitig zu stoppen, um einen besseren Gewinn in einer Umkehr zu erzielen. Die Strategie wird durch maschinelles Lernen und Schlüsselpositionsoptimierung weiter verbessert werden, um die Handelsfrequenz und das Risiko zu reduzieren und den Gewinnraum zu erhöhen.

Strategiequellcode
/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

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.0)
takeProfit = input( title="Take Profit", defval=0.8)
stopLoss = input( title="Stop Loss", defval=0.75)

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(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]

getRSISlopeChange(lookBack) =>
    j = 0
    for i = 0 to lookBack
        if ( rsi[i] - rsi[ i + 1 ] ) > -5
            j += 1
    j

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.0
    float s = 0.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.0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0.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.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0

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

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

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

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

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.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 )

// 393.60 Profit 52.26% 15m
if ( hasBullInversion and rsiSlope > 1.5 and volume > 300000.0 )
    strategy.entry("15C1", strategy.long, qty=10.0)
strategy.exit("TPS", "15C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 356.10 Profit 51,45% 15m
if ( getVolBias(shortLookBack) == false and rsiSlope > 3.0 and signalSlope > 0)
    strategy.entry("15C2", strategy.long, qty=10.0)
strategy.exit("TPS", "15C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 124 Profit 52% 15m
if ( rsiSlope < -11.25 and macdSlope < 0.0 and signalSlope < 0.0)
    strategy.entry("15P1", strategy.short, qty=10.0)
strategy.exit("TPS", "15P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 455.40 Profit 49% 15m
if ( math.abs(math.abs(macd) - math.abs(signal)) < .1 and buyVolume > sellVolume and hasBullInversion)
    strategy.entry("15P2", strategy.short, qty=10.0)
strategy.exit("TPS", "15P2", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)