La stratégie de rupture à court terme du RSI MACD

Auteur:ChaoZhang est là., Date: 2023-10-07 16:08:53 Je suis désolé
Les étiquettes:

Résumé

Il s'agit d'une stratégie de rupture à court terme basée sur l'indicateur MACD de 1 minute et l'indicateur RSI. Il combine le MACD pour déterminer la tendance et trouver des points de rupture, et le RSI pour juger des conditions de surachat et de survente, pour trouver des opportunités de rupture à court terme pour le scalping long et court.

La logique de la stratégie

La stratégie calcule d'abord l'histogramme MACD dans le délai d'une minute, et trace les bandes de Bollinger pour déterminer la situation de rupture de l'histogramme. En même temps, elle calcule l'indicateur RSI pour déterminer l'élan long et court.

En particulier, allez long lorsque l'histogramme MACD de 1 minute est en dessous de la bande inférieure et que le RSI est supérieur à 51, et allez court lorsque l'histogramme MACD est au-dessus de la bande supérieure et que le RSI est en dessous de 49.

Il prend des sorties fixes de profit et de stop-loss. Fermez la position lorsque le profit atteint 0,5% ou la perte atteint 0,3%.

Analyse des avantages

La stratégie combine le jugement de tendance et le jugement de surachat/survente, ce qui peut filtrer efficacement les fausses ruptures.

Les avantages sont les suivants:

  1. Le MACD évalue la direction de la tendance et le RSI évalue la dynamique longue/courte, ce qui permet d'éviter efficacement de négocier contre la tendance.

  2. La combinaison des bandes de Bollinger pour juger des signaux de rupture peut filtrer les fausses ruptures.

  3. En adoptant un TP/SL fixe, chaque transaction a une certaine attente de profit, ce qui contrôle les pertes d'une seule transaction.

  4. La fréquence de négociation est élevée, adaptée aux transactions à court terme.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Le TP/SL fixe ne peut pas être ajusté en fonction des changements du marché, ce qui peut entraîner un SL trop faible et un TP trop élevé.

  2. Il repose sur plusieurs signaux filtrés, ce qui peut entraîner plusieurs SL déclenchés sur les marchés à plage.

  3. La fréquence élevée des transactions entraîne des commissions élevées.

  4. Les paramètres MACD et RSI nécessitent une optimisation supplémentaire, les paramètres actuels peuvent ne pas être optimaux.

Les aspects suivants peuvent être encore optimisés:

  1. Adopter le TP/SL dynamique, ajuster les rapports basés sur l'ATR, etc.

  2. Élargir les bandes de Bollinger pour réduire le canal, abaisser la fréquence de déclenchement.

  3. Optimiser les paramètres MACD et RSI pour trouver la meilleure combinaison.

  4. Filtre basé sur les tendances sur des périodes plus longues afin d'éviter de négocier contre la tendance.

Résumé

Dans l'ensemble, cette stratégie est un système de rupture à court terme typique, incorporant une analyse de tendance, de dynamique et de surachat/survente, qui peut effectivement détecter des opportunités à court terme.


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





Plus de