Esta estrategia combina los indicadores técnicos STC, Moving Average MA y Average True Range ATR para juzgar las tendencias e implementar operaciones de seguimiento de tendencias relativamente estables.
El indicador STC juzga la inversión de tendencia. Utiliza la línea rápida menos la línea lenta, luego procesa el suavizado secundario, formando señales de tendencia consistentes. La señal de compra viene cuando el indicador cruza por encima del eje 0 y la señal de venta por debajo del eje 0.
Cuando el precio de una acción se cruza por encima de MA, indica una tendencia alcista, dando una señal de mantenimiento de posición larga.
El indicador ATR establece el stop loss y el take profit. ATR puede ajustar dinámicamente el stop loss y el take profit en función de la volatilidad del mercado. Y ATR actúa como una señal para la dirección de la negociación en sí, subiendo en tendencia alcista y bajando en tendencia bajista.
La estrategia toma las señales STC como el momento principal para la entrada, utiliza MA como juicio de tendencia auxiliar y ATR para detener la pérdida y obtener ganancias.
La estrategia combina múltiples indicadores para juzgar las tendencias y los puntos de reversión, mejorando la precisión de las señales comerciales.
STC puede capturar señales de reversión y evitar quedar atrapado en tendencias.
El ATR establece un stop loss dinámico y toma ganancias basado en la volatilidad del mercado, evitando grandes pérdidas.
La combinación de múltiples indicadores forma una fuerte capacidad de seguimiento de tendencias.
El STC tiene un retraso de tiempo, que puede perder el momento óptimo para la reversión del precio.
El MA tiende a retrasarse durante las violentas oscilaciones de precios, lo que puede generar señales erróneas.
El multiplicador ATR debe aflojarse o desactivarse temporalmente durante las grandes tendencias.
Los parámetros deben ajustarse para evitar pérdidas innecesarias.
Ajuste los parámetros de STC para encontrar combinaciones de respuesta más rápidas para la inversión.
Optimizar el parámetro del período de MA para un mejor seguimiento de la tendencia.
Impactos de ensayo de diferentes múltiplos de ATR.
Pruebe a reemplazar STC con otros indicadores para una mejor coincidencia.
Introducir algoritmos de aprendizaje automático para la optimización automática de múltiples parámetros.
Considere las grandes tendencias del ciclo y distinga las diferentes etapas.
La estrategia STC MA ATR combina 3 indicadores para capturar puntos de inversión de tendencia para un comercio estable de seguimiento de tendencia. Las combinaciones de indicadores filtran señales falsas y controlan los riesgos con stop loss / take profit. Tiene una fuerte robustez y estabilidad. Se pueden lograr mejoras adicionales a través de la optimización de parámetros e introducción de algoritmos. En general, es una opción de estrategia confiable y moderada.
/*backtest start: 2023-09-16 00:00:00 end: 2023-10-16 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/ // © Romedius //@version=5 strategy("My Strategy", overlay=true, margin_long=100, margin_short=100) // STC EEEEEE=input(12,"Length",group="STC") BBBB=input(26,"FastLength",group="STC") BBBBB=input(50,"SlowLength",group="STC") AAAA(BBB, BBBB, BBBBB) => fastMA = ta.ema(BBB, BBBB) slowMA = ta.ema(BBB, BBBBB) AAAA = fastMA - slowMA AAAA AAAAA(EEEEEE, BBBB, BBBBB) => //AAA=input(0.5) var AAA = 0.5 var CCCCC = 0.0 var DDD = 0.0 var DDDDDD = 0.0 var EEEEE = 0.0 BBBBBB = AAAA(close,BBBB,BBBBB) CCC = ta.lowest(BBBBBB, EEEEEE) CCCC = ta.highest(BBBBBB, EEEEEE) - CCC CCCCC := (CCCC > 0 ? ((BBBBBB - CCC) / CCCC) * 100 : nz(CCCCC[1])) DDD := (na(DDD[1]) ? CCCCC : DDD[1] + (AAA * (CCCCC - DDD[1]))) DDDD = ta.lowest(DDD, EEEEEE) DDDDD = ta.highest(DDD, EEEEEE) - DDDD DDDDDD := (DDDDD > 0 ? ((DDD - DDDD) / DDDDD) * 100 : nz(DDDDDD[1])) EEEEE := (na(EEEEE[1]) ? DDDDDD : EEEEE[1] + (AAA * (DDDDDD - EEEEE[1]))) EEEEE mAAAAA = AAAAA(EEEEEE,BBBB,BBBBB) stc = mAAAAA > mAAAAA[1] ? true : false stc_sig = stc == true and stc[1] == false ? 1 : stc == false and stc[1] == true ? -1 : 0 stc_long = stc_sig == 1 stc_short = stc_sig == -1 // STC end // ATR stops nATRPeriod = input(5,group="ATR Stops") nATRMultip = input(3.5,group="ATR Stops") xATR = ta.atr(nATRPeriod) nLoss = nATRMultip * xATR xATRTrailingStop = 0.0 xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) : close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss pos = 0 pos := close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) atr_sig = pos == -1 ? false : true // ATR stops end // ma ma_len = input(200, title="MA Length", group="Moving Average") ma = ta.sma(close, 200) ma_sig = close < ma ? false : true // ma end // strategy entries tp_mult = input(2, title="Take Profit ATR Multiplier", group="Strategy") sl_mult = input(1, title="Stop Loss ATR Multiplier", group="Strategy") early_stop = input(true, title="Close position when ATR changes color") atr_stop = if close < xATRTrailingStop close - (close - xATRTrailingStop) * sl_mult else close + (xATRTrailingStop - close) * sl_mult longCondition = atr_sig == true and stc_sig == 1 and ma_sig == true shortCondition = atr_sig == false and stc_sig == -1 and ma_sig == false if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Exit Long", "Long", limit=close + xATR * tp_mult, stop=atr_stop) else if atr_sig == false and early_stop strategy.close("Long") if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", "Short", limit=close - xATR * tp_mult, stop=atr_stop) else if atr_sig == true and early_stop strategy.close("Short") // plot stuff atr_color = pos == -1 ? color.red: pos == 1 ? color.green : color.blue plot(atr_stop, title="ATR Stop", color=atr_color) ma_color = ma_sig ? color.green : color.red plot(ma, title="Moving Average", color=ma_color) stc_color = stc_long ? color.green : color.red plotshape(stc_long, style=shape.triangleup, color=stc_color, title="STC Long Signal", size=size.tiny) plotshape(stc_short, style=shape.triangledown, color=stc_color, title="STC Short Signal", size=size.tiny) // plot stuff end