Esta estrategia combina el indicador del canal de precios y el indicador MACD para rastrear tendencias e identificar niveles de sobrecompra y sobreventa en múltiples marcos de tiempo, tomando así decisiones de compra y venta.
El indicador de canal de precios construye un canal de precios basado en líneas EMA de precios más altos y más bajos para determinar tendencias cuando el precio se rompe el canal. El indicador MACD juzga el impulso alcista y bajista. Los valores por encima de la línea cero sugieren un mercado alcista mientras que los valores por debajo sugieren un mercado bajista.
Las señales comerciales de esta estrategia provienen de los siguientes aspectos:
Introduzca largo cuando el histograma MACD se vuelve rojo. Introduzca corto cuando el histograma MACD se vuelve verde.
Entre corto cuando el precio se acerca a la parte inferior del canal y el MACD está por debajo de la línea cero.
Ingrese largo cuando el precio se acerca a la parte superior del canal y el MACD está por encima de la línea cero.
Ingrese largo cuando el MACD cruza por encima de la línea cero. Ingrese corto cuando el MACD cruza por debajo de la línea cero.
Las salidas se activan con el stop loss y el take profit.
La combinación de indicadores evita una falsa ruptura.
La combinación de indicadores a través de marcos de tiempo garantiza una detección fiable de tendencias.
La incorporación de controles de stop loss y take profit para controlar efectivamente las pérdidas por operación.
Espacio de optimización limitado que conduce a la sobre-optimización.
El ajuste bajo del canal de precios pierde movimientos más grandes.
Las pérdidas de parada estrechas causan pérdidas más grandes.
Soluciones:
Adopte la optimización avanzada para evitar la optimización excesiva.
Establecer parámetros adaptativos para el canal de precios.
Introducir una pérdida de parada basada en la volatilidad para el ajuste dinámico de la distancia de parada.
Optimizar la combinación de los parámetros MACD.
Optimizar el cálculo adaptativo de los parámetros del canal de precios.
Añadir más filtros para evitar falsos brotes y mejorar la eficiencia.
Esta estrategia combina las fortalezas del canal de precios y el MACD mediante configuraciones razonables de parámetros y un gran espacio de optimización. Tiene un buen rendimiento en la detección de tendencias e identificación de sobrecompra / sobreventa. El mecanismo de stop loss / take profit controla la pérdida por comercio.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Sonic R + Barcolor MACD", overlay=true) HiLoLen = input(34, minval=2,title="High Low channel Length") pacL = ema(low,HiLoLen) pacH = ema(high,HiLoLen) // Plot the Price Action Channel (PAC) base on EMA high,low and close// L=plot(pacL, color=yellow, linewidth=1, title="High PAC EMA",transp=0) H=plot(pacH, color=yellow, linewidth=1, title="Low PAC EMA",transp=0) fastLength = input(12) slowlength = input(26) MACDLength = input(9) MACD = ema(close, fastLength) - ema(close, slowlength) aMACD = ema(MACD, MACDLength) delta = MACD - aMACD hisup= iff(delta>delta[1] and delta>0, 1, iff(delta<delta[1], -1, nz(hisup[1], 0))) hisdown = iff(delta<delta[1] and delta<0, 1, iff(delta>delta[1], -1, nz(hisdown[1], 0))) barcolor(hisup==1 and MACD>0 ? lime: hisdown==1 and MACD<0 ? red : blue ) //SR PeriodLookBack = input(34) xHighest = highest(PeriodLookBack) xLowest = lowest(PeriodLookBack) Trend= close>xHighest[1] ? 1: close< xLowest[1]?-1 : nz(Trend[1],0) // Strategy// conbuy= hisdown==1 or MACD<0 ? 1: hisup[5]==1 and MACD[5]>0 ?-1 : nz(conbuy[1],0) gobuy= conbuy==1 and close-open<2*(pacH-pacL) and high-close<(pacH-pacL)/2 and hisup==1 and MACD>0 and close-pacH<1.5*(pacH-pacL) and close>open and high-close<close-open and close>pacH consell= hisup==1 or MACD>0 ?1 : hisdown[5]==1 and MACD[5]<0 ?-1 : nz(consell[1],0) gosell= consell==1 and open-close<2*(pacH-pacL) and close-low<(pacH-pacL)/2 and hisdown==1 and MACD<0 and pacL-close<1.5*(pacH-pacL) and close<open and close-low<open-close and close<pacL if(gobuy) strategy.entry("Buy",strategy.long) if(gosell) strategy.entry("Sell",strategy.short) //if(Trend==-1 and close<pacL) // strategy.close("Buy") //if(Trend==1 and close>pacH) // strategy.close("Sell") ////////////// TP and SL// SL = input(defval=100.00, title="Stop Loss Point", type=float, step=1) rr= input(defval=0.1,title="Reward/Risk",type=float) useTPandSL = input(defval = false, title = "Use exit order strategy?") Stop = SL Take=SL*rr Q = 100 if(useTPandSL) strategy.exit("Out Long", "Buy", qty_percent=Q, profit= Take, loss=Stop) strategy.exit("Out Short", "Sell", qty_percent=Q, profit= Take, loss=Stop)