La estrategia es una estrategia de ruptura de la línea corta basada en el diseño del indicador MACD de 1 minuto y el indicador RSI. Combina la capacidad del indicador MACD para juzgar la tendencia y encontrar puntos de ruptura, y el indicador RSI para juzgar el sobrecompra y la sobreventa, buscando oportunidades de ruptura de la línea corta para hacer movimientos largos y cortos.
La estrategia primero calcula la línea de dispersión del indicador MACD en el marco de tiempo de 1 minuto y traza la ruptura de la línea de dispersión de las bandas de Brin. Al mismo tiempo, calcula el indicador RSI para determinar el campo de fuerza múltiple. La señal de negociación se emite solo cuando las bandas de Brin, el MACD y el indicador RSI cumplen al mismo tiempo.
Concretamente, se hace más cuando la línea de concentración MACD de 1 minuto está por debajo de la línea de baja y el RSI está por encima de 51, se hace vacío cuando la línea de concentración MACD está por encima de la línea de alta y el RSI está por debajo de 49. Y se requiere que las líneas promedio de 9 días, 50 días y 200 días se alineen en orden para poder operar, para evitar operaciones de contracorriente desfavorables.
Tomar un Stop Loss fijo Exit cuando el beneficio alcanza el 0.5% o la pérdida alcanza el 0.3% para cerrar la posición.
Esta estrategia combina el juicio de tendencia y el juicio de sobreventa y sobreventa para filtrar eficazmente las brechas falsas. El stop loss fijo permite un cierto control de la expectativa para cada ganancia.
Las ventajas son las siguientes:
El MACD determina la dirección de la tendencia y el RSI determina la vía de la fuerza aérea, lo que evita la operación de contratiempo.
Combinado con el canal de la banda de Brin para determinar la señal de ruptura, se puede filtrar la falsa ruptura.
Se puede tomar un Stop Loss fijo, con una expectativa de ganancias por unidad, para controlar las pérdidas por unidad.
La frecuencia de las transacciones es alta, adecuada para operaciones de línea corta.
La estrategia también tiene sus riesgos:
El stop loss fijo no se puede ajustar a los cambios en el mercado, lo que puede causar un stop loss demasiado pequeño y un stop loss demasiado grande.
Dependiendo del indicador de múltiples señales de filtración, se producen múltiples detonadores de pérdida en la zona de ajuste.
Las comisiones de las operaciones de alta frecuencia son más caras.
Los parámetros del MACD y el RSI necesitan ser optimizados, y pueden no ser los mejores.
Los siguientes puntos pueden ser mejorados:
Se utiliza un stop loss dinámico que se ajusta a la proporción de stop loss según indicadores como el ATR.
Aumentar los parámetros de la banda de Brin reduce el canal y reduce la frecuencia de disparo.
Optimice los parámetros MACD y RSI para encontrar la combinación óptima de parámetros.
El filtro se realiza en función de la dirección de la tendencia de los ciclos mayores, evitando la negociación en contra.
La estrategia en su conjunto es un típico sistema de brecha de corta línea, que combina tendencia, sobrecompra y sobreventa, lo que permite detectar con eficacia las oportunidades de corta línea. Sin embargo, existe un cierto riesgo y se necesitan más pruebas y optimización de los parámetros para reducir el riesgo y aumentar la rentabilidad. Si los parámetros se ajustan adecuadamente, la estrategia puede convertirse en una de las estrategias de corta línea más eficientes.
/*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)