Esta estrategia integra múltiples indicadores de EMA de marcos de tiempo y juicios de patrones de línea K para lograr captura de señales a largo plazo y salidas de stop-loss relativamente sensibles.
La estrategia se basa principalmente en los siguientes indicadores de evaluación:
EMA: utiliza 2 series de 13 y 21 ciclos de EMA para determinar la señal de negociación cuando el precio se rompe.
Patrón de línea K: juzga la dirección de la entidad de línea K y la utiliza con el indicador EMA para filtrar los avances falsos.
Resistencia de soporte: construida por los puntos más altos en los últimos 10 ciclos para determinar si el avance pasa por esta área para mejorar la fiabilidad de la señal.
Ascenso en la división del tiempo: 120 ciclo de cierre está arriba abierto para juzgar como ascenso en la división del tiempo, como un juicio auxiliar.
Las reglas para generar señales comerciales son:
Señal alcista: la EMA rápida rompe la EMA lenta hacia arriba con una línea Yang K-line, cierra la posición corta y abre la larga.
Una señal bajista: la EMA rápida se rompe a través de la EMA lenta con una línea Yin-línea K, posición larga plana.
Salida de pérdida de parada: Salida de pérdida de parada en la posición actual cuando aparece la señal de marcha atrás.
Los riesgos anteriores pueden mitigarse mediante métodos como evitar la optimización excesiva, la selección cuidadosa de parámetros, el control estricto del tamaño de la posición.
La estrategia integra múltiples juicios de la entidad del marco de tiempo EMA y la línea K para juicios de tendencia relativamente confiables. Los juicios auxiliares que utilizan resistencia de soporte y división de tiempo aseguran la calidad de la señal. El uso de señales inversas para stop loss puede controlar eficazmente la pérdida de stop single. Las optimizaciones futuras se pueden hacer mediante la introducción de modelos de aprendizaje automático, paradas adaptativas, análisis sentimental y módulos de gestión de tamaño de posición para hacer la estrategia más robusta.
/*backtest start: 2023-02-14 00:00:00 end: 2024-02-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title='ck - CryptoSniper Longs Only (Strategy)', shorttitle='ck - CryptoSniper Longs (S) v1', overlay=true, precision=2, commission_value=0.25, default_qty_type=strategy.percent_of_equity, pyramiding=0, default_qty_value=100, initial_capital=100) open_long = 0 close_position = 0 last_long=close last_short=close //Candle body resistance Channel-----------------------------// len = 34 src = input(close, title="Candle body resistance Channel") out = sma(src, len) last8h = highest(close, 13) lastl8 = lowest(close, 13) bearish = cross(close,out) == 1 and falling(close, 1) bullish = cross(close,out) == 1 and rising(close, 1) channel2=false //-----------------Support and Resistance RST = input(title='Support / Resistance length:', defval=10) RSTT = valuewhen(high >= highest(high, RST), high, 0) RSTB = valuewhen(low <= lowest(low, RST), low, 0) //--------------------Trend colour ema------------------------------------------------// src0 = close, len0 = input(13, minval=1, title="EMA 1") ema0 = ema(src0, len0) direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0 //-------------------- ema 2------------------------------------------------// src02 = close, len02 = input(21, minval=1, title="EMA 2") ema02 = ema(src02, len02) direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0 //=============Hull MA// show_hma = false hma_src = input(close, title="HullMA Source:") hma_base_length = input(8, minval=1, title="HullMA Base Length:") hma_length_scalar = input(5, minval=0, title="HullMA Length Scalar:") hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length))) //============ signal Generator ==================================// Period=input(title='Period', defval='120') ch1 = request.security(syminfo.tickerid, Period, open) ch2 = request.security(syminfo.tickerid, Period, close) // Signals// long = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open)) short = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open)) last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) ? 1 : -1 short_signal = crossover(last_short, last_long) ? -1 : 1 if (long_signal == 1) strategy.entry("Long Open", strategy.long) if (short_signal == -1) strategy.close("Long Open") if (long_signal[1] == 1 and short_signal[1] == 1) open_long := 1 close_position := 0 if (short_signal[1] == -1 and long_signal[1] == -1) open_long := 0 close_position := 1 plotshape(open_long == 1, title="Open Long", location=location.belowbar, style=shape.triangleup, size=size.small, color=green, transp=10) plotshape(close_position == 1, title="Close Long", location=location.abovebar, style=shape.triangledown, size=size.small, color=red, transp=10) //plot(0, title="Trigger", color=white) ///////////////////////////////////////////////////////////////////////////////////////////