Esta es una estrategia de negociación cuantitativa a corto plazo basada en el promedio móvil simple (SMA), el promedio móvil exponencial (EMA), los canales de Keltner, el indicador MACD y el oscilador estocástico.
La estrategia utiliza SMA de 25 períodos, EMA de 200 períodos para construir líneas de promedio móvil dual. Cuando el precio atraviesa los promedios móviles dobles hacia arriba, se genera una señal de compra. Cuando el precio atraviesa los promedios móviles dobles hacia abajo, se genera una señal de venta.
Al mismo tiempo, esta estrategia utiliza canales de Keltner de 10 períodos. El avance de las bandas superior e inferior del canal también sirve como señales auxiliares. El indicador MACD genera señales comerciales con su línea rápida, línea lenta e histograma. El oscilador estocástico también forma señales largas y cortas con la cruz dorada y la cruz muerta de su línea %K y línea %D.
Específicamente, cuando el precio de cierre está por encima tanto de la SMA como de la EMA, y dentro de los canales de Keltner, el histograma MACD es negativo y el %K estocástico está por debajo de 50, se activa una señal de entrada larga.
Esta estrategia integra cuatro indicadores técnicos comúnmente utilizados: promedios móviles, canal, MACD y estocástico. Determina el largo / corto basado en el avance del precio, una estrategia comercial cuantitativa típica a corto plazo. En comparación con las estrategias de indicador único, su combinación de múltiples indicadores mejora la precisión de la señal y vale la pena probar y optimizar más.
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h 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/ // © exlux99 //@version=5 strategy(title="Scalping Trading System Crypto and Stocks", overlay=true) src = input(low, title="Source") //sma and ema len = input.int(25, minval=1, title="Length SMA" , group="Moving Averages") len2 = input.int(200, minval=1, title="Length EMA", group="Moving Averages") out = ta.sma(src, len) out2 = ta.ema(src, len2) //keltner lengthk = input.int(10, minval=1, title="Length Keltner Channel",group="Keltner") mult = input(2.0, "Multiplier",group="Keltner") BandsStyle = input.string("Average True Range", options = ["Average True Range", "True Range", "Range"], title="Bands Style",group="Keltner") atrlength = input(14, "ATR Length",group="Keltner") ma = ta.sma(src, lengthk) rangema = BandsStyle == "True Range" ? ta.tr(true) : BandsStyle == "Average True Range" ? ta.atr(atrlength) : ta.rma(high - low, lengthk) upper = ma + rangema * mult lower = ma - rangema * mult //stoch periodK = input.int(10, title="%K Length", minval=1,group="Stochastic") smoothK = input.int(1, title="%K Smoothing", minval=1,group="Stochastic") periodD = input.int(1, title="%D Smoothing", minval=1,group="Stochastic") k = ta.sma(ta.stoch(close, high, low, periodK), smoothK) d = ta.sma(k, periodD) //macd 1 fast_length = input(title="Fast Length MACD", defval=4,group="MACD Fast") slow_length = input(title="Slow Length MACD", defval=34,group="MACD Fast") signal_length = input.int(title="Signal Smoothing MACD", minval = 1, maxval = 50, defval = 5,group="MACD Fast") sma_source = input.string(title="Oscillator MA Type MACD", defval="EMA", options=["SMA", "EMA"],group="MACD Fast") sma_signal = input.string(title="Signal Line MA Type MACD", defval="EMA", options=["SMA", "EMA"],group="MACD Fast") fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) hist = macd - signal long= close > out and close < upper and close > lower and hist < 0 and k < 50 and close > out2 short= close < out and close < upper and close > lower and hist > 0 and k > 50 and close < out2 strategy.entry("long",strategy.long,when= long) strategy.entry("short",strategy.short,when=short)