Estrategia de trading de criptomonedas basada en MACD


Fecha de creación: 2023-09-19 11:21:42 Última modificación: 2023-09-19 11:21:42
Copiar: 0 Número de Visitas: 759
1
Seguir
1617
Seguidores

Descripción general

La estrategia es una estrategia de negociación de puntos de venta y venta de criptomonedas basadas en el indicador de diferencia de precios agregado de media móvil (MACD) y el índice de fuerza relativa (RSI). Se utiliza para determinar la tendencia del mercado y las tendencias de sobreventa y sobreventa mediante el cálculo de diferencias en las medias móviles a corto y largo plazo, en combinación con el RSI, para proporcionar señales para la decisión de negociación.

Principio de estrategia

  1. Calcular el EMA de 12 días y el EMA de 26 días como promedios móviles de corto y largo plazo, respectivamente

  2. Calcula el diferencial entre el EMA a corto y largo plazo como un gráfico de columnas MACD

  3. Calcula el EMA de 9 días del MACD como línea de señal

  4. Calcula el RSI de 14 días para determinar si hay sobreventa o sobrecompra

  5. Cuando el MACD atraviesa la línea de señal y el RSI es mayor que 81, muestra una señal de compra

  6. Cuando el MACD está por debajo de la línea de señal y el RSI es menor a 27, muestra una señal de venta

  7. Entradas y salidas con el módulo de política incorporado

Análisis de las ventajas

  1. El indicador MACD puede identificar tendencias y cambios de tendencia, el indicador RSI puede mostrar sobrecompras y sobreventas, y la combinación de ambos puede mejorar la precisión de las señales de negociación

  2. Los movimientos de arriba a abajo del eje cero del MACD representan la dirección y la intensidad de los cambios en las tendencias a corto y largo plazo, que sirven de base para determinar la dirección del mercado.

  3. Las zonas altas del RSI representan la probabilidad de sobrecalentamiento y sobrecompra, mientras que las bajas del RSI representan la probabilidad de sobreventa, lo que proporciona una base para buscar puntos de venta

  4. Las señales de negociación son simples y claras, y las operaciones son fáciles de ejecutar según las reglas.

  5. Parámetros configurables para optimizar y adaptarse a diferentes entornos de mercado

Análisis de riesgos

  1. Los datos en los que se basan el MACD y el RSI son susceptibles a brechas y anomalías, lo que puede generar señales erróneas

  2. La configuración de parámetros fijos puede no adaptarse a los cambios en el mercado y necesita optimización

  3. Las señales de compra y venta pueden estar retrasadas y no permitir la compra y venta en los puntos de inflexión.

  4. Las posiciones están vacías y no pueden aprovecharse de la crisis.

Dirección de optimización

  1. Prueba diferentes combinaciones de parámetros para encontrar el mejor

  2. Aumentar las condiciones de filtración para evitar falsas brechas

  3. Aumentar las estrategias de detención de pérdidas y reducir las pérdidas de transacciones unilaterales

  4. Aumentar la gestión de la posición, aumentar la posición en una tendencia y reducir la posición en una convulsión

  5. En combinación con otros indicadores, busca puntos de venta y venta más precisos

  6. Pruebas en diferentes variedades y períodos de tiempo

Resumir

La estrategia utiliza las ventajas complementarias de los dos indicadores MACD y RSI para identificar la dirección de la tendencia y los puntos de venta y venta. La estabilidad de la estrategia y el factor de ganancias pueden mejorarse mediante la optimización de los parámetros y el aumento de las condiciones de filtración. El ajuste adecuado del stop loss y la gestión de la posición también ayuda a aumentar los niveles de ganancias y reducir el riesgo.

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

//@version=3
// Revision:        5
// Author:          @Hugo_Moriceau
//study("Thesis_EMLYON_Withdate-strategies-Daily_Crypto_Moriceau_indicator",overlay=true)

// Pyramide 10 order size 100, every tick

strategy("Daily_Crypto_Moriceau_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)



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

// === LOGIC ===

// is fast ma above slow ma?
aboveBelow = fastMA >= slowMA ? true : false

// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? 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))
dataS= macd > 0.125 and rsi>81 and fastMA > slowMA
dataB= macd < -0.1  and rsi<27 and fastMA< slowMA


plotchar(dataB, char='B',color=black,size = size.tiny,location = location.belowbar,transp= 0)  
plotchar(dataS, char='S',color=black,size = size.tiny,location = location.abovebar,transp= 0)


// === BACKTEST RANGE ===
FromMonth = input(defval = 01, title = "From Month", minval = 1)
FromDay   = input(defval = 01, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 2, title = "To Month", minval = 1)
ToDay     = input(defval = 10, title = "To Day", minval = 1)
ToYear    = input(defval = 2019, title = "To Year", minval = 2018)


// === STRATEGY RELATED INPUTS ===+
// the risk management inputs
inpTakeProfit   = input(defval = 20000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 1500, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 100, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === 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 = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", 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 = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

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

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