La estrategia de inversión de promedio móvil dual genera señales de negociación mediante el cálculo de promedios móviles simples de dos períodos diferentes: corto plazo y largo plazo.
Esta estrategia establece dos promedios móviles simples con diferentes períodos de duración a través de los parámetros de entrada, con el MA de corto período conocido como la línea rápida y el MA de largo período conocido como la línea lenta. La línea rápida reacciona más rápido a los cambios de precios y captura tendencias a corto plazo, mientras que la línea lenta reacciona más lentamente a los cambios de precios y filtra el ruido del mercado a corto plazo, capturando la tendencia principal. Cuando la línea rápida cruza por encima de la línea lenta, indica que la tendencia alcista se está fortaleciendo y se toma una posición larga. Cuando la línea rápida cruza por debajo de la línea lenta, indica que la tendencia bajista se está fortaleciendo y se toma una posición corta.
Específicamente, la estrategia calcula los dos MAs utilizando la función sma(), asignando el resultado a xSMA (línea lenta) y línea rápida. Los MAs se calculan en función del precio de cierre. Cuando el precio de cierre cruza por encima de xSMA, se toma una posición larga. Cuando el precio de cierre cruza por debajo de xSMA, se toma una posición corta. La estrategia también establece un límite de rango de tiempo de negociación, por lo que las señales de negociación solo se generan dentro del rango de tiempo especificado.
Los puntos de take profit y stop loss se establecen para cada operación, y el beneficio se toma o la stop loss se activa inmediatamente cuando el precio alcanza el nivel de take profit o stop loss. Mientras tanto, la estrategia traza la relación precio vs MA en las barras utilizando la función barcolor - las barras son de color verde durante posiciones largas, rojo durante posiciones cortas y azul cuando son planas.
El riesgo puede reducirse ajustando los parámetros de MA, optimizando la estrategia take profit/stop loss, eliminando las limitaciones de tiempo o estableciendo períodos de tiempo de negociación más razonables.
La estrategia de inversión de promedio móvil dual es una estrategia simple y práctica de seguimiento de tendencias. Se aprovecha al máximo el efecto suavizador de los MAs para identificar la dirección de la tendencia y utiliza MAs rápidos / lentos para generar señales comerciales. La estrategia es fácil de implementar con una lógica clara, adecuada para que los principiantes la comprendan. Sin embargo, puede generar señales falsas excesivas y problemas de retraso. Se pueden hacer mejoras a través de la optimización de parámetros, la adición de indicadores auxiliares, etc. para hacer que la estrategia sea más robusta. Si se usa correctamente, esta estrategia puede ofrecer ganancias constantes y vale la pena una prueba y optimización integrales.
/*backtest start: 2023-09-15 00:00:00 end: 2023-10-15 00:00:00 period: 4h 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/ // © HPotter // Simple SMA strategy // // WARNING: // - For purpose educate only // - This script to change bars colors //@version=4 timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0 strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true) Resolution = input(title="Resolution", type=input.resolution, defval="D") Source = input(title="Source", type=input.source, defval=close) xSeries = security(syminfo.tickerid, Resolution, Source) Length = input(title="Length", type=input.integer, defval=14, minval=2) TriggerPrice = input(title="Trigger Price", type=input.source, defval=close) TakeProfit = input(50, title="Take Profit", step=0.01) StopLoss = input(20, title="Stop Loss", step=0.01) UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false) BarColors = input(title="Painting bars", type=input.bool, defval=true) ShowLine = input(title="Show Line", type=input.bool, defval=true) UseAlerts = input(title="Use Alerts", type=input.bool, defval=false) timeframe = input(title="Time Frame", defval="15") timerange = input(title="Time Range", defval="2300-0800") reverse = input(title="Trade Reverse", type=input.bool, defval=false) pos = 0 xSMA = sma(xSeries, Length) pos := iff(TriggerPrice > xSMA, 1, iff(TriggerPrice < xSMA, -1, nz(pos[1], 0))) nRes = ShowLine ? xSMA : na alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY') alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL') alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position') possig =iff(pos[1] != pos, iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)), 0) if (possig == 1 and timeinrange(timeframe, timerange)) strategy.entry("Long", strategy.long) if (possig == -1 and timeinrange(timeframe, timerange)) strategy.entry("Short", strategy.short) if (timeinrange(timeframe, timerange) == 0) strategy.close_all() if (UseTPSL) strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit") strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss") strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit") strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss") nColor = BarColors ? strategy.position_avg_price != 0 and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na barcolor(nColor) plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)