Una estrategia comercial a corto plazo que combina MACD y RSI


Fecha de creación: 2023-09-13 14:59:32 Última modificación: 2023-09-13 14:59:32
Copiar: 0 Número de Visitas: 684
1
Seguir
1617
Seguidores

Esta estrategia se llama estrategia de comercio de línea corta de la combinación de MACD y RSI. La estrategia utiliza una combinación de señales de ambos indicadores, MACD y RSI, para capturar cambios en el mercado durante períodos de línea corta y obtener ganancias.

El MACD es el promedio móvil de movimiento plano. Se compone de líneas rápidas, lentas y divergentes columnares. Cuando la línea rápida atraviesa la línea lenta, la energía dinámica que representa el cambio de precios a corto plazo comienza a aumentar, generando una señal de compra; cuando la línea rápida atraviesa la línea lenta, la energía dinámica disminuye, generando una señal de venta.

El RSI es un indicador de fuerza y debilidad relativa. Refleja sobrecompra y sobreventa en los precios. El RSI es sobreventa cuando está por debajo de 20 y sobrecompra cuando está por encima de 80. La zona de sobrecompra es una advertencia de caída de precios; la zona de sobreventa es una advertencia de rebote.

Las señales de negociación de esta estrategia provienen de dos partes:

En primer lugar, el MACD de la línea rápida y lenta de cruce y el cambio de la diferencia de la columna. Cuando la diferencia de la columna se convierte de negativo a positivo, indica que el precio tiene una dinámica de crecimiento en el corto plazo, y se puede comprar. Cuando la diferencia de la columna se convierte de positivo a negativo, indica que la dinámica se debilita, y se debe vender.

En segundo lugar, el RSI es sobrecomprado y sobrevendido. En combinación con el RSI, se puede filtrar parte de las señales falsas generadas por el MACD. Comprar solo cuando el RSI es bajo y vender cuando el RSI es alto puede aumentar la tasa de éxito.

La ventaja de esta estrategia es la combinación de las ventajas de los dos indicadores, lo que mejora la precisión de las señales de negociación. Captura los cambios a corto plazo a tiempo y tiene sensibilidad.

En resumen, esta estrategia es adecuada para operaciones dinámicas con ciclos cortos de línea, que pueden aprovechar las oportunidades de ganancias generadas por la inversión a corto plazo del mercado. Sin embargo, se requiere la ayuda de medidas activas de gestión de riesgos y un seguimiento cercano de la evolución del mercado para ajustar los parámetros de la estrategia a tiempo.

Código Fuente de la Estrategia
/*backtest
start: 2022-09-06 00:00:00
end: 2023-09-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Uraynium V3", overlay=false, pyramiding = 0, calc_on_every_tick=true, precision=1, currency="USD", default_qty_value=10, default_qty_type=strategy.cash,initial_capital=100,commission_type=strategy.commission.percent,commission_value=0.1) 
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
inTimeframe()  => true

overSold      = input( 20 , minval = 1, title = "RSI Oversold")
overBought    = input( 80 , minval = 1, title = "RSI Overbought")
rsiLength     = input(14, minval = 1, title = "RSI Length")
fastLength    = input(12, minval = 1, title = "MACD fast")
slowlength    = input(26, minval = 1, title = "MACD slow")
MACDLength    = input( 9, minval = 1, title = "MACD length")
stopLoss      = input(   10, minval = 1, title = "Stop Loss (price %)")
takeProfit    = input(   50, minval = 1, title = "Take Profit (price %)")
triggerPosLvl = input(    2, minval = 1 ,title ="Take Position Threshold", type=input.float)
src = close

// === CALC ===

stopLossValue        = close*(stopLoss/100)/syminfo.mintick
takeProfitValue      = close*(takeProfit/100)/syminfo.mintick

vrsi = rsi(src, rsiLength)
//avgRSI = vrsi*0.5 + vrsi[1]*0.25 + vrsi[2]*0.125 + vrsi[3]*0.0625
avgRSI = (4*vrsi + 3*vrsi + 2*vrsi[2] + vrsi[3])/10
[macdLine, signalLine, histLine] = macd(src, fastLength, slowlength, MACDLength)


MACDdelta         = signalLine - macdLine
isMACDRunLong     = signalLine > macdLine
isMACDRunShort    = macdLine < signalLine
isMACDSwitchLong  = crossover(MACDdelta, 0)
isMACDSwitchShort = crossunder(MACDdelta, 0)
isMACDCross       = crossover(MACDdelta, 0) or crossunder(MACDdelta, 0)

buySignal =  (histLine-histLine[1]) + (avgRSI - avgRSI[1])

// === ACTION ===
isPosLong    = strategy.position_size > 0
isPosShort   = strategy.position_size < 0
isNoMarginPos= strategy.position_size == 0
entryLong  = (isNoMarginPos or isPosShort) and ( buySignal >  triggerPosLvl )
entryShort = (isNoMarginPos or isPosLong ) and ( buySignal < -triggerPosLvl ) 

if inTimeframe()
    strategy.entry("Long" , strategy.long,  comment="Entry Long",  when=entryLong )
    strategy.entry("Short", strategy.short, comment="Entry Short", when=entryShort)
    strategy.entry("Long" , strategy.long,  comment="Switch Long", when=entryLong)
    strategy.entry("Short", strategy.short, comment="Switch Short",when=entryShort)
    strategy.exit("Stop (long SL/TP)",  loss=stopLossValue, profit=takeProfitValue, when=entryLong )  
    strategy.exit("Stop (short SL/TP)", loss=stopLossValue, profit=takeProfitValue, when=entryShort)  
    strategy.close("Long" , when=entryShort)
    strategy.close("Short", when=entryLong)    

// === DRAW ===
posColor = isNoMarginPos ?  color.black : isPosLong ? color.green : color.red
plot(100, color=posColor,style=plot.style_area, transp=90, histbase=0)
        
plot(buySignal+overBought, color=color.green)
plot(50+macdLine/4, color=color.yellow)
plot(50+signalLine/4, color=color.orange)
histColor = histLine[1]-histLine > 0 ? color.red : color.green
plot(overSold+histLine/2, color=histColor, style=plot.style_histogram, histbase=overSold, transp=50, linewidth=2)

rsicolor = avgRSI>overBought ? color.red : avgRSI<overSold ? color.green : color.blue
plot(avgRSI,color=rsicolor, linewidth=2)
//plot(vrsi,color=color.purple, linewidth=2)
hline(overBought, color=color.red)
hline(overSold, color=color.green)
hline(50, color=color.gray)