Esta estrategia es una estrategia de cuadrícula de posiciones variables que sigue la tendencia y utiliza principalmente patrones EMA, RSI y engulfing para determinar la dirección de la tendencia y el momento de entrada. La estrategia ajusta las posiciones de stop-loss y take-profit basadas en el tamaño del cuerpo del patrón engulfing, mientras que permite a los usuarios elegir ir solo largo, solo corto o ambos. Además, la estrategia proporciona la opción de usar el MACD como un filtro de tendencia.
La estrategia utiliza una EMA de 200 períodos para determinar la dirección general de la tendencia. Cuando el precio está por encima de la EMA, se considera una tendencia alcista, y cuando está por debajo de la EMA, se considera una tendencia bajista. Se utiliza un RSI de 9 períodos para medir el impulso, con un RSI por encima de 50 que indica un impulso alcista más fuerte y por debajo de 50 que indica un impulso bajista más fuerte. La estrategia también utiliza patrones alcistas y bajistas como señales de entrada. Cuando la EMA, el RSI y las señales del patrón de engulfing están de acuerdo, la estrategia abre una posición.
Las posiciones de stop-loss y take-profit se determinan en función del tamaño del cuerpo del patrón de engulfing. La stop-loss se establece en el doble del tamaño del cuerpo de engulfing, con un porcentaje mínimo de stop-loss del 0,3% del precio de entrada para evitar frecuentes stop-outs debido a distancias de stop-loss pequeñas. La posición de take-profit se establece multiplicando la distancia de stop-loss por una relación riesgo-recompensación predefinida para garantizar una relación riesgo-recompensación fija. Además, la estrategia proporciona la opción de usar el MACD como filtro de tendencia, considerando una tendencia alcista más fuerte cuando la línea MACD está por encima de la línea de señal y una tendencia bajista más fuerte cuando la línea MACD está por debajo de la línea de señal.
Seguimiento de tendencias: La estrategia utiliza múltiples indicadores para determinar la tendencia, lo que ayuda a entrar en las primeras etapas de la formación de una tendencia y capturar los movimientos de tendencia.
Dinámico stop-loss y take-profit: Al ajustar las posiciones stop-loss y take-profit en función del tamaño del cuerpo del patrón de engulfamiento, la estrategia amplía el rango de take-profit cuando la tendencia es fuerte y reduce el rango de stop-loss cuando la tendencia es débil, lo que permite una gestión flexible de las posiciones.
Los usuarios pueden personalizar la dirección de negociación, las preferencias de riesgo y otros parámetros para adaptarse a las diferentes necesidades del usuario.
La opción de utilizar el MACD como filtro de tendencia confirma aún más la solidez de la tendencia y mejora la precisión de la entrada.
Identificación incorrecta de tendencias: aunque la estrategia utiliza múltiples indicadores para determinar la tendencia, todavía puede haber casos en que la tendencia se identifique incorrectamente, lo que conduce a pérdidas.
Rango de estrechamiento: si el cuerpo del patrón de engulfing es pequeño, las distancias de stop-loss y take-profit serán muy cercanas, lo que conduce a un deterioro de la relación riesgo-recompensa.
Optimización de parámetros: los parámetros óptimos pueden variar significativamente entre diferentes instrumentos y plazos, lo que requiere que los usuarios prueben y optimicen continuamente.
Identificación de tendencias: Considere la introducción de herramientas adicionales de confirmación de tendencias, como bandas de Bollinger, índice direccional medio (ADX, por sus siglas en inglés), etc., para mejorar la precisión de la identificación de tendencias.
Optimización de las pérdidas y ganancias: Considere la posibilidad de incorporar indicadores relacionados con la volatilidad, como el ATR, para ajustar dinámicamente las distancias de pérdidas y ganancias, reduciendo el riesgo asociado con rangos pequeños.
Tamaño de la posición: ajusta dinámicamente el tamaño de la posición en función de la fuerza de la tendencia, la rentabilidad de la cuenta, etc., aumentando el tamaño de la posición cuando la tendencia es fuerte y consistentemente rentable, y reduciendo el costo de las operaciones frecuentes.
Coordinación de múltiples marcos de tiempo e instrumentos: validar las señales de tendencia en todos los marcos de tiempo e instrumentos para mejorar la precisión de la identificación de tendencias, diversificando al mismo tiempo el riesgo de un solo instrumento o marco de tiempo.
Esta estrategia de cuadrícula de posiciones variable de seguimiento de tendencias tiene un buen rendimiento en los mercados de tendencias mediante el uso de múltiples indicadores para determinar la dirección y la fuerza de la tendencia, el ajuste dinámico de la posición de stop-loss, take-profit y posicionamiento para capturar tendencias y lograr rendimientos excedentes. Sin embargo, el rendimiento de la estrategia es promedio en mercados poco claros o con frecuencia fluctuantes. Por lo tanto, al usar esta estrategia, es crucial centrarse en la selección de instrumentos de tendencia y el ajuste de parámetros a medida que cambian las condiciones del mercado. Además, hay espacio para una mayor optimización en la identificación de tendencias, la colocación de stop-loss y take-profit, el tamaño de la posición y la coordinación multi-tiempo y multi-instrumento.
/*backtest start: 2024-02-01 00:00:00 end: 2024-02-29 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © niosupetranmartinez //@version=5 strategy("Trend Follower Scalping Strategy", overlay=true, process_orders_on_close = true) // Inputs emaLen = input(200, 'EMA Length') rsiLen = input(9, 'RSI Length') trendDirection = input.string("Both", 'Trend Direction', options=["Long Only", "Short Only", "Both"]) risk_reward_ratio = input(2, 'Risk Reward Ratio') useMacdFilter = input.bool(true, "Use MACD Filter") macdTimeframe = input("5", "MACD Timeframe") // EMA and RSI ema200 = ta.ema(close, emaLen) customRsi = ta.rsi(close, rsiLen) // MACD Filter [macdLine, signalLine, _] = request.security(syminfo.tickerid, macdTimeframe, ta.macd(close, 12, 26, 9)) // Majority Body Candle Identification Function isMajorityBodyCandle(candleOpen, candleClose, high, low) => bodySize = math.abs(candleClose - candleOpen) fullSize = high - low bodySize / fullSize > 0.6 // Engulfing Patterns isBullishEngulfing = close > open and close[1] < open[1] and (close - open) > (open[1] - close[1]) and isMajorityBodyCandle(open, close, high, low) isBearishEngulfing = close < open and close[1] > open[1] and (open - close) > (close[1] - open[1]) and isMajorityBodyCandle(open, close, high, low) // Entry Conditions with MACD Filter longCondition = close > ema200 and customRsi > 50 and isBullishEngulfing and (not useMacdFilter or macdLine > signalLine) shortCondition = close < ema200 and customRsi < 50 and isBearishEngulfing and (not useMacdFilter or macdLine < signalLine) // Trade Execution var float stopLossPrice = na var float entryPrice = na // Long Entry if (longCondition and (trendDirection == "Long Only" or trendDirection == "Both")) entryPrice := close engulfingBodySize = math.abs(close - open) minimumStopLoss = entryPrice * 0.997 calculatedStopLoss = entryPrice - (engulfingBodySize * 2) stopLossPrice := calculatedStopLoss < minimumStopLoss ? calculatedStopLoss : minimumStopLoss risk = entryPrice - stopLossPrice takeProfitPrice = entryPrice + (risk_reward_ratio * risk) strategy.entry("Long", strategy.long) strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice) // Short Entry if (shortCondition and (trendDirection == "Short Only" or trendDirection == "Both")) entryPrice := close engulfingBodySize = math.abs(open - close) minimumStopLoss = entryPrice * 1.003 calculatedStopLoss = entryPrice + (engulfingBodySize * 2) stopLossPrice := calculatedStopLoss > minimumStopLoss ? calculatedStopLoss : minimumStopLoss risk = stopLossPrice - entryPrice takeProfitPrice = entryPrice - (risk_reward_ratio * risk) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice) // Plotting plot(ema200, color=color.blue, linewidth=2, title="EMA 200")