Estrategia de negociación de varios plazos basada en el canal de precios y el MACD

El autor:¿ Qué pasa?, Fecha: 2023-12-08 15:15:37
Las etiquetas:

img

Resumen general

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.

Estrategia lógica

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:

  1. Introduzca largo cuando el histograma MACD se vuelve rojo. Introduzca corto cuando el histograma MACD se vuelve verde.

  2. Entre corto cuando el precio se acerca a la parte inferior del canal y el MACD está por debajo de la línea cero.

  3. Ingrese largo cuando el precio se acerca a la parte superior del canal y el MACD está por encima de la línea cero.

  4. 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.

Ventajas de la estrategia

  1. La combinación de indicadores evita una falsa ruptura.

  2. La combinación de indicadores a través de marcos de tiempo garantiza una detección fiable de tendencias.

  3. La incorporación de controles de stop loss y take profit para controlar efectivamente las pérdidas por operación.

Riesgos de la estrategia

  1. Espacio de optimización limitado que conduce a la sobre-optimización.

  2. El ajuste bajo del canal de precios pierde movimientos más grandes.

  3. Las pérdidas de parada estrechas causan pérdidas más grandes.

Soluciones:

  1. Adopte la optimización avanzada para evitar la optimización excesiva.

  2. Establecer parámetros adaptativos para el canal de precios.

  3. Introducir una pérdida de parada basada en la volatilidad para el ajuste dinámico de la distancia de parada.

Direcciones de optimización

  1. Optimizar la combinación de los parámetros MACD.

  2. Optimizar el cálculo adaptativo de los parámetros del canal de precios.

  3. Añadir más filtros para evitar falsos brotes y mejorar la eficiencia.

Resumen de las actividades

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)

Más.