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

MACD MACD-V ATR EMA MA
Erstellungsdatum: 2024-04-26 12:00:21 zuletzt geändert: 2024-06-25 11:28:55
Kopie: 0 Klicks: 908
1
konzentrieren Sie sich auf
1617
Anhänger

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

Überblick

Die Strategie nutzt MACD-V (MACD mit ATR-Volatilität) und Fibonacci-Retracing für Handelsentscheidungen über mehrere Zeiträume. Sie berechnet MACD-V- und Fibonacci-Levels für verschiedene Zeiträume und entscheidet dann, ob eine Position eröffnet oder nicht, basierend auf der Beziehung zwischen dem aktuellen Preis und dem Fibonacci-Level sowie dem Wert von MACD-V. Die Strategie zielt darauf ab, Markttrends und -retracings zu erfassen und gleichzeitig das Risiko zu kontrollieren.

Strategieprinzip

  1. MACD-V-Indikatoren für die Berechnung verschiedener Zeitrahmen (z. B. 5 Minuten und 30 Minuten). MACD-V wird auf der Grundlage von MACD eingeführt, um die ATR-Volationalitäten an unterschiedliche Marktbedingungen anzupassen.
  2. Berechnen Sie die Höchst- und Mindestpreise der letzten Periode (z. B. 9 Zyklen) auf einem hochrangigen Zeitrahmen (z. B. 30 Minuten) und berechnen Sie dann die Fibonacci-Rückschaltungsebene auf dieser Basis.
  3. Die Erfüllung der Aufnahmebedingungen wird anhand des Verhältnisses zwischen dem aktuellen Schlusskurs und dem Fibonacci-Level sowie der Werte und der Richtung der MACD-V ermittelt. Zum Beispiel wird eine offene Position eröffnet, wenn der Preis in der Nähe des Fibonacci-Levels von 38,2% zurückgeht und der MACD-V zwischen 50 und 150 nach unten bewegt.
  4. Nach dem Börsengang wird ein Trailing Stop verwendet, um Gewinne zu schützen und Risiken zu kontrollieren. Die Position des Trailing Stops wird dynamisch an die Preisbewegung und die Strategieparameter angepasst.
  5. Wenn der Preis ein bewegtes oder ein festes Stop-Loss-Level erreicht, wird die Position platziert.

Analyse der Stärken

  1. Die Strategie nutzt mehrere Zeitrahmen, um Markttrends und -schwankungen besser zu erfassen.
  2. Der MACD-V-Indikator berücksichtigt die Preisschwankungen und funktioniert sowohl in trendigen als auch in schwankenden Märkten.
  3. Die Fibonacci-Levels sind sehr gut in der Lage, wichtige Unterstützungs- und Widerstandsbereiche des Preises zu erfassen und als Referenz für Handelsentscheidungen zu dienen.
  4. Ein Moving Stop ermöglicht einen dauerhaften Gewinn, solange der Trend andauert, und gleichzeitig die Beseitigung von Positionen bei einer Preisumkehr, um das Risiko zu kontrollieren.
  5. Die Strategie ist klar, flexibel und anpassungsfähig.

Risikoanalyse

  1. Strategie: Häufige Transaktionen können zu hohen Transaktionskosten führen, wenn die Märkte im Umbruch sind.
  2. Trends, die sich auf technische Indikatoren stützen, können bei einem Falschbruch oder anhaltenden Marktschwankungen fehlerhaft beurteilt werden.
  3. Eine feste Stop-Loss-Position kann nicht in der Lage sein, rechtzeitig auf Extremsituationen zu reagieren, was zu größeren Verlusten führt.
  4. Eine falsche Parameterwahl kann zu einer schlechten Strategie führen.

Optimierungsrichtung

  1. Die Einführung von mehr Zeiträumen und Indikatoren, wie z. B. längerperiodische MA, verbessert die Genauigkeit der Trendbeurteilung.
  2. Optimierung des Positionsmanagements, z. B. Positionsgröße nach ATR oder dynamischen Preisklassen.
  3. Anpassungsfähigkeit durch unterschiedliche Kombinationen von Parametern für unterschiedliche Marktbedingungen.
  4. Die Einführung von mobilen Stopps auf der Basis von mobilen Stopps ermöglicht eine bessere Kontrolle des Abwärtsrisikos.
  5. Die Strategie wird getestet und die Parameter optimiert, um die optimale Kombination von Parametern zu finden.

Zusammenfassen

Die Strategie beurteilt Trends und die Zeit für die Eröffnung von Positionen anhand von MACD-V- und Fibonacci-Rückschlägen in mehreren Zeitrahmen. Die Strategie verwendet mobile Stopps, um Risiken und Gewinne dynamisch zu steuern. Die Strategie ist klar und anpassungsfähig, aber es besteht die Gefahr von häufigen Transaktionen und Fehlentscheidungen in schwankenden Märkten.

Vielen Dank

Der MACD-v-Indikator, der in dieser Strategie verwendet wird, ist dem Urheber Alex Spiroglou zu verdanken.MACD-v.

Strategiequellcode
/*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)