Estrategia de ruptura a corto plazo del RSI MACD

El autor:¿ Qué pasa?, Fecha: 2023-10-07 16:08:53
Las etiquetas:

Resumen general

Esta es una estrategia de ruptura a corto plazo basada en el indicador MACD de 1 minuto y el indicador RSI. Combina el MACD para determinar la tendencia y encontrar puntos de ruptura, y el RSI para juzgar las condiciones de sobrecompra y sobreventa, para encontrar oportunidades de ruptura a corto plazo para el scalping largo y corto.

Estrategia lógica

La estrategia primero calcula el histograma MACD en el marco de tiempo de 1 minuto, y traza Bollinger Bands para determinar la situación de ruptura del histograma. Al mismo tiempo, calcula el indicador RSI para determinar el impulso largo y corto. Solo cuando los indicadores Bollinger Bands, MACD y RSI cumplan todos los criterios al mismo tiempo, se activarán las señales comerciales.

Específicamente, vaya largo cuando el histograma MACD de 1 minuto esté por debajo de la banda inferior y el RSI esté por encima de 51, y vaya corto cuando el histograma MACD esté por encima de la banda superior y el RSI esté por debajo de 49. También requiere que los promedios móviles de 9 días, 50 días y 200 días estén en orden antes de la negociación, para evitar la negociación de tendencias desfavorables.

Se toman salidas fijas de take profit y stop loss. Cierre la posición cuando el beneficio alcance el 0,5% o la pérdida alcance el 0,3%.

Análisis de ventajas

La estrategia combina el juicio de tendencia y el juicio de sobrecompra / sobreventa, que puede filtrar eficazmente las falsas rupturas.

Las ventajas son:

  1. El MACD juzga la dirección de la tendencia y el RSI juzga el impulso largo / corto, lo que puede evitar efectivamente el comercio en contra de la tendencia.

  2. Combinar bandas de Bollinger para juzgar las señales de ruptura puede filtrar las rupturas falsas.

  3. Al adoptar el TP/SL fijo, cada operación tiene una cierta expectativa de ganancia, que controla la pérdida de una sola operación.

  4. La frecuencia de negociación es alta, adecuada para el comercio a corto plazo.

Análisis de riesgos

También hay algunos riesgos con esta estrategia:

  1. El TP/SL fijo no puede ajustarse en función de los cambios del mercado, lo que puede dar lugar a SL demasiado pequeño y TP demasiado grande.

  2. Se basa en múltiples señales filtradas, lo que puede conducir a múltiples SL activadas en mercados de rango.

  3. La alta frecuencia de negociación conduce a altas comisiones.

  4. Los parámetros MACD y RSI necesitan una mayor optimización, los parámetros actuales pueden no ser óptimos.

Se pueden optimizar aún más los siguientes aspectos:

  1. Adoptar TP/SL dinámico, ajustar las relaciones basadas en ATR, etc.

  2. Ampliar las bandas de Bollinger para estrechar el canal, bajar la frecuencia de activación.

  3. Optimice los parámetros MACD y RSI para encontrar la mejor combinación.

  4. Filtro basado en las tendencias de los plazos más largos para evitar negociación en contra de la tendencia.

Resumen de las actividades

En general, esta estrategia es un sistema típico de ruptura a corto plazo, que incorpora tendencia, impulso y análisis de sobrecompra / sobreventa, que puede descubrir efectivamente oportunidades a corto plazo. Pero hay ciertos riesgos, que requieren más pruebas y optimización de parámetros para reducir los riesgos y mejorar la rentabilidad. Si se sintoniza correctamente, esta estrategia puede convertirse en una estrategia comercial eficiente a corto plazo.


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





Más.