3 Strategie zur Umkehrung des gleitenden Durchschnitts-Swing-Intervalls

Schriftsteller:ChaoZhang, Datum: 2024-02-18 11:18:51
Tags:

img

Übersicht

Diese Strategie verwendet einen 3-tägigen schnellen gleitenden Durchschnitt, einen 10-tägigen langsamen gleitenden Durchschnitt und einen 16-tägigen gleitenden gleitenden Gleitenden Durchschnitt, um den MACD-Indikator zu konstruieren, ergänzt durch den RSI-Indikator und die Volumenmerkmale, und setzt multidimensionale K-Linienmerkmale, um eine Überverlängerung des Markttrends, die Bildung eines Range-Swing-Trends und die Umkehrung von langen oder kurzen Einträgen für die Gewinnentnahme zu bestimmen.

Die Strategie zielt darauf ab, schnelle Preisumkehrungen von lokalen Überkauf- oder Überverkaufsniveaus zu erfassen.

Strategie Logik

Die Strategie verwendet hauptsächlich den 3-tägigen schnellen gleitenden Durchschnitt minus den 10-tägigen langsamen gleitenden Durchschnitt, um den MACD-Indikator zu bilden, mit einer 16-tägigen Signallinie zur Glättung, was eine Standard-MACD-Strategie darstellt. Es kombiniert auch Volumenanalyse von Kauf- und Verkaufsmengen, um Momentumcharakteristiken zu bestimmen. Der RSI-Indikator wird eingeführt, um Überkauf- oder Überverkaufsniveaus zu bestimmen. Durch die Kombination mehrerer Indikatoren beurteilt er Marktcharakteristiken und erkennt Veränderungen der Intervallschwing-Tendenzen, um Einstiegssignale zu konstruieren.

Im Einzelnen bestimmt es durch die Beobachtung der Beziehung zwischen der MACD-Linie und der Signallinie sowie der Neigungsänderungen das Ebbe und Fließen der bullischen und bärischen Kräfte, um Umkehrmöglichkeiten zu erkennen. Gleichzeitig spiegeln Veränderungen des Kauf- und Verkaufvolumens Veränderungen der bullischen und bärischen Dynamik wider. In Kombination mit den Veränderungen des RSI-Indikators zur Bestimmung von Überkauf- und Überverkaufsbedingungen ermöglichen uns diese Indikatoren die Feststellung lokalisierter Merkmale des Marktprofils und des potenziellen Umkehrzeitpunkts.

Die Strategie legt insgesamt drei Einstiegssignale fest:

  1. Lang, wenn das Kaufvolumen keinen Vorteil gegenüber dem Verkaufvolumen hat, RSI unter 41 während des Anstiegs, MACD-Signal hat keine signifikanten Abweichungen;

  2. Long, wenn das Kaufvolumen stärker ist als das Verkaufvolumen, RSI im Bereich 45-55 und steigend, MACD und Signallinie bewegen sich gleichzeitig nach oben;

  3. Kurz, wenn der MACD während des Anstiegs über der Schwelle liegt.

Diese 3 Szenarien spiegeln alle lokalisierte Schwankungen in einer Richtungsüberweitung wider, die als geeigneter Umkehrzeitpunkt für entgegengesetzte Eintritte beurteilt werden.

Die Ausgänge werden als Take Profit (Limit Order) und Stop Loss eingestellt, um Drawdowns zu kontrollieren und Gewinne zu erzielen.

Analyse der Vorteile

Die Strategie kombiniert mehrere Indikatoren zur Bestimmung von Schwankungs- und Überkauf/Überverkaufszuständen mit einer klaren Umkehr-Gewinnnahme-Logik. Sie nutzt Volumenanalyse für zusätzliche Überzeugung über Einträge.

Zu den Vorteilen zählen insbesondere:

  1. Der MACD als volumengewichteter Momentumsoszillator vermeidet eine vereinfachte technische Analyse.

  2. Volumenbedingungen erhöhen die Eintrittssicherheit;

  3. RSI hilft bei der Erkennung potenzieller Umkehrungen;

  4. Stop-Loss und Take-Profit kontrollieren übermäßige Abzüge und sperren einen gewissen Gewinn.

Risikoanalyse

Trotz der Kombination von Indikatoren zur Verbesserung der Gewinnrate haben alle Strategien Risiken.

  1. Wahrscheinlichkeit falscher Signale, wie z. B. Fortführung nach der ersten Umkehrung;

  2. Unzureichende Stop-Loss- und Take-Profit-Einstellungen führen zu überdimensionalen Drawdowns und zu einem Versagen, den Gewinn zu sichern;

  3. Parameter-Tuning wie MA-Längen, RSI-Perioden, Take-Profit-Ratio müssen möglicherweise weiter optimiert werden.

Diese Risiken können durch zusätzliche Optimierungen verringert werden.

Optimierungsrichtlinien

Es bleibt noch Raum für weitere Optimierungen, vor allem:

  1. Versuche verschiedene Kombinationen von MA-Parametern, um optimale Ergebnisse zu erzielen;

  2. Test RSI-Rückblicksperioden, um einen optimalen Überkauf/Überverkaufsgerichter zu finden;

  3. Optimierung der Gewinn- und Stop-Loss-Verhältnisse zur Ausgleichung von Abzügen und Gewinngewinnung;

  4. Einführung von Modellen für maschinelles Lernen, Nutzung von Daten, um Fehleinschätzungen zu reduzieren und die Gewinnrate zu verbessern.

Diese können durch systematischere Backtests umgesetzt werden. Wenn sich die Parameterräume erweitern und die Stichprobengrößen wachsen, verbessern sich auch die Gewinnrate und die Rentabilität der Strategie.

Schlussfolgerung

Diese Strategie kombiniert MACD, RSI und Volumenanalyse, um die Merkmale des Marktes zu bestimmen, Einträge in Umkehrzonen zu erstellen, um Rückschlagbewegungen zu erfassen. Die Logik ist klar, den Trend und Umkehrungen auszugleichen. Mit weiterer Optimierung hat sie ein starkes Gewinnpotenzial als robuste Quant-Strategie. Parameter-Tuning und Modelleinführung können es zu einem hocheffizienten Algorithmus verbessern.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)

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")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")

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 )


// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
    strategy.entry("5C1", strategy.long, qty=1)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
    strategy.entry("5C2", strategy.long, qty=1)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
    strategy.entry("5P1", strategy.short, qty=1)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


Mehr