Strategie zur Steigerung der Durchbrüche im Bereich des gleitenden Durchschnitts und des oberen Schienenverkehrs

Schriftsteller:ChaoZhang, Datum: 23.11.2023
Tags:

img

Übersicht

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.

Strategie Logik

  1. 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.

  2. Unterhalb der Mittellinie steht für lang, oberhalb steht für kurz.

  3. Vergleichen Sie den aktuellen Schlusskurs mit der SMA-Linie eines bestimmten Zeitraums.

  4. 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.

  5. Wenn die schnelle Linie oberhalb der Widerstandslinie liegt und der Preis unterhalb der Unterstützung ist, nehmen Sie einen Long-Takt.

  6. 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.

Vorteile

  1. Die Strategie nutzt vollständig die MACD-Crossover-Signale, die ein klassisches und wirksames Handelssignal für technische Indikatoren sind.

  2. Die Einbeziehung von Bestätigungen aus mehreren Indikatoren wie RSI und SMA kann falsche Signale filtern und die Zuverlässigkeit verbessern.

  3. Die Berechnung dynamischer Unterstützungs- und Widerstandsniveaus für den Breakout-Handel kann größere Trends erfassen.

  4. Der Trailing Stop Loss kann die meisten Gewinne erzielen und gleichzeitig das Risiko kontrollieren.

  5. Die Strategielogik ist klar und einfach, für Anfänger leicht verständlich und zu meistern.

Risiken

  1. Der MACD-Indikator hat Verzögerungen und kann die optimalen Ein- und Ausstiegspunkte verpassen.

  2. Die Kombination mehrerer Indikatoren erhöht die Komplexität und das Risiko widersprüchlicher Signale.

  3. Bei der dynamischen Berechnung von Unterstützung und Widerstand besteht das Risiko falscher Ausbrüche.

  4. Der nachfolgende Stop-Loss kann bei starken Trends vorzeitig aussteigen und Trends nicht übersteigen.

  5. Parameter erfordern wiederholte Tests und Optimierungen, unsachgemäße Parameter beeinflussen die Leistung negativ.

Optimierungsrichtlinien

  1. Verschiedene Parameterkombinationen testen, um MACD-Perioden zu optimieren.

  2. Mehr Indikatoren wie Bollinger Bands, KDJ für die mehrdimensionale Analyse einführen.

  3. Einbeziehen Sie weitere Faktoren, um die Angemessenheit von Unterstützung und Widerstand zu beurteilen.

  4. Untersuchen Sie fortschrittlichere Stop-Loss-Mechanismen wie zeitbasierte oder volatilitätsbasierte Stops.

  5. Ein automatisches Optimierungsmodul für die automatische Optimierung von Parametern.

Zusammenfassung

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


Mehr