Estrategia de seguimiento de la tendencia de los precios de impulso

El autor:¿ Qué pasa?, Fecha: 2023-11-13 16:44:58
Las etiquetas:

img

Resumen general

La estrategia de seguimiento de tendencias de los precios de impulso utiliza múltiples indicadores de impulso para identificar las tendencias de los precios, establece posiciones al comienzo de las tendencias y bloquea las ganancias a través de configuraciones de stop profit y stop loss para rastrear las tendencias de los precios.

Estrategia lógica

La estrategia de seguimiento de la tendencia de los precios de impulso aplica principalmente los siguientes indicadores técnicos:

  1. Indicador ROC: Este indicador calcula la tasa porcentual de cambio en el precio durante un cierto período para determinar el impulso del precio. Cuando ROC es positivo, significa que los precios están aumentando. Cuando ROC es negativo, significa que los precios están cayendo. La estrategia utiliza el indicador ROC para determinar la dirección de la tendencia del precio.

  2. Indicador de poder de los toros y los osos: Este indicador refleja la comparación de poder entre los toros y los osos. El poder de los toros > 0 indica que el poder de los toros es mayor que el poder de los osos y los precios suben. La estrategia utiliza este indicador para predecir la dirección de los precios comparando el poder de los toros y los osos.

  3. Divergencia: este indicador identifica la inversión de tendencia mediante el cálculo de la divergencia de precio y volumen.

  4. Canal de Donchian: Este indicador construye un canal utilizando los precios más altos y más bajos, y los límites del canal pueden servir como soporte y resistencia.

  5. Promedio móvil: Este indicador suaviza las fluctuaciones de precios para identificar la dirección general de la tendencia.

La estrategia determina las tendencias de los precios y los puntos de reversión basados en los indicadores anteriores, y establece posiciones largas o cortas de acuerdo con las señales de los indicadores al comienzo de las tendencias.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. El uso de múltiples indicadores para determinar las tendencias reduce la probabilidad de error de evaluación.

  2. El uso de divergencias de indicadores permite capturar con precisión los puntos de inversión de tendencia.

  3. La combinación de canales y medias móviles ayuda a determinar la tendencia general.

  4. El establecimiento de un stop-profit y un stop-loss garantiza las ganancias oportunas y evita extracciones ampliadas.

  5. Los parámetros ajustables hacen que la estrategia sea adaptable a diferentes períodos y productos.

  6. La lógica clara facilita una mayor optimización.

Análisis de riesgos

Los riesgos potenciales de esta estrategia incluyen:

  1. Los múltiples indicadores pueden aumentar la probabilidad de que la señal sea errónea.

  2. Los puntos de stop loss establecidos demasiado pequeños pueden aumentar la probabilidad de stop loss, mientras que los puntos demasiado amplios pueden ampliar los drawdowns.

  3. La aplicación ciega en diferentes períodos de mercado puede dar lugar a una inadaptabilidad, por lo que se requiere un ajuste periódico de los parámetros.

  4. Se requiere un capital suficiente para mantener las unidades de posición alta para lograr rendimientos excedentes.

  5. Los riesgos de sobreajuste en las pruebas de retroceso existen.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Optimizar los parámetros del indicador para encontrar las combinaciones óptimas para diferentes períodos y productos.

  2. Introducir algoritmos de aprendizaje automático para encontrar los parámetros óptimos automáticamente.

  3. Construir mecanismos de stop loss adaptativos basados en las condiciones del mercado.

  4. Incorporar factores y fundamentos de alta frecuencia para mejorar el alfa.

  5. Desarrollar marcos de pruebas automatizadas para la optimización de parámetros y la verificación del rendimiento.

  6. Introducir módulos de gestión de riesgos para controlar el tamaño de las posiciones y reducir las reducciones.

  7. Añadir trading y pruebas simuladas y en vivo para mejorar la estabilidad.

Conclusión

Esta estrategia combina múltiples indicadores de impulso para determinar las tendencias de precios y utiliza stop profit/loss para bloquear las ganancias. Puede capturar efectivamente las tendencias con una fuerte estabilidad.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 00:00:00
period: 1m
basePeriod: 1m
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/
// © mbagheri746

//@version=4
strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100)

TP = input(3000, minval = 1 , title ="Take Profit")
SL = input(2200, minval = 1 , title ="Stop Loss")


//_________________ RoC Definition _________________


rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186)
smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50)
src = input(title="Source", type=input.source, defval=close)

ma = ema(src, smoothingLength)
mom = change(ma, rocLength)

sroc = nz(ma[rocLength]) == 0
     ? 100
     : mom == 0
         ? 0
         : 100 * mom / ma[rocLength]

//srocColor = sroc >= 0 ? #0ebb23 : color.red
//plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0)
//hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898)


//_________________ Donchian Channel _________________

length1 = input(53, minval=1, title="Upper Channel")
length2 = input(53, minval=1, title="Lower Channel")
offset_bar = input(91,minval=0, title ="Offset Bars")

upper = highest(length1)
lower = lowest(length2)

basis = avg(upper, lower)


DC_UP_Band = upper[offset_bar]
DC_LW_Band = lower[offset_bar]

l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red)
u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua)

fill(l,u,color = color.new(color.aqua,transp = 90))

//_________________ Bears Power _________________


wmaBP_period = input(65,minval=1,title="BearsP WMA Period")
line_wma = ema(close, wmaBP_period)

BP = low - line_wma


//_________________ Balance of Power _________________

ES_BoP=input(15, title="BoP Exponential Smoothing")
BOP=(close - open) / (high - low)

SBOP = rma(BOP, ES_BoP)

//_________________ Alligator _________________

//_________________ CCI _________________

//_________________ Moving Average _________________

sma_period = input(74, minval = 1 , title = "SMA Period")
sma_shift = input(37, minval = 1 , title = "SMA Shift")

sma_primary = sma(close,sma_period)

SMA_sh = sma_primary[sma_shift]

plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow)

//_________________ Long Entry Conditions _________________//

MA_Lcnd = SMA_sh > low and SMA_sh < high

ROC_Lcnd = sroc < 0

DC_Lcnd = open < DC_LW_Band

BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2]

BOP_Lcnd = SBOP[1] < SBOP[0]

//_________________ Short Entry Conditions _________________//

MA_Scnd = SMA_sh > low and SMA_sh < high

ROC_Scnd = sroc > 0

DC_Scnd = open > DC_UP_Band

BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2]

BOP_Scnd = SBOP[1] > SBOP[0]

//_________________ OPEN POSITION __________________//

if strategy.position_size  == 0
    strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd)
    strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd)

//_________________ CLOSE POSITION __________________//

strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL)

strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL)

//_________________ TP and SL Plot __________________//

currentPL= strategy.openprofit
pos_price = strategy.position_avg_price
open_pos = strategy.position_size

TP_line = (strategy.position_size  > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0
SL_line = (strategy.position_size  > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0

// hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false)
// hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false)


Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1)
Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1)
Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1)


fill(Tline , Pline, color = color.new(color.green,transp = 90))
fill(Sline , Pline, color = color.new(color.red,transp = 90))

//_________________ Alert __________________//

//alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}")

//_________________ Label __________________//


inMyPrice           = input(title="My Price", type=input.float, defval=0)
inLabelStyle        = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right")

posColor = color.new(color.green, 25)
negColor = color.new(color.red, 25)
dftColor = color.new(color.aqua, 25)
posPnL   = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor
myPnL    = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0

var label lb = na
label.delete(lb)
lb := label.new(bar_index, close,
   color=posCol,
   style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left,
   text=
      "╔═══════╗" +"\n" + 
      "Pos: "  +posDir +"\n" +
      "Pos Price: "+tostring(strategy.position_avg_price) +"\n" +
      "Pos PnL: "  +tostring(posPnL, "0.00") + "%" +"\n" +
      "Profit: "  +tostring(strategy.openprofit, "0.00") + "$" +"\n" +
      "TP: "  +tostring(TP_line, "0.00") +"\n" +
      "SL: "  +tostring(SL_line, "0.00") +"\n" +
      "╚═══════╝")






Más.