La estrategia de doble SMA Crossover genera señales de negociación mediante el cálculo del cruce de dos líneas SMA con diferentes configuraciones de parámetros. Cuando la línea SMA más rápida cruza por encima de la línea SMA más lenta, se genera una señal de compra. Cuando la línea SMA más lenta cruza por debajo de la línea SMA más rápida, se genera una señal de venta. La estrategia utiliza dos conjuntos de parámetros SMA al mismo tiempo, uno para determinar los puntos de entrada y el otro para determinar los puntos de salida.
Esta estrategia utiliza dos conjuntos de parámetros SMA,smaB1
, smaB2
para señales de compra, ysmaS1
, smaS2
En el caso de las señales de venta, que representan promedios móviles más lentos y más rápidos, respectivamente.smaB1
cruces por encimasmaB2
, se genera una señal de compra.smaS2
cruces abajosmaS1
En el caso de las empresas que se encuentran en una situación de crisis, se genera una señal de venta, lo que permite un ajuste flexible de las condiciones de entrada y salida para adaptarse a los cambios en el entorno del mercado.
Específicamente, esta estrategia monitorea las situaciones de cruce entre las dos líneas SMA calculadas a partir del precio de cierre para determinar el momento de compra y venta. Cuando la línea SMA más rápida cruza por encima de la línea SMA más lenta, se juzga que la tendencia del precio es al alza, por lo que ir largo en este momento. Y cuando la línea SMA más lenta cruza por debajo de la línea SMA más rápida, la tendencia del precio se vuelve a la baja, por lo que salir de las posiciones largas.
Las principales ventajas de esta estrategia son las siguientes:
También hay algunos riesgos asociados con esta estrategia:
Para controlar los riesgos anteriores, se pueden utilizar métodos como la optimización del parámetro SMA, el stop loss dinámico para obtener ganancias, etc., para mejorar la estrategia.
Algunas direcciones de optimización para esta estrategia:
La estrategia SMA Crossover genera señales comerciales simples y efectivas mediante el cálculo de las situaciones de cruce entre dos líneas SMA. La flexibilidad para ajustar los parámetros hace que esta estrategia sea adaptable a diferentes productos, y es una estrategia de tendencia comúnmente utilizada. Se pueden hacer mejoras adicionales a esta estrategia a través de la optimización de parámetros, filtrado de señales, etc. para generar señales más confiables.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 5m basePeriod: 1m 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/ // © melihtuna //@version=4 strategy("SMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=10000, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent) smaB1 = input(title="smaB1",defval=377) smaB2 = input(title="smaB2",defval=200) smaS1 = input(title="smaS1",defval=377) smaS2 = input(title="smaS2",defval=200) smawidth = 2 plot(sma(close, smaB1), color = #EFB819, linewidth=smawidth, title='smaB1') plot(sma(close, smaB2), color = #FF23FD, linewidth=smawidth, title='smaB2') plot(sma(close, smaS1), color = #000000, linewidth=smawidth, title='smaS1') plot(sma(close, smaS2), color = #c48dba, linewidth=smawidth, title='smaS2') // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2020, title = "From Year", minval = 2017) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = crossover(sma(close, smaB1),sma(close, smaB2)) if (window() and longCondition) strategy.entry("BUY", strategy.long) shortCondition = crossover(sma(close, smaS2),sma(close, smaS1)) if (window() and shortCondition) strategy.entry("SELL", strategy.short)