La estrategia de promedio móvil de polígonos construye un polígono con múltiples promedios móviles de diferentes períodos y utiliza el avance del polígono como señales comerciales.
La estrategia traza varias EMA, como EMA de 3 períodos, 7 períodos y 13 períodos, para formar un canal polígono. Cuando el precio se rompe por encima de las EMA, se genera una señal larga. Cuando el precio se rompe por debajo de las EMA, se genera una señal corta. Esto ayuda a evitar muchas roturas falsas.
El código determina las señales de ruptura comparando el precio de cierre con las EMA utilizando condiciones como close>ema1 y ema1>ema2 y ema2>ema3.
La mayor ventaja de esta estrategia es su capacidad para capturar efectivamente la dirección de la tendencia principal mediante el uso de múltiples promedios móviles como filtros para evitar el ruido.
El principal riesgo es que esta estrategia no identifica los puntos de inversión de tendencia y puede conducir a pérdidas durante las inversiones de tendencia. La configuración inadecuada del período MA también puede resultar en exceso de operaciones o señales rezagadas. Los riesgos pueden reducirse optimizando las combinaciones MA, agregando indicadores de inversión, ampliando el rango de stop loss, etc.
La estrategia se puede optimizar en los siguientes aspectos:
Optimizar los períodos de admisión para encontrar la mejor combinación.
Agregue indicadores de reversión como RSI y MACD para salir de las operaciones a tiempo.
Optimizar el rango de pérdida de parada y el desplazamiento para reducir la pérdida de parada prematura.
Optimizar los parámetros de los diferentes productos para mejorar la adaptabilidad.
La estrategia del promedio móvil de polígonos es generalmente un sistema de seguimiento de tendencias confiable y efectivo. Su mayor fortaleza es capturar la tendencia principal mientras se filtra el ruido significativamente. Pero tiene algunas limitaciones en la identificación de reversiones. Podemos mejorarla mediante la optimización de parámetros, la adición de indicadores auxiliares, etc. Es adecuado para mercados con tendencias obvias y puede generar ganancias estables si se usa correctamente.
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Crypto-Oli //@version=4 strategy("BLANK Strategy + TSL", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, pyramiding=1, commission_value=0.075, overlay=true) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2019, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// /// YOUR INPUTS BELOW - DELET EXAPLES /// ema1=ema(close,input(3)) ema2=ema(close,input(7)) ema3=ema(close,input(13)) /// PLOTS IF YOU NEED BELOW - DELET EXAPLES /// plot(ema1, "EMA1", color.yellow) plot(ema2, "EMA2", color.white) plot(ema3, "EMA3", color.blue) /// YOUR CONDITIONS BELOW - DELET EXAPLES /// longCondition = close>ema1 and ema1>ema2 and ema2>ema3 and time_cond shortCondition = close<ema1 and ema1<ema2 and ema2<ema3 and time_cond /// EXECUTION /// if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Long Exit", "Long", trail_points = close * 0.05 / syminfo.mintick, trail_offset = close * 0.02 / syminfo.mintick) if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Short Exit", "Short", trail_points = close * 0.05 / syminfo.mintick, trail_offset = close * 0.02 / syminfo.mintick)