Estrategias de trading bidireccionales largas y cortas basadas en MACD y RSI


Fecha de creación: 2023-10-09 15:33:17 Última modificación: 2023-10-09 15:33:17
Copiar: 0 Número de Visitas: 701
1
Seguir
1617
Seguidores

Descripción general

Esta estrategia combina dos indicadores, el MACD y el RSI, y se realiza en el caso de que la dirección de la tendencia no esté clara, al mismo tiempo que se realizan más operaciones de corto plazo para obtener ganancias adicionales.

Principio de estrategia

  1. Calcula el EMA rápido (línea de 12 días) y el EMA lento (línea de 26 días)
  2. Calcula la diferencia de convergencia MACD ((EMA rápido menos el EMA lento)
  3. Calcula el promedio móvil de 9 días del MACD como línea de señal
  4. Calcula el RSI de 14 días
  5. Cuando el MACD <-0.1, el RSI <27 y el EMA rápido es menor que el EMA lento, haga más
  6. Cuando el MACD es mayor que 0.125 y el RSI es mayor que 81, y el EMA rápido es mayor que el EMA lento, se debe hacer un descubierto
  7. Establecer paradas, paradas y paradas móviles para administrar posiciones

Análisis de las ventajas

  1. El comercio de divisas al mismo tiempo puede generar ganancias extra en situaciones fuera de tendencia
  2. La combinación de EMA de tendencia y RSI de reversión puede mejorar la calidad de la señal
  3. El uso de Stop Loss móvil para bloquear ganancias puede controlar el riesgo de pérdidas

Análisis de riesgos

  1. Las transacciones bidireccionales requieren más fondos para respaldar los requerimientos de garantía
  2. La inversión en el mercado puede ser para detener una posición excedente
  3. La configuración incorrecta de los parámetros puede causar transacciones demasiado frecuentes

La solución al riesgo:

  1. Apoyo financiero suficiente para controlar el tamaño de las posiciones
  2. Ajuste razonablemente la distancia de parada para evitar una parada demasiado densa
  3. Optimización de parámetros, reducción de la frecuencia de las operaciones

Dirección de optimización

  1. Se puede considerar la combinación de indicadores de volatilidad para optimizar el momento de entrada
  2. Puede probar diferentes combinaciones de parámetros para encontrar el mejor
  3. Optimización de las estrategias de pérdidas en función de las condiciones del mercado, como la pérdida de seguimiento
  4. Parámetros de optimización automática que pueden combinarse con algoritmos de aprendizaje automático

Resumir

Esta estrategia permite el comercio bidireccional a través de una combinación de MACD y RSI. Utiliza un stop loss móvil para bloquear ganancias y puede obtener ganancias excedentarias en situaciones fuera de la tendencia. La estrategia puede optimizar aún más la configuración de los parámetros, la estrategia de stop loss, etc., para obtener ganancias excedentarias más estables.

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

//@version=3
// Revision:        290
// Author:          @Hugo_Moriceau
//study("Moriceau_Crypto_strategies_Long_short_indicator_thesis",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Moriceau_Crypto_strategies_Long_short_indicator",overlay=true)

// === GENERAL INPUTS ===

fast = 12, slow = 26
fastMA = ema(close, fast)
slowMA = ema(close, slow)

macd = fastMA - slowMA
signal = sma(macd, 9)
rsi = rsi(close,14)

dataB = macd < -0.1  and rsi<27 and fastMA < slowMA
// data1 = macd > 0.125  and rsi>81 and fastMA> slowMA
dataS = macd > 0.125 and rsi > 81 and fastMA > slowMA

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")

// === LOGIC ===

// is fast ma above slow ma?
Achat = macd < -0.1  and rsi < 27 and fastMA < slowMA ? true : false
vente = macd > 0.125 and rsi > 81 and fastMA > slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = vente ? Achat ? false : true : Achat ? true : false

// === Plot Setting ===

plot(fastMA,color=red)
plot(slowMA,color=blue)
barcolor(color=iff(fastMA > slowMA, yellow, na))
barcolor(color=iff(fastMA < slowMA, black, na))
//barcolor(color=iff(macd > 0.12*close , fuchsia, na))
//barcolor(color=iff(macd < -0.1*close , lime, na))
plotchar(dataB, char='B',color=black,size = size.auto,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.auto,location = location.abovebar,transp= 0)

//fast = plot(maFast, title = "FastMA", color = yellow, linewidth = 2, style = line, transp = 50)
//slow = plot(maSlow, title = "SlowMA", color = black, linewidth = 2, style = line, transp = 50)

// === BACKTEST RANGE ===
FromMonth = input(defval = 05, title = "From Month", minval = 1)
FromDay   = input(defval = 23, title = "From Day", minval = 1)
FromYear  = input(defval = 2021, title = "From Year", minval = 2017)
ToMonth   = input(defval = 5, title = "To Month", minval = 1)
ToDay     = input(defval = 25, title = "To Day", minval = 1)
ToYear    = input(defval = 2021, title = "To Year", minval = 2017)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 2500, title = "Take Profit", minval = 28)
inpStopLoss     = input(defval = 600, title = "Stop Loss", minval = 15)
inpTrailStop    = input(defval = 300, title = "Trailing Stop Loss", minval = 5)
inpTrailOffset  = input(defval = 50, title = "Trailing Stop Loss Offset", minval = 1)

// === RISK MANAGEMENT VALUE PREP ===

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na


// === STRATEGY - LONG POSITION EXECUTION ===

enterLong() => not tradeDirection[1] and tradeDirection 
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Achat", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "TP 50% Sell", when = exitLong()) // ...and when to get out

// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Vente", long = false, when = enterShort())
strategy.close(id = "Vente", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===

// finally, make use of all the earlier values we got prepped
strategy.exit("Vente", from_entry = "Vente", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Short", from_entry = "Achat", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)