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.
Calcular el EMA de 12 días y el EMA de 26 días como promedios móviles de corto y largo plazo, respectivamente
Calcula el diferencial entre el EMA a corto y largo plazo como un gráfico de columnas MACD
Calcula el EMA de 9 días del MACD como línea de señal
Calcula el RSI de 14 días para determinar si hay sobreventa o sobrecompra
Cuando el MACD atraviesa la línea de señal y el RSI es mayor que 81, muestra una señal de compra
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
Entradas y salidas con el módulo de política incorporado
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
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.
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
Las señales de negociación son simples y claras, y las operaciones son fáciles de ejecutar según las reglas.
Parámetros configurables para optimizar y adaptarse a diferentes entornos de mercado
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
La configuración de parámetros fijos puede no adaptarse a los cambios en el mercado y necesita optimización
Las señales de compra y venta pueden estar retrasadas y no permitir la compra y venta en los puntos de inflexión.
Las posiciones están vacías y no pueden aprovecharse de la crisis.
Prueba diferentes combinaciones de parámetros para encontrar el mejor
Aumentar las condiciones de filtración para evitar falsas brechas
Aumentar las estrategias de detención de pérdidas y reducir las pérdidas de transacciones unilaterales
Aumentar la gestión de la posición, aumentar la posición en una tendencia y reducir la posición en una convulsión
En combinación con otros indicadores, busca puntos de venta y venta más precisos
Pruebas en diferentes variedades y períodos de tiempo
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.
/*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)