Trendumkehrung mit Intrabar Volatilitätshandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-26 17:15:54
Tags:

img

Übersicht

Diese Strategie berechnet die Kauf- und Verkaufsdruckunterschiede im Transaktionsvolumen über verschiedene Zeitfenster hinweg, kombiniert mit MACD-Signalen, um eine Trendumkehr-Handelsstrategie zu entwerfen.

Strategieprinzipien

Die Kernlogik dieser Strategie beruht auf folgenden Punkten:

  1. Berechnen Sie den Kaufdruck und den Verkaufsdruck des Transaktionsvolumens in verschiedenen Zeitfenstern (kurze und lange Fenster).

  2. Verwenden Sie den Differenzwert des MACD (die Differenz zwischen der MACD-Linie und der Signallinie), um den Long- und Short-Status zu bestimmen. Kombinieren Sie mit den Kauf- und Verkaufsdrucksignalen im Transaktionsvolumen, um Trendumkehrungen zu überprüfen.

  3. Wenn sich die Kaufdruckanomalie des Transaktionsvolumens verstärkt und die MACD-Linie überschritten wird, wird festgestellt, dass der Markt eine Trendumkehr von Verkauf zu Kauf haben kann.

  4. Wenn die Verkaufsdruckanomalie des Transaktionsvolumens zunimmt und die MACD-Linie überschritten wird, wird festgestellt, dass der Markt eine Trendumkehr von Kauf zu Verkauf aufweist.

  5. Nach Eingabe des Umkehrsignals verwenden Sie Profit- und Stop-Loss-Strategien zur Risikokontrolle.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die Verwendung der langen/kurzen Differenzen im Transaktionsvolumen zur Bestimmung von Trendumkehrpunkten vermeidet die ausschließliche Abhängigkeit von Trendbestimmungsindikatoren wie gleitenden Durchschnitten und vernachlässigt gleichzeitig die Rolle des Transaktionsvolumens.

  2. Die Kombination von MACD-Signalen zur Überprüfung von Umkehrungen kann die Urteilsgenauigkeit verbessern.

  3. Die Verwendung von langen und kurzen Zeitfenstern zur Bestimmung von Anomalien im Transaktionsvolumen macht Umkehrsignale zuverlässiger.

  4. Umkehrstrategien haben tendenziell höhere durchschnittliche Gewinnraten.

Risikoanalyse

Zu den Risiken dieser Strategie gehören:

  1. Das Transaktionsvolumen und die MACD-Signale können falsche Signale geben, was zu falschen Beurteilungen von Umkehrungen führen kann.

  2. Nachdem die Umkehrsignale ausgelöst wurden, kann sich der Markt erneut anpassen und nicht sofort direkt umkehren.

  3. Eine falsche Einrichtung von Take-Profit und Stop-Loss kann zu größeren Verlusten führen.

  4. Höhere Abzüge sind für Anleger, die eine stabile Rendite anstreben, ungeeignet.

Optimierungsrichtlinien

Zu den Optimierungen dieser Strategie gehören:

  1. Optimieren Sie lange und kurze Zeitfenster, um umgekehrte Urteile genauer zu machen.

  2. Optimierung der MACD-Parameter zur Verbesserung der Long/Short-Genauigkeit.

  3. Optimieren Sie Profit- und Stop-Loss-Algorithmen, um Verlustrisiken zu reduzieren.

  4. Hinzufügen von Anomalienbeurteilungsindikatoren, um die Erfolgsrate der Umkehrung zu verbessern.

  5. Hinzufügen von Positionsgrößen und Geldverwaltungsmodulen.

Schlussfolgerung

Zusammenfassend ist dies eine typische Trendumkehr algorithmische Handelsstrategie. Sie stützt sich hauptsächlich auf Verstärkungen von Transaktionsvolumenanomalien und MACD-Signalverifikationen, um Preisumkehrungen von Long- zu Short-Positionen oder umgekehrt zu bestimmen und zu erfassen. Die Strategie hat die Vorteile hoher Genauigkeit und guter Renditen, hat aber auch gewisse Risiken. Weitere Optimierungen an Parametern und Funktionalität können die Strategie noch besser leisten.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("3 10 Oscillator Profile Flagging", shorttitle="3 10 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)
takeProfit = input( title="Take Profit", defval=0.75)
stopLoss = input( title="Stop Loss", defval=0.5)

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

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, qty=10)
strategy.exit("TPS", "Short1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

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

Mehr