Esta estrategia es una simple estrategia de cruce de promedio móvil (SMA) adecuada para los mercados de criptomonedas. Utiliza SMAs rápidas, medianas y lentas para identificar señales de entrada y salida potenciales. Cuando la SMA rápida cruza la SMA media, se genera una señal de compra. Cuando la SMA rápida cruza debajo de la SMA media, se genera una señal de venta.
La estrategia permite a los operadores establecer los siguientes parámetros clave:
La SMA rápida, la SMA media y la SMA lenta se calculan sobre la base de las longitudes de SMA establecidas por el usuario.
Cuando la SMA rápida cruza la SMA media, se genera una señal de compra.
La estrategia calcula el capital nominal por operación en función de los fondos de la cuenta y el porcentaje de riesgo aceptable por operación.
Se puede optimizar acortando los períodos de SMA, añadiendo otros indicadores, etc.
Esta estrategia integra reglas de cruce de SMA, gestión de riesgos y dimensionamiento de posiciones para un sistema de seguimiento de tendencias robusto adecuado para los mercados de criptomonedas.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Onchain Edge Trend SMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Configuration Parameters priceSource = input(close, title="Price Source") includeIncompleteBars = input(true, title="Consider Incomplete Bars") maForecastMethod = input(defval="flat", options=["flat", "linreg"], title="Moving Average Prediction Method") linearRegressionLength = input(3, title="Linear Regression Length") fastMALength = input(7, title="Fast Moving Average Length") mediumMALength = input(30, title="Medium Moving Average Length") slowMALength = input(50, title="Slow Moving Average Length") tradingCapital = input(100000, title="Trading Capital") tradeRisk = input(1, title="Trade Risk (%)") // Calculation of Moving Averages calculateMA(source, period) => sma(source, period) predictMA(source, forecastLength, regressionLength) => maForecastMethod == "flat" ? source : linreg(source, regressionLength, forecastLength) offset = includeIncompleteBars ? 0 : 1 actualSource = priceSource[offset] fastMA = calculateMA(actualSource, fastMALength) mediumMA = calculateMA(actualSource, mediumMALength) slowMA = calculateMA(actualSource, slowMALength) // Trading Logic enterLong = crossover(fastMA, mediumMA) exitLong = crossunder(fastMA, mediumMA) // Risk and Position Sizing riskCapital = tradingCapital * tradeRisk / 100 lossThreshold = atr(14) * 2 tradeSize = riskCapital / lossThreshold if (enterLong) strategy.entry("Enter Long", strategy.long, qty=tradeSize) if (exitLong) strategy.close("Enter Long") // Display Moving Averages plot(fastMA, color=color.blue, linewidth=2, title="Fast Moving Average") plot(mediumMA, color=color.purple, linewidth=2, title="Medium Moving Average") plot(slowMA, color=color.red, linewidth=2, title="Slow Moving Average")