Esta estrategia utiliza el rango promedio verdadero (ATR) y el índice CHOP como los principales indicadores técnicos para identificar y rastrear tendencias.
Utilice ATR para calcular el tamaño de la caja y construir el canal Renko para determinar la dirección de la tendencia del precio.
Aplicar el índice CHOP para juzgar si el mercado es adecuado para la negociación. Este índice incorpora el precio más alto, el precio más bajo y ATR. Cuando está entre 38.2-61.8, indica una baja volatilidad del mercado; de lo contrario, indica una alta volatilidad y un mercado comercial inadecuado.
Cuando el índice CHOP rompe el carril superior de 61.8, el precio entra en una tendencia a la baja. Si la EMA rápida a corto plazo también muestra que el precio está liderando, vaya corto. Por el contrario, cuando CHOP rompe el carril inferior de 38.2 y la EMA a corto plazo sube, vaya largo.
Cuando el precio vuelva a entrar en el área de cinturón 38.2-61.8 de CHOP, cierre la posición con stop loss o tome ganancia.
Esta estrategia combina el juicio de tendencia y el control de la volatilidad, que pueden capturar las tendencias de precios y controlar los riesgos.
El canal Renko construido por ATR puede rastrear eficazmente las tendencias de los precios.
El índice CHOP juzga la tasa de volatilidad del mercado para evitar operaciones incorrectas en fluctuaciones violentas.
La combinación de una EMA rápida para determinar la dirección de la tendencia a corto plazo evita una operación inversa.
La estrategia stop loss/take profit controla una sola pérdida.
Los principales riesgos a los que se enfrenta esta estrategia:
En el mercado lateral, el canal ATR y las señales CHOP pueden producir señales incorrectas.
La combinación de indicadores técnicos únicos no puede evitar completamente las pérdidas, ya que se necesita una intervención manual para determinar las principales tendencias.
La posición de stop loss demasiado suelta puede conducir a una pérdida única de gran tamaño.
Esta estrategia puede optimizarse en los siguientes aspectos:
Aumente otros indicadores auxiliares para determinar las señales, como patrones de velas, volumen, etc. para mejorar la precisión de la señal.
Optimizar los parámetros de ATR y CHOP para captar mejor las fluctuaciones de precios.
Establecer posiciones dinámicas de stop loss/take profit para obtener mayores márgenes de ganancia y un stop loss más rápido.
Se debe aflojar adecuadamente el rango de stop loss después de determinar la tendencia principal para obtener más ganancias en la tendencia.
Esta estrategia integra indicadores técnicos de uso común y es simple y práctica. Con el ajuste y la optimización de parámetros, se pueden obtener efectos de seguimiento satisfactorios. Pero aún requiere un juicio manual de las principales tendencias y no se puede automatizar completamente. Puede servir como una herramienta de toma de decisiones auxiliar y referencia para otras estrategias.
/*backtest start: 2022-12-28 00:00:00 end: 2024-01-03 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/ // © sharatgbhat //@version=4 strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500) maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float) // strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity) method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method") methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value") pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source") useClose = pricesource == "Close" useOpenClose = pricesource == "Open / Close" or useClose useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume") isOscillating = input(defval=false, type=input.bool, title="Oscillating") normalize = input(defval=false, type=input.bool, title="Normalize") vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume op = useClose ? close : open hi = useOpenClose ? close >= op ? close : op : high lo = useOpenClose ? close <= op ? close : op : low if method == "ATR" methodvalue := atr(round(methodvalue)) if method == "Part of Price" methodvalue := close / methodvalue currclose = float(na) prevclose = nz(currclose[1]) prevhigh = prevclose + methodvalue prevlow = prevclose - methodvalue currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose direction = int(na) direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1]) directionHasChanged = change(direction) != 0 directionIsUp = direction > 0 directionIsDown = direction < 0 barcount = 1 barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount vol := not directionHasChanged ? vol[1] + vol : vol res = barcount > 1 ? vol / barcount : vol plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume") length = input(14, minval=1) ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length) offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500) plot(ci, "CHOP", color=#2962FF, offset = offset) band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed) band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed) fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background") MomentumBull = close>ema(close,8) MomentumBear = close<ema(close,8) Tradecon = crossunder(ci,61.8) if (MomentumBull and directionIsUp and Tradecon) strategy.entry("Buy", strategy.long) if (MomentumBear and directionIsDown and Tradecon ) strategy.entry("Sell", strategy.short) strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10) strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)