Diese Strategie nutzt die Crossover-Signale der MACD-Schnelllinie und der langsamen Linie, kombiniert mit Urteilen auf der Grundlage mehrerer anderer Indikatoren, um die Durchbruchssignale der gleitenden Durchschnittsindexlinie rechtzeitig zu erfassen und Kauf- oder Verkaufsentscheidungen zu treffen.
Verwenden Sie die Überschneidung der MACD-Schnelllinie und der langsamen Linie als primäres Handelssignal. Wenn die schnelle Linie über die langsame Linie geht, nehmen Sie eine Long-Position ein. Wenn die schnelle Linie unter die langsame Linie geht, nehmen Sie eine Short-Position ein.
Unterhalb der Mittellinie steht für lang, oberhalb steht für kurz.
Vergleichen Sie den aktuellen Schlusskurs mit der SMA-Linie eines bestimmten Zeitraums.
Berechnen Sie den 0,5 Fibonacci-Level des höchsten Wertes eines bestimmten Zeitraums als Widerstand für lang. Berechnen Sie den 0,5 Fibonacci-Level des niedrigsten Wertes eines bestimmten Zeitraums als Unterstützung für kurz.
Wenn die schnelle Linie oberhalb der Widerstandslinie liegt und der Preis unterhalb der Unterstützung ist, nehmen Sie einen Long-Takt.
Ein Trailing Stop Loss Mechanismus wird angewendet. Der Stop Loss wird zunächst auf einen bestimmten Prozentsatz des Einstiegspreises festgesetzt. Wenn der Verlust ein bestimmtes Niveau erreicht, wechseln Sie zu einem allmählichen Trailing Stop Loss.
Die Strategie nutzt vollständig die MACD-Crossover-Signale, die ein klassisches und wirksames Handelssignal für technische Indikatoren sind.
Die Einbeziehung von Bestätigungen aus mehreren Indikatoren wie RSI und SMA kann falsche Signale filtern und die Zuverlässigkeit verbessern.
Die Berechnung dynamischer Unterstützungs- und Widerstandsniveaus für den Breakout-Handel kann größere Trends erfassen.
Der Trailing Stop Loss kann die meisten Gewinne erzielen und gleichzeitig das Risiko kontrollieren.
Die Strategielogik ist klar und einfach, für Anfänger leicht verständlich und zu meistern.
Der MACD-Indikator hat Verzögerungen und kann die optimalen Ein- und Ausstiegspunkte verpassen.
Die Kombination mehrerer Indikatoren erhöht die Komplexität und das Risiko widersprüchlicher Signale.
Bei der dynamischen Berechnung von Unterstützung und Widerstand besteht das Risiko falscher Ausbrüche.
Der nachfolgende Stop-Loss kann bei starken Trends vorzeitig aussteigen und Trends nicht übersteigen.
Parameter erfordern wiederholte Tests und Optimierungen, unsachgemäße Parameter beeinflussen die Leistung negativ.
Verschiedene Parameterkombinationen testen, um MACD-Perioden zu optimieren.
Mehr Indikatoren wie Bollinger Bands, KDJ für die mehrdimensionale Analyse einführen.
Einbeziehen Sie weitere Faktoren, um die Angemessenheit von Unterstützung und Widerstand zu beurteilen.
Untersuchen Sie fortschrittlichere Stop-Loss-Mechanismen wie zeitbasierte oder volatilitätsbasierte Stops.
Ein automatisches Optimierungsmodul für die automatische Optimierung von Parametern.
Diese Strategie kombiniert MACD, RSI, SMA und andere Indikatoren, um gleitende Durchbruchsignale opportunistisch zu erfassen. Sie gehört zu typischen kurzfristigen Breakout-Handelsstrategien. Es gibt eine gewisse Verzögerung bei der Signalgenerierung, aber die Genauigkeit kann durch Parameteroptimierung verbessert werden. Insgesamt ist dies eine Strategie mit einfacher und klarer Logik, die für die meisten leicht zu verstehen ist und weitere Tests und Optimierungen wert ist.
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-09 23:00:00 period: 1m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © onurenginogutcu //@version=4 strategy("R19 STRATEGY", overlay=true, calc_on_every_tick=true , margin_long=100, margin_short=100 , process_orders_on_close=true ) sym = input(title="Symbol", type=input.symbol, defval="BINANCE:BTCUSDT" , group = "SYMBOL") timeFrame = input(title="Strategy Decision Time Frame", type = input.resolution , defval="60") adxlen = input(14, title="ADX Smoothing" , group = "ADX") dilen = input(14, title="ADX DI Length", group = "ADX") adxemalenght = input(30, title="ADX EMA", group = "ADX") adxconstant = input(19, title="ADX CONSTANT", group = "ADX") fibvar = input (title = "Fibo Look Back Canles" , defval = 50 , minval = 0 , group = "FIBO MACD SMA") smaLookback = input (title = "SMA Look Back Candles" , defval = 30 , minval = 0 , group = "FIBO MACD SMA") MACDFast = input (title = "MACD Fast Lenght" , defval = 15 , minval = 0 , group = "FIBO MACD SMA") MACDSlow = input (title = "MACD Slow Lenght" , defval = 30 , minval = 0 , group = "FIBO MACD SMA") MACDSmooth = input (title = "MACD Signal Smoothing" , defval = 9 , minval = 0 , group = "FIBO MACD SMA") MACDLookback = input (title = "MACD Look Back Candles" , defval = 100 , minval = 0 , group = "FIBO MACD SMA") trailingStopLong = input (title = "Trailing Long Stop %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01 trailingStopShort = input (title = "Trailing Short Stop %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01 LongTrailingProfitStart = input (title = "Long Profit Start %" , defval = 2.0 , step = 0.1 , group = "TP & SL") * 0.01 ShortTrailingProfitStart = input (title = "Short Profit Start %" , defval = 2.0 , step = 0.1, group = "TP & SL") * 0.01 lsl = input(title="Max Long Stop Loss (%)", minval=0.0, step=0.1, defval=3.0, group = "TP & SL") * 0.01 ssl = input(title="Max Short Stop Loss (%)", minval=0.0, step=0.1, defval=2.5, group = "TP & SL") * 0.01 longtp = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01 shorttp = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=100, group = "TP & SL") * 0.01 capperc = input(title="Capital Percentage to Invest (%)", minval=0.0, maxval=100, step=0.1, defval=95, group = "CAPITAL TO INVEST") * 0.01 symClose = security(sym, timeFrame, close) symHigh = security(sym, timeFrame, high) symLow = security(sym, timeFrame, low) atr = atr (14) /////////adx code dirmov(len) => up = change(symHigh) down = -change(symLow) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) emasig = ema (sig , adxemalenght ) ////////adx code over i = ema (symClose , MACDFast) - ema (symClose , MACDSlow) r = ema (i , MACDSmooth) sapust = highest (i , MACDLookback) * 0.729 sapalt = lowest (i , MACDLookback) * 0.729 simRSI = rsi (symClose , 50 ) fibtop = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50) fibbottom = lowest (symLow , fibvar) + ((highest (symHigh , fibvar) - lowest (symLow , fibvar)) * 0.50) cond1 = 0 cond2 = 0 cond3 = 0 cond4 = 0 longCondition = crossover(i, r) and i < sapalt and sig > adxconstant and symClose < sma (symClose , smaLookback) and simRSI < sma (simRSI , 50) and symClose < fibbottom shortCondition = crossunder(i, r) and i > sapust and sig > adxconstant and symClose > sma (symClose , smaLookback) and simRSI > sma (simRSI , 50) and symClose > fibtop //////////////////////probability long/short if (crossover(i, r) and i < sapalt) cond1 := 35 else if (crossunder(i, r) and i > sapust) cond1 := -35 else cond1 := 0 if (symClose < sma (symClose , smaLookback)) cond2 := 30 else if (symClose > sma (symClose , smaLookback)) cond2 := -30 else cond2 := 0 if (simRSI < sma (simRSI , 50)) cond3 := 25 else if (simRSI > sma (simRSI , 50)) cond3 := -25 else cond3 := 0 if (symClose < fibbottom) cond4 := 10 else if (symClose > fibbottom) cond4 := -10 else cond4 := 0 probab = cond1 + cond2 + cond3 + cond4 //////////////////////////////////////////////////////////////// ///////////////////////////////////////////STRATEGY ENTRIES AND STOP LOSSES ///// var startTrail = 0 var trailingLongPrice = 0.0 var trailingShortPrice = 0.0 if (longCondition and strategy.position_size == 0) strategy.entry("Long", strategy.long , qty = capperc * strategy.equity / close ) if (shortCondition and strategy.position_size == 0) strategy.entry("Short" , strategy.short , qty = capperc * strategy.equity / close ) if (strategy.position_size == 0) trailingShortPrice := 0.0 trailingLongPrice := 0.0 startTrail := 0 /////////////////////////////////strategy exit if (strategy.position_size > 0 and close >= strategy.position_avg_price * (1 + LongTrailingProfitStart)) startTrail := 1 if (strategy.position_size < 0 and close <= strategy.position_avg_price * (1 - ShortTrailingProfitStart)) startTrail := -1 trailingLongPrice := if strategy.position_size > 0 and startTrail == 1 stopMeasure = close * (1 - trailingStopLong) max (stopMeasure , trailingLongPrice [1]) else if strategy.position_size > 0 and startTrail == 0 strategy.position_avg_price * (1 - lsl) trailingShortPrice := if strategy.position_size < 0 and startTrail == -1 stopMeasure = close * (1 + trailingStopShort) min (stopMeasure , trailingShortPrice [1]) else if strategy.position_size < 0 and startTrail == 0 strategy.position_avg_price * (1 + ssl) if (strategy.position_size > 0) strategy.exit("Exit Long", "Long", stop = trailingLongPrice , limit=strategy.position_avg_price*(1 + longtp)) if (strategy.position_size < 0) strategy.exit("Exit Short", "Short", stop = trailingShortPrice , limit=strategy.position_avg_price*(1 - shorttp)) ////////////////////////vertical colouring signals bgcolor(color=longCondition ? color.new (color.green , 70) : na) bgcolor(color=shortCondition ? color.new (color.red , 70) : na) plot (trailingLongPrice , color = color.green) ///long price trailing stop plot (trailingShortPrice , color = color.red) /// short price trailing stop plot (startTrail , color = color.yellow) plot (probab , color = color.white) ////probability