Kurzfristige Breakout-Strategie basierend auf MACD und RSI


Erstellungsdatum: 2023-10-07 16:08:53 zuletzt geändert: 2023-10-07 16:08:53
Kopie: 1 Klicks: 1162
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie basiert auf dem 1-Minuten-MACD-Indikator und dem RSI-Indikator-Design. Sie kombiniert die Fähigkeit des MACD-Indikators, Trends zu beurteilen und Breakouts zu finden, mit der Fähigkeit des RSI, Überkäufe und Überverkäufe zu beurteilen, um nach Gelegenheiten zu suchen, die die kurzen Linien brechen, um zu schwanken.

Strategieprinzip

Die Strategie berechnet zunächst die Streuung des MACD-Indikators im 1-Minuten-Zeitrahmen und zeichnet den Bruch der Streuung durch den Brin-Band aus. Gleichzeitig wird der RSI-Indikator für den Multiplex berechnet. Ein Handelssignal wird nur ausgegeben, wenn der Brin-Band, der MACD- und der RSI-Indikator gleichzeitig geeignet sind.

Insbesondere, wenn der 1-Minuten-MACD-Konzentrationslinie unterhalb der Unterbahn und der RSI ist höher als 51, und wenn der MACD-Konzentrationslinie über der Oberbahn und der RSI ist niedriger als 49, und verlangen Sie, dass die 9, 50 und 200-Tage-Durchschnittslinie ordnungsgemäß angeordnet, um zu handeln, um zu verhindern, dass eine unvorteilhafte Trend-Umkehr-Operation.

Ein Fix-Stop-Stop-Loss-Exit wird eingesetzt, wenn die Gewinne 0,5% oder die Verluste 0,3% erreichen.

Analyse der Stärken

Die Strategie kombiniert Trendbeurteilung und Überkauf-Überverkauf-Beurteilung, um falsche Durchbrüche wirksam zu filtern. Fixed Stop-Loss-Stopps ermöglichen eine gewisse erwartete Verwaltung für jeden Gewinn.

Die Vorteile sind:

  1. Der MACD beurteilt die Richtung des Trends, der RSI beurteilt die Luftstraße und vermeidet so die Abwärtsbewegung.

  2. In Kombination mit dem Brin-Band-Kanal kann ein Durchbruchsignal ermittelt und ein falscher Durchbruch gefiltert werden.

  3. Mit einem festen Stop-Loss, bei dem für jeden Gewinn eine gewisse Erwartung besteht, kann der Einzelschaden kontrolliert werden.

  4. Die Transaktionsfrequenz ist hoch und eignet sich für kurze Linien.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Ein fester Stop-Loss kann nicht an Marktveränderungen angepasst werden und kann zu einem zu hohen Stop-Loss führen.

  2. Abhängig von den mehrfachen Filtersignalen des Indikators werden mehrere Stop-Loss-Trigger in der Berechnungszone angezeigt.

  3. Die Gebühren für Hochfrequenz-Transaktionen sind hoch.

  4. Die MACD- und RSI-Parameter müssen optimiert werden.

Die folgenden Punkte können weiter optimiert werden:

  1. Der Stoppverlust wird dynamisch angepasst, um die Stoppverlustquote an die ATR anzupassen.

  2. Vergrößern Sie die Brin-Band-Parameter und verkleinern Sie die Kanäle, um die Triggerfrequenz zu verringern.

  3. Optimierung der MACD- und RSI-Parameter, um die optimale Kombination zu finden.

  4. Filtern Sie nach dem Trend der Grosspirale und vermeiden Sie Rückschläge.

Zusammenfassen

Die Strategie als Ganzes ist ein typisches Short-Breakout-System, das Trends, Überkaufen und Überverkaufen kombiniert, um Short-Gelegenheiten effektiv zu erkennen. Es besteht jedoch ein gewisses Risiko, die Parameter müssen weiter getestet und optimiert werden, um das Risiko zu senken und die Gewinnrate zu erhöhen. Wenn die Parameter richtig angepasst werden, kann die Strategie zu einer der effizientesten Short-Strategie werden.

Strategiequellcode
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 1h
basePeriod: 15m
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/
// © pluckyCraft54926

//@version=5
strategy("5 Minute Scalp", overlay=true, margin_long=100, margin_short=100)

fast_length = input(title="Fast Length", defval=12)
slow_length = input(title="Slow Length", defval=26)
src = input(title="Source", defval=close)
signal_length = input.int(title="Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// Plot colors
col_macd = input(#2962FF, "MACD Line  ", group="Color Settings", inline="MACD")
col_signal = input(#FF6D00, "Signal Line  ", group="Color Settings", inline="Signal")
col_grow_above = input(#26A69A, "Above   Grow", group="Histogram", inline="Above")
col_fall_above = input(#B2DFDB, "Fall", group="Histogram", inline="Above")
col_grow_below = input(#FFCDD2, "Below Grow", group="Histogram", inline="Below")
col_fall_below = input(#FF5252, "Fall", group="Histogram", inline="Below")
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal
hist_1m = request.security(syminfo.tickerid,"1",hist [barstate.isrealtime ? 1 : 0])
hline(0, "Zero Line", color=color.new(#787B86, 50))
////////////////////////////////////////////////////
//plotting emas on the chart
len1 = input.int(9, minval=1, title="Length")
src1 = input(close, title="Source")
offset1 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out1 = ta.ema(src1, len1)
plot(out1, title="EMA9", color=color.blue, offset=offset1)

len2 = input.int(50, minval=1, title="Length")
src2 = input(close, title="Source")
offset2 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out2 = ta.ema(src2, len2)
plot(out2, title="EMA50", color=color.yellow, offset=offset2)

len3 = input.int(200, minval=1, title="Length")
src3 = input(close, title="Source")
offset3 = input.int(title="Offset", defval=0, minval=-500, maxval=500)
out3 = ta.ema(src3, len3)
plot(out3, title="EMA200", color=color.white, offset=offset3)
//////////////////////////////////////////////////////////////////
//Setting up the BB
/////////////////////////////////////////////////////////////
srcBB = hist_1m
lengthBBLong = input.int(94,title = "LengthBB Long", minval=1)
lengthBBShort = input.int(83,title = "LengthBB Short", minval=1)
multBB = input.float(2.0, minval=0.001, maxval=50, title="StdDev")
basisBBLong = ta.sma(srcBB, lengthBBLong)
basisBBShort = ta.sma(srcBB, lengthBBShort)
devBBLong = multBB * ta.stdev(srcBB, lengthBBLong)
devBBShort = multBB * ta.stdev(srcBB, lengthBBShort)
upperBB = basisBBShort + devBBShort
lowerBB = basisBBLong - devBBLong
offsetBB = input.int(0, "Offset", minval = -500, maxval = 500)

/////////////////////////////////////////
//aetting up rsi
///////////////////////////////////////////
rsilengthlong = input.int(defval = 11, title = "Rsi Length Long", minval = 1)
rlong=ta.rsi(close,rsilengthlong)
rsilengthshort = input.int(defval = 29, title = "Rsi Length Short", minval = 1)
rshort=ta.rsi(close,rsilengthshort)
///////////////////////////
//Only taking long and shorts, if RSI is above 51 or bellow 49
rsilong = rlong >= 51
rsishort = rshort <= 49
//////////////////////////////////////
//only taking trades if all 3 emas are in the correct order
long = out1 > out2 and out2 > out3
short = out1 < out2 and out2 < out3
/////////////////////////////////////


///////////////////////////////////////////
//setting up TP and SL
TP = input.float(defval = 0.5, title = "Take Profit %",step = 0.1) / 100
SL = input.float(defval = 0.3, title = "Stop Loss %", step = 0.1) / 100

longCondition = hist_1m <= lowerBB
longhight = input(defval=-10,title = "MacdTick Low")
if (longCondition and long and rsilong and hist_1m <= longhight) 
    strategy.entry("Long", strategy.long)

if (strategy.position_size>0)
    longstop = strategy.position_avg_price * (1-SL)
    longprofit = strategy.position_avg_price * (1+TP)
    strategy.exit(id ="close long",from_entry="Long",stop=longstop,limit=longprofit)

shortCondition = hist_1m >= upperBB
shorthight = input(defval=35,title = "MacdTick High")
if (shortCondition and short and rsishort and hist_1m >= shorthight)
    strategy.entry("short ", strategy.short)

shortstop = strategy.position_avg_price * (1+SL)
shortprofit = strategy.position_avg_price * (1-TP)

if (strategy.position_size<0)
    strategy.exit(id ="close short",stop=shortstop,limit=shortprofit)