MACD RSI Kurzfristige Ausbruchstrategie

Schriftsteller:ChaoZhang, Datum: 2023-10-07 16:08:53
Tags:

Übersicht

Dies ist eine kurzfristige Breakout-Strategie, die auf dem 1-minütigen MACD-Indikator und dem RSI-Indikator basiert. Es kombiniert MACD, um den Trend zu bestimmen und Breakout-Punkte zu finden, und RSI, um überkaufte und überverkaufte Bedingungen zu beurteilen, um kurzfristige Breakout-Möglichkeiten für langes und kurzes Scalping zu finden.

Strategie Logik

Die Strategie berechnet zunächst das MACD-Histogramm im 1-minütigen Zeitrahmen und zeichnet Bollinger-Bänder aus, um die Histogramm-Breakout-Situation zu bestimmen. Gleichzeitig berechnet sie den RSI-Indikator, um die lange und die kurze Dynamik zu bestimmen. Nur wenn die Bollinger-Bänder, MACD und RSI-Indikatoren alle die Kriterien gleichzeitig erfüllen, werden Handelssignale ausgelöst.

Gehen Sie insbesondere lang, wenn das 1-Minuten-MACD-Histogramm unter dem unteren Band liegt und der RSI über 51 liegt, und kurz, wenn das MACD-Histogramm über dem oberen Band liegt und der RSI unter 49 liegt. Es erfordert auch, dass die gleitenden Durchschnitte für 9 Tage, 50 Tage und 200 Tage vor dem Handel in Ordnung sind, um ungünstigen Trendhandel zu vermeiden.

Sie nehmen feste Take-Profit- und Stop-Loss-Ausgänge.

Analyse der Vorteile

Die Strategie kombiniert Trendbeurteilung und Überkauf-/Überverkaufsbeurteilung, die falsche Ausbrüche effektiv herausfiltern kann.

Die Vorteile sind:

  1. Der MACD beurteilt die Trendrichtung und der RSI die lange/kurze Dynamik, wodurch der Handel effektiv gegen den Trend vermieden werden kann.

  2. Die Kombination von Bollinger Bands, um Breakout-Signale zu beurteilen, kann falsche Breakouts herausfiltern.

  3. Durch die Einführung eines festen TP/SL hat jeder Handel eine gewisse Gewinnerwartung, die den Verlust eines einzelnen Handels kontrolliert.

  4. Die Handelsfrequenz ist hoch und für den kurzfristigen Handel geeignet.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Der feste TP/SL kann nicht anhand von Marktveränderungen angepasst werden, was zu einem zu geringen SL und zu einem zu großen TP führen kann.

  2. Es beruht auf mehreren gefilterten Signalen, die in Bereichsgebundenen Märkten zu mehreren SL führen können.

  3. Die hohe Handelsfrequenz führt zu hohen Provisionen.

  4. Die MACD- und RSI-Parameter müssen weiter optimiert werden, die aktuellen Parameter sind möglicherweise nicht optimal.

Die folgenden Aspekte können weiter optimiert werden:

  1. Dynamische TP/SL, Anpassung der Verhältnisse auf Basis von ATR usw.

  2. Breiter Bollinger-Bänder, um den Kanal zu verengen, senken Sie die Auslösfrequenz.

  3. Optimieren Sie die MACD- und RSI-Parameter, um die beste Kombination zu finden.

  4. Filter auf der Grundlage höherer zeitlicher Trends, um gegen den Trend zu handeln.

Zusammenfassung

Insgesamt ist diese Strategie ein typisches kurzfristiges Breakout-System, das Trend-, Dynamik- und Überkauf-/Überverkaufsanalyse enthält, die kurzfristige Chancen effektiv entdecken kann.


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





Mehr