Preiskanale und MACD-basierte Multi-Timeframe-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-08 15:15:37
Tags:

img

Übersicht

Diese Strategie kombiniert den Preiskanalindikator und den MACD-Indikator, um Trends zu verfolgen und über mehrere Zeitrahmen hinweg Überkauft- und Überverkauftniveaus zu identifizieren und so Kauf- und Verkaufsentscheidungen zu treffen.

Strategie Logik

Der Preiskanalindikator konstruiert einen Preiskanal auf der Grundlage von EMA-Linien mit höchsten und niedrigsten Preisen, um Trends zu bestimmen, wenn der Preis aus dem Kanal bricht. Der MACD-Indikator beurteilt bullische und bärische Dynamik. Werte über der Nulllinie deuten auf einen Bullenmarkt hin, während Werte darunter auf einen Bärenmarkt hindeuten.

Die Handelssignale dieser Strategie ergeben sich aus folgenden Aspekten:

  1. Geben Sie Long ein, wenn das MACD-Histogramm rot dreht. Geben Sie Short ein, wenn das MACD-Histogramm grün dreht.

  2. Der Kurs wird kurz eingestellt, wenn er sich dem unteren Ende des Kanals nähert und der MACD unter der Nulllinie liegt.

  3. Gehen Sie lang ein, wenn sich der Preis an die Spitze des Kanals nähert und der MACD über der Nulllinie liegt.

  4. Geben Sie Long ein, wenn der MACD über die Nulllinie geht. Geben Sie Short ein, wenn der MACD unter die Nulllinie geht.

Ausgänge werden durch Stop Loss und Take Profit ausgelöst.

Vorteile der Strategie

  1. Eine Kombination von Indikatoren verhindert einen falschen Ausbruch.

  2. Die Kombination von Indikatoren über Zeiträume hinweg gewährleistet eine zuverlässige Tendenzdetektion.

  3. Einbeziehung von Stop-Loss- und Take-Profit-Kontrollen pro Handel.

Risiken der Strategie

  1. Begrenzter Optimierungsraum führt zu Überoptimierung.

  2. Eine niedrige Preis-Kanal-Einstellung verpasst größere Schritte.

  3. Ein knappes Stop-Loss führt zu größeren Verlusten.

Lösungen:

  1. Sie müssen die Optimierung vorwärts durchführen, um eine Überoptimierung zu verhindern.

  2. Anpassungsparameter für den Preiskanal festlegen.

  3. Einführung eines auf Volatilität basierenden Stopp-Loss für die dynamische Anpassung der Stopp-Distanz.

Optimierungsrichtungen

  1. Optimierung der Kombination der MACD-Parameter.

  2. Optimierung der adaptiven Berechnung von Preiskanalparametern.

  3. Fügen Sie mehr Filter hinzu, um falsche Ausbrüche zu verhindern und die Effizienz zu verbessern.

Zusammenfassung

Diese Strategie kombiniert die Stärken von Preiskanal und MACD durch vernünftige Parameter-Setups und großen Optimierungsraum. Sie funktioniert gut bei der Trenddetektion und Überkauf/Überverkaufserkennung. Der Stop-Loss/Take-Profit-Mechanismus steuert pro Handelsverlust. Weiterhin können Verbesserungen durch Parameteroptimierung, Hinzufügen von Filtern und Optimierung des Stop-Loss-Mechanismus vorgenommen werden.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Sonic R + Barcolor MACD", overlay=true)
HiLoLen     = input(34, minval=2,title="High Low channel Length")
pacL        = ema(low,HiLoLen)
pacH        = ema(high,HiLoLen)
// Plot the Price Action Channel (PAC) base on EMA high,low and close//
L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0)
H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD
hisup= iff(delta>delta[1] and delta>0, 1,
	     iff(delta<delta[1], -1, nz(hisup[1], 0)))
hisdown = iff(delta<delta[1] and delta<0, 1,
	     iff(delta>delta[1], -1, nz(hisdown[1], 0)))
barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue )
//SR
PeriodLookBack = input(34)
xHighest = highest(PeriodLookBack)
xLowest = lowest(PeriodLookBack)
Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0)
// Strategy//
conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0)
gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH
consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0)
gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL
if(gobuy)
    strategy.entry("Buy",strategy.long)
if(gosell)
    strategy.entry("Sell",strategy.short)
//if(Trend==-1 and close<pacL)
//    strategy.close("Buy")
//if(Trend==1 and close>pacH)
//    strategy.close("Sell")
 ////////////// TP and SL//
SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1)
rr= input(defval=0.1,title="Reward/Risk",type=float)
useTPandSL = input(defval = false, title = "Use exit order strategy?")
Stop = SL
Take=SL*rr
Q = 100
if(useTPandSL)
    strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop)
    strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)

Mehr