MACD-V und Fibonacci Multi-Timeframe Dynamic Take Profit-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-04-26 12:00:21
Tags:MACDMACD-VATREMA- Nein.

img

Übersicht

Diese Strategie verwendet MACD-V (MACD mit ATR-Volatilität) und Fibonacci-Retracements, um Handelsentscheidungen über mehrere Zeitrahmen hinweg zu treffen. Sie berechnet MACD-V- und Fibonacci-Levels auf verschiedenen Zeitrahmen und entscheidet dann, ob Positionen basierend auf der aktuellen Preisverbindung zu den Fibonacci-Levels und den Werten des MACD-V eröffnet oder geschlossen werden sollen. Die Strategie zielt darauf ab, Markttrends und Retracements zu erfassen und gleichzeitig das Risiko zu kontrollieren.

Strategieprinzipien

  1. Berechnung des MACD-V-Indikators für verschiedene Zeitrahmen (z. B. 5 Minuten und 30 Minuten).
  2. Auf einem höheren Zeitrahmen (z. B. 30 Minuten) berechnen Sie das höchste Hoch und das niedrigste Tief der letzten bestimmten Perioden (z. B. 9 Perioden) und berechnen Sie anschließend die Fibonacci-Retracement-Level auf der Grundlage dieses Bereichs.
  3. Bestimmen Sie, ob eine Position auf der Grundlage des Verhältnisses zwischen dem aktuellen Schlusskurs und den Fibonacci-Levels sowie dem Wert und der Richtung des MACD-V eröffnet werden soll. Wenn der Preis beispielsweise auf rund 38,2% des Fibonacci-Levels zurückfällt und der MACD-V zwischen -50 und 150 nach unten bewegt, öffnen Sie eine Shortposition.
  4. Nach der Eröffnung einer Position wird ein Trailing Stop verwendet, um die Gewinne zu schützen und das Risiko zu kontrollieren.
  5. Wenn der Kurs den Trailing Stop oder den Fixed Stop Loss erreicht, schließen Sie die Position.

Analyse der Vorteile

  1. Die Strategie setzt auf eine Analyse mehrerer Zeitrahmen, die ein umfassenderes Verständnis von Markttrends und -schwankungen ermöglicht.
  2. Der MACD-V-Indikator berücksichtigt die Preisvolatilität und ist somit sowohl auf Trending- als auch auf Ranging-Märkten wirksam.
  3. Fibonacci-Levels können wichtige Unterstützungs- und Widerstandsbereiche effektiv erfassen und als Referenz für Handelsentscheidungen dienen.
  4. Trailing-Stops ermöglichen eine anhaltende Rentabilität während der Fortsetzung des Trends und ermöglichen gleichzeitig die rechtzeitige Schließung von Positionen bei Preisumkehrungen, wodurch das Risiko kontrolliert wird.
  5. Die Strategielogik ist klar, die Parameter sind anpassbar und die Anpassungsfähigkeit ist stark.

Risikoanalyse

  1. Die Strategie kann häufig auf verschiedenen Märkten gehandelt werden, was zu hohen Transaktionskosten führt.
  2. Die Verwendung technischer Indikatoren zur Beurteilung von Trends kann zu Fehleinschätzungen führen, wenn der Markt falsche Ausbrüche oder längere Schwankungen erlebt.
  3. Festgesetzte Stop-Loss-Positionen reagieren möglicherweise nicht rechtzeitig auf extreme Marktbedingungen, was zu erheblichen Verlusten führt.
  4. Eine unsachgemäße Parameterwahl kann zu einer schlechten Strategieleistung führen.

Optimierungsrichtlinien

  1. Einführung mehrer Zeitrahmen und Indikatoren, wie z. B. längerfristige MAs, um die Genauigkeit der Trendbeurteilung zu verbessern.
  2. Optimierung der Positionsverwaltung, z. B. dynamische Anpassung der Positionsgröße anhand von ATR oder Preisbereich.
  3. Festlegen unterschiedlicher Parameterkombinationen für verschiedene Marktbedingungen zur Verbesserung der Anpassungsfähigkeit.
  4. Zusätzlich zu Trailing Stops sollten Trailing Stop-Verluste eingeführt werden, um das Abwärtsrisiko besser zu kontrollieren.
  5. Backtest und Optimierung von Parametern, um die beste Parameterkombination zu finden.

Zusammenfassung

Diese Strategie verwendet MACD-V und Fibonacci-Retracement-Level über mehrere Zeitrahmen hinweg, um Trends und Eintrittszeiten zu bestimmen, und verwendet Trailing-Stops, um Risiko und Gewinn dynamisch zu kontrollieren.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © catikur

//@version=5
strategy("Advanced MACD-V and Fibonacci Strategy with EMA Trailing TP", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=1000, margin_long=1./10*50, margin_short=1./10*50, slippage=0, commission_type=strategy.commission.percent, commission_value=0.05)

// Parametreler
fast_len = input.int(12, title="Fast Length", minval=1, group="MACD-V Settings")
slow_len = input.int(26, title="Slow Length", minval=1, group="MACD-V Settings")
signal_len = input.int(9, title="Signal Smoothing", minval=1, group="MACD-V Settings")
atr_len = input.int(26, title="ATR Length", minval=1, group="MACD-V Settings")
source = input.source(close, title="Source", group="MACD-V Settings")

//ema_length = input.int(20, title="EMA Length for Trailing TP", group="Trailing TP Settings")
trailing_profit = input.float(1000, title="Trailing Profit", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")
trailing_offset = input.float(30000, title="Trailing Offset", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")
trailing_factor = input.float(0.01, title="Trailing Factor", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")
fix_loss = input.float(20000, title="Fix Loss", minval=0.01, maxval=1000000, step=0.01, group="Trailing TP Settings")

fib_lookback = input.int(9, title="Fibonacci Lookback Periods", minval=1, group="Fibonacci Settings")

macd_tf = input.timeframe("5", title="MACD Timeframe", group="Timeframe Settings")
fib_tf = input.timeframe("30", title="Fibonacci Timeframe", group="Timeframe Settings")
//ema_tf = input.timeframe("30", title="EMA Timeframe for Trailing TP", group="Timeframe Settings")




// MACD-V Hesaplama
atr = ta.atr(atr_len)
ema_slow = ta.ema(source, slow_len)
ema_fast = ta.ema(source, fast_len)

atr_tf = request.security(syminfo.tickerid, macd_tf , atr)
ema_slow_tf = request.security(syminfo.tickerid, macd_tf , ema_slow)
ema_fast_tf = request.security(syminfo.tickerid, macd_tf , ema_fast)

macd = ( ema_fast_tf - ema_slow_tf ) / atr_tf * 100
signal = ta.ema(macd, signal_len)
hist = macd - signal
hist_prev = hist[1]

// log.info("MACD {0} ", macd)
// log.info("Signal {0} ", signal)
// log.info("Histogram {0} ", hist)
// log.info("Previous Histogram {0} ", hist_prev)

// EMA for Trailing TP
//ema_trailing_tf = ta.ema(close, ema_length)

//ema_trailing = request.security(syminfo.tickerid, ema_tf, ema_trailing_tf)

//log.info("EMA Trailing {0} ", ema_trailing)

// Fibonacci Seviyeleri

high_val_tf = ta.highest(high, fib_lookback)
low_val_tf = ta.lowest(low, fib_lookback)

h1 = request.security(syminfo.tickerid, fib_tf, high_val_tf)
l1 = request.security(syminfo.tickerid, fib_tf, low_val_tf)

fark = h1 - l1

//Low ile fark
hl236 = l1 + fark * 0.236
hl382 = l1 + fark * 0.382
hl500 = l1 + fark * 0.5
hl618 = l1 + fark * 0.618
hl786 = l1 + fark * 0.786
//High ile fark
lh236 = h1 - fark * 0.236
lh382 = h1 - fark * 0.382
lh500 = h1 - fark * 0.5
lh618 = h1 - fark * 0.618
lh786 = h1 - fark * 0.786

hbars_tf = -ta.highestbars(high, fib_lookback)
lbars_tf = -ta.lowestbars(low, fib_lookback)

hbars = request.security(syminfo.tickerid, fib_tf , hbars_tf)
lbars = request.security(syminfo.tickerid, fib_tf , lbars_tf)

fib_236 = hbars > lbars ? hl236 : lh236
fib_382 = hbars > lbars ? hl382 : lh382
fib_500 = hbars > lbars ? hl500 : lh500
fib_618 = hbars > lbars ? hl618 : lh618
fib_786 = hbars > lbars ? hl786 : lh786

// log.info("Fibo 382 {0} ", fib_382)
// log.info("Fibo 618 {0} ", fib_618)

// Keep track of the strategy's highest and lowest net profit
var highestNetProfit = 0.0
var lowestNetProfit  = 0.0

var bool sell_retracing = false
var bool sell_reversing = false
var bool buy_rebound = false
var bool buy_rallying = false

// Satış Koşulları
sell_retracing := (signal > -20) and (macd > -50 and macd < 150) and (macd < signal) and (hist < hist_prev) and (close < fib_382)
sell_reversing := (macd > -150 and macd < -50) and (macd < signal) and (hist < hist_prev) and (close < fib_618)

// log.info("Retracing var mi: {0} ", sell_retracing)
// log.info("Reversing var mi: {0} ", sell_reversing)

// Alım Koşulları
buy_rebound := (signal < 20) and (macd > -150 and macd < 50) and (macd > signal) and (hist > hist_prev) and ((fib_618 < close) or ((fib_618 > close ) and (close > fib_382)))
buy_rallying := (macd > 50 and macd < 150) and (macd > signal) and (hist > hist_prev) and (close > fib_618)

// log.info("Rallying var mi: {0} ", buy_rallying)
// log.info("Rebound var mi: {0} ", buy_rebound)

// Emirleri Yerleştirme
if (sell_retracing == true and strategy.opentrades == 0 )
    strategy.entry("sell_retracing", strategy.short)

if (sell_reversing == true and strategy.opentrades == 0 )
    strategy.entry("sell_reversing", strategy.short)

if (buy_rebound == true and strategy.opentrades == 0 )
    strategy.entry("buy_rebound", strategy.long)

if (buy_rallying == true and strategy.opentrades == 0 )
    strategy.entry("buy_rallying", strategy.long)


// log.info("open order: {0} ", strategy.opentrades )


highestNetProfit := math.max(highestNetProfit, strategy.netprofit)
lowestNetProfit  := math.min(lowestNetProfit, strategy.netprofit)




// Plot the net profit, as well as its highest and lowest value
//plot(strategy.netprofit, style=plot.style_area, title="Net profit",
//     color=strategy.netprofit > 0 ? color.green : color.red)

//plot(highestNetProfit, color=color.green, title="Highest net profit")
//plot(lowestNetProfit, color=color.red, title="Lowest net profit")

// Trailing Take Profit
//long_trailing_stop = ema_trailing * trailing_factor
//short_trailing_stop = ema_trailing / trailing_factor

//log.info("long trailing stop {0} ", long_trailing_stop)
//log.info("short trailing stop {0} ", short_trailing_stop)
//log.info("avg price {0} ", strategy.position_avg_price)
//trail_price1 = strategy.position_avg_price * (1 + trailing_factor)
//trail_price2 = strategy.position_avg_price * (1 - trailing_factor)
// log.info("position_size {0} ", strategy.position_size)

// Trailing Take Profit
var float long_trailing_stop = 0.0
var float short_trailing_stop = 0.0

//if (strategy.position_size > 0)
 //   long_trailing_stop := math.max(long_trailing_stop, close * (1 + trailing_factor))  // Yeni bir maksimum değer belirlendiğinde güncelle
//if (strategy.position_size < 0)
 //  short_trailing_stop := math.min(short_trailing_stop, close * (1 - trailing_factor))  // Yeni bir minimum değer belirlendiğinde güncelle

//log.info("long trailing {0} ", long_trailing_stop)
// log.info("trailing factor{0} ", trailing_factor)
//log.info("short trailing {0} ", short_trailing_stop)

if (strategy.position_size != 0 )
    strategy.exit("Exit Long", from_entry="buy_rebound", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)
    strategy.exit("Exit Long", from_entry="buy_rallying", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)
    strategy.exit("Exit Short", from_entry="sell_retracing", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)
    strategy.exit("Exit Short", from_entry="sell_reversing", trail_points = trailing_profit, trail_offset = trailing_offset, loss = fix_loss)

Verwandt

Mehr