Estrategia de seguimiento de la tendencia de precios de impulso


Fecha de creación: 2023-11-13 16:44:58 Última modificación: 2023-11-13 16:44:58
Copiar: 0 Número de Visitas: 652
1
Seguir
1621
Seguidores

Estrategia de seguimiento de la tendencia de precios de impulso

Descripción general

La estrategia de seguimiento de la tendencia del precio de la dinámica utiliza varios indicadores de la dinámica para identificar la tendencia del precio, establecer posiciones en la etapa inicial de la tendencia y bloquear ganancias mediante la configuración de un stop-loss para lograr el seguimiento de la tendencia del precio.

Principio de estrategia

La estrategia de seguimiento de tendencias de precios de la dinámica se aplica principalmente a los siguientes indicadores técnicos:

  1. Indicador de ROC: Este indicador determina el movimiento del precio calculando el porcentaje de la velocidad de cambio del precio en un período de tiempo. Cuando el ROC es positivo, indica que el precio está subiendo; cuando el ROC es negativo, indica que el precio está bajando. La estrategia determina la dirección de la tendencia del precio a través del indicador de ROC.

  2. Indicador de energía en el aire: este indicador refleja la relación entre la fuerza en el aire y la fuerza en el aire. La energía en el aire> 0 significa que la fuerza en el aire es mayor que la fuerza en el aire, el precio sube; por el contrario, el precio baja. La estrategia utiliza este indicador para determinar la comparación de la fuerza en el aire y predecir la dirección del precio.

  3. Indicador de desviación: Este indicador determina la reversión de la tendencia mediante el cálculo de la desviación entre el precio y el volumen de transacción. La estrategia utiliza la señal de desviación como momento de entrada.

4.Canales Donchianos: El indicador construye canales a través de precios máximos y mínimos, los límites de los canales pueden servir como puntos de soporte y resistencia. La estrategia utiliza los canales para determinar la dirección de la tendencia.

  1. Media móvil: Este indicador puede eliminar las oscilaciones de los precios sostenidos, revelando la dirección de la tendencia principal. La estrategia lo utiliza para determinar la tendencia general de los precios.

La estrategia determina la tendencia de los precios y el momento de la reversión en función de los indicadores anteriores. En la etapa inicial de la tendencia, se establece una posición de cabeza superior o de cabeza baja en función de la señal del indicador.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. Aplicación de varios indicadores para determinar tendencias y reducir la probabilidad de error.

  2. El uso de indicadores para capturar con precisión el punto de inflexión de la tendencia.

  3. La combinación de canales y medias móviles permite determinar la dirección de las grandes tendencias.

  4. Establezca un punto de parada de la parada, para que pueda detener la parada a tiempo y evitar la expansión de la retirada.

  5. Se puede ajustar en función de los parámetros y se aplica a diferentes ciclos y variedades de transacciones.

  6. La lógica de la estrategia es clara y fácil de entender, lo que facilita la optimización posterior.

Análisis de riesgos

La estrategia también tiene ciertos riesgos:

  1. La combinación de varios indicadores aumenta la probabilidad de señales erróneas y requiere un ajuste de los parámetros para optimizar el peso de los indicadores.

  2. Si se establece un punto de parada demasiado pequeño, puede aumentar la probabilidad de que se detenga, y si se establece demasiado grande, puede ampliar la retirada. Se necesita una consideración integral para determinar un punto de parada razonable.

  3. Los diferentes parámetros del ciclo del mercado requieren ajustes, y la aplicación ciega puede causar una falta de adaptación al entorno del mercado.

  4. Se requiere suficiente capital para apoyar el comercio simultáneo de múltiples unidades, de lo contrario es difícil obtener excess returns.

  5. La negociación de programas tiene un riesgo de ajuste de retroalimentación, con cierta incertidumbre sobre la efectividad en el disco.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Optimización de los parámetros indicadores para encontrar la combinación óptima de parámetros para diferentes períodos y variedades.

  2. Se añade un algoritmo de aprendizaje automático para buscar los parámetros óptimos.

  3. Aumentar el mecanismo de stop loss adaptativo y ajustar el stop loss según las condiciones del mercado.

  4. La combinación de un factor de alta frecuencia y un indicador básico para mejorar la estrategia de alfa.

  5. Desarrollar un marco de prueba automático, ajustar la combinación de parámetros y validar la eficacia de las transacciones.

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

  7. Aumentar la estabilidad de las estrategias mediante el incremento de transacciones en simulación y verificación en vivo.

Resumir

Esta estrategia utiliza una combinación de varios indicadores de la dinámica para determinar la tendencia de los precios y establecer paradas y pérdidas para bloquear los beneficios. La estrategia es capaz de capturar la tendencia de los precios de manera efectiva y tiene una gran estabilidad.

Código Fuente de la Estrategia
/*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" +
      "╚═══════╝")