Esta estrategia utiliza el indicador de bandas de Bollinger para dibujar canales de precios basados en retracements de ATR y Fibonacci como cuadrículas. Combinándose con líneas EMA dobles para determinar la dirección general de la tendencia, selectivamente establece cuadrículas de stop-loss en las bandas de precios de Bollinger en la dirección de la tendencia para lograr el arbitraje de seguimiento de tendencia.
Utilice la línea media de las bandas de Bollinger y los carriles superior e inferior construidos a partir de las líneas de retroceso ATR y 4 Fibonacci para construir las bandas de onda de precios.
La línea EMA rápida y la línea SMA lenta forman una media móvil doble para determinar la dirección general de la tendencia.
En un mercado alcista, solo vaya largo, elija precios cerca del carril inferior de las bandas de Bollinger para romper la parte inferior del canal para abrir posiciones largas; en un mercado bajista, solo vaya corto, elija precios cerca del carril superior de las bandas de Bollinger para romper la parte superior del canal para abrir posiciones cortas.
Establecer las condiciones de stop loss: salir de las posiciones direccionales actuales cuando aparezca una barra de reversión grande.
Utilice medias móviles dobles para determinar las tendencias de mega-nivel para evitar el comercio contra tendencia.
La cuadrícula de canales Bollinger ATR establece precios de apertura múltiples para aumentar la probabilidad de que las posiciones se abran con éxito.
Las bandas de ondas de rastreo de Fibonacci establecen la volatilidad de los precios, con diferentes números de posiciones en diferentes bandas, logrando la dispersión de capital.
Las condiciones de stop loss en tiempo real facilitan las pérdidas rápidas de stop loss y reducen los retracements de beneficios.
Los errores en la evaluación de las tendencias a nivel mega pueden dar lugar a pérdidas contrarias. Ajuste adecuadamente los parámetros de la media móvil o añada otros indicadores para el juicio auxiliar.
Cuando la volatilidad es demasiado grande, los precios pueden romper el área de la red directamente, incapaz de abrir posiciones.
Las condiciones de stop loss son más subjetivas, y los criterios de reconocimiento pueden diferir entre operadores.
Se añadirá el indicador APO para el análisis auxiliar de los juicios de tendencia de la media móvil doble.
Utilice los indicadores de volatilidad del mercado para optimizar los parámetros de la banda de ondas de Bollinger para adaptarse mejor a los cambios dinámicos del mercado.
Reducir la amplitud de la pérdida de parada y añadir otra forma de establecer las condiciones de la pérdida de parada para reducir los errores.
La idea general de esta estrategia es clara, combinando el canal ATR de Bollinger y las medias móviles dobles para lograr un juicio integral de las señales de negociación de la estrategia, maximizando la reducción del riesgo de error de juicio. Las ventajas de la estrategia son obvias y pueden aplicarse en la negociación real; pero todavía hay espacio para la optimización en detalles como la configuración de parámetros y las condiciones de stop loss, que deben mejorarse aún más. Se cree que con la optimización continua, la rentabilidad y la estabilidad de esta estrategia continuarán aumentando.
/*backtest start: 2023-11-12 00:00:00 end: 2023-12-12 00:00:00 period: 1h 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/ // © Aayonga //@version=5 strategy("fib trend grid@Aa", overlay=true,initial_capital=2000, default_qty_type=strategy.fixed, default_qty_value=1) //回测时间 useDateFilter=input.bool(true,title = "启用回测时间范围限定(backtest)", group = "回测范围(backtest)") backtesStarDate=input(timestamp("1 Jan 2015"),title = "开始时间(Start)", group = "回测范围(backtest)") backtestEndDate=input(timestamp("1 Jan 2040"),title = "结束时间(finish)",group = "回测范围(backtest)") inTradeWindow=true //入场位 entry bolllen=input.int(defval=20,minval=1,title="布林长度,(boll length)",group = "入场位(entry)") sma=ta.sma(close,bolllen) avg=ta.atr(bolllen) fib1=input(defval=1.236,title="Fib 1",group = "入场位(entry)") fib2=input(defval=2.382,title="Fib 2",group = "入场位(entry)") fib3=input(defval=3.618,title="fib 3",group = "入场位(entry)") fib4=input(defval=4.236,title="Fib 4",group = "入场位(entry)") r1=avg*fib1 r2=avg*fib2 r3=avg*fib3 r4=avg*fib4 top4=sma+r4 top3=sma+r3 top2=sma+r2 top1=sma+r1 bott1=sma-r1 bott2=sma-r2 bott3=sma-r3 bott4=sma-r4 //趋势 trend t4=plot(top4,title="卖 (sell)4",color=color.rgb(244, 9, 9)) t3=plot(top3,title = "卖(sell) 3",color=color.rgb(211, 8, 8)) t2=plot(top2,title="卖 (sell)2",color=color.rgb(146, 13, 13)) t1=plot(top1,title="卖(sell) 1",color=color.rgb(100, 3, 3)) b1=plot(bott1,title="买(buy)1",color=color.rgb(4, 81, 40)) b2=plot(bott2,title="买(buy)2",color=color.rgb(15, 117, 46)) b3=plot(bott3,title = "买(buy)3",color =color.rgb(8, 176, 42) ) b4=plot(bott4,title="买(buy)4",color=color.rgb(15, 226, 103)) plot(sma,style=plot.style_cross,title="SMA",color=color.rgb(47, 16, 225)) //趋势 LengthF=input(defval = 25,title = "快线长度(fastlength)") LengthS=input(defval=200,title = "慢线长度(slowlength)") emaF=ta.ema(close,LengthF) smaS=ta.sma(close,LengthS) longTrend=emaF>smaS longb=ta.crossover(emaF,smaS) bgcolor(longb ? color.new(color.green,40):na,title = "多头强势(bull trend)") shortTrend=smaS>emaF shortb=ta.crossunder(emaF,smaS) bgcolor(shortb ? color.new(#951313, 40):na,title = "空头强势(bear trend)") //pinbar bullPinBar = ((close > open) and ((open - low) > 0.6* (high - low))) or ((close < open) and ((close - low) > 0.9 * (high - low))) //plotshape(bullPinBar , text ="pinbar", textcolor=color.rgb(9, 168, 144),location=location.belowbar, color=color.rgb(29, 103, 67), size=size.tiny) bearPinBar = ((close > open) and ((high - close) > 0.7 * (high - low))) or ((close < open) and ((high - open) > 0.7 * (high - low))) //plotshape(bearPinBar , text ="pinbar", textcolor=color.rgb(219, 12, 12),location=location.abovebar, color=color.rgb(146, 7, 7), size=size.tiny) buy1=ta.crossunder(close,bott1) and longTrend and close>ta.ema(close,100) buy2=ta.crossunder(close,bott2) and longTrend and close>ta.ema(close,80) buy3=ta.crossunder(close,bott3) and longTrend and close>ta.ema(close,80) buy4=ta.crossunder(close,bott4) and longTrend and close>ta.ema(close,80) buyclose=bearPinBar or ta.crossunder(close,smaS) if buy2 or buy3 or buy4 or buy1 and inTradeWindow strategy.order("多(buy)",strategy.long) if buyclose and inTradeWindow strategy.close("多(buy)") sell1=ta.crossover(close,top1) and shortTrend and close<ta.ema(close,200) sell2=ta.crossover(close,top2) and shortTrend and close<ta.ema(close,200) sell3=ta.crossover(close,top3) and shortTrend and close<ta.ema(close,200) sell4=ta.crossover(close,top4) and shortTrend and close<ta.ema(close,200) sellclose=bullPinBar or ta.crossover(close,ta.sma(close,220)) if sell1 or sell2 or sell3 or sell4 and inTradeWindow strategy.order("空(sell)",strategy.short) if sellclose and inTradeWindow strategy.close("空(sell)")