Estrategia de reversión de ruptura de tres o cuatro líneas K


Fecha de creación: 2023-12-18 10:39:53 Última modificación: 2023-12-18 10:39:53
Copiar: 2 Número de Visitas: 808
1
Seguir
1621
Seguidores

Estrategia de reversión de ruptura de tres o cuatro líneas K

Descripción general

La estrategia de reversión de tres o cuatro líneas K es una estrategia de negociación a la inversa, que consiste en identificar tres o cuatro líneas K con mayor impulso en la línea K, y luego, después de que las líneas K de menor amplitud formen soporte o presión, realizar una negociación a la inversa cuando se produzca la reversión de la línea K.

Principio de estrategia

La lógica de identificación central de la estrategia tiene las siguientes partes:

  1. Identificación de la línea K de gran aumento ((Gap Bar): la brecha de 1.5 veces el ATR promedio, la parte física es mayor que 0.65. La línea K se considera que tiene un fuerte impulso alcista.

  2. Identificar las líneas de K que se encuentran en la barra de recolección: las líneas de K que se encuentran detrás de la barra de la brecha y oscilan entre 1 y 2 grados, con puntos altos o bajos cercanos a la barra de la brecha. Estas líneas de K representan la desaceleración y la recolección de la tendencia, que forman soporte o presión.

  3. Identificar la línea K de la señal de inversión: después de compilar la línea K, si aparece una entidad que rompe la línea K de los puntos altos o bajos de las líneas K anteriores, se puede considerar una señal de inversión, según la dirección de la entidad, hacer más o hacer menos, abrir una posición en la línea K.

  4. Detener y detener: detener la pérdida por debajo de la línea Gap K o por encima de la línea Gap K; detener la pérdida basado en el punto de parada multiplicado por el porcentaje de pérdidas configurado.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas principales:

  1. Utilizando las características de la propia línea K para determinar tendencias y puntos de inflexión, sin depender de ningún indicador, se realiza el indicador de la banda de aluminio.

  2. Los criterios de selección de Gap Bar y Collecting Bar son rigurosos y permiten identificar las tendencias reales y hacer un balance.

  3. La detección de señales de retorno se basa en la precisión de la entidad, lo que reduce la probabilidad de señales falsas.

  4. Se puede realizar una transacción con solo 3-4 combinaciones de líneas K, con un ciclo de tiempo corto y una frecuencia alta.

  5. La configuración de stop-loss es clara, y el retiro y la relación de ganancias y pérdidas es fácil de controlar.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Depende de la calidad de la configuración de los parámetros, si la configuración de los parámetros es demasiado flexible, aumenta la posibilidad de falsas señales y pérdidas de dinero.

  2. Es susceptible a la interferencia de falsas brechas de alta frecuencia y no puede filtrar eficazmente todas las falsas señales.

  3. Existe el riesgo de que se quede atrapado, de que se produzca un ajuste fácil si no hay suficiente inversión, lo que impide el deterioro.

  4. El límite de pérdidas es más amplio, y los riesgos individuales pueden ser más grandes.

Para reducir estos riesgos, se puede optimizar en los siguientes aspectos:

  1. Parámetros optimizados para una identificación más precisa de las barras Gap y Collecting.

  2. Añade un filtro y abre una posición después de que la línea K inversa sea confirmada nuevamente.

  3. Optimizar los algoritmos de stop loss para que estén más cerca de los precios y las pérdidas sean más controlables.

Dirección de optimización

La estrategia también incluye las siguientes mejoras:

  1. Aumentar los filtros compuestos para evitar falsas interferencias de ruptura. Por ejemplo, aumentar los indicadores de volumen de transacciones y considerar las señales de negociación solo si el volumen de transacciones aumenta.

  2. En combinación con el indicador de la línea media, solo se considera una señal de negociación cuando el precio rompe una línea media importante (como la línea de 20 días, la línea de 60 días).

  3. La verificación de múltiples marcos de tiempo, sólo se abre una posición cuando se dan señales de varios períodos al mismo tiempo.

  4. Optimización de las condiciones de frenado y ajuste dinámico de las tasas de ganancias y pérdidas en función de la volatilidad del mercado y las preferencias de riesgo.

  5. Combinado con un sistema de valoración de la posición de mercado, la estrategia se utiliza sólo en un entorno de mercado de tendencia.

Estas optimizaciones pueden mejorar aún más la estabilidad y la rentabilidad de las estrategias.

Resumir

La estrategia de reversión de tres o cuatro líneas K se realiza mediante la identificación de segmentos de potencial de tendencia de alta calidad y señales de reversión. El ciclo de operación es corto, la frecuencia es alta y se espera obtener abundantes ganancias extras. Al mismo tiempo, existe un cierto riesgo y se necesita seguir optimizando para reducir el riesgo y mejorar la estabilidad.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Three (3)-Bar and Four (4)-Bar Plays Strategy", shorttitle="Three (3)-Bar and Four (4)-Bar Plays Strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD, default_qty_value=1.0,initial_capital=30000.00,default_qty_type=strategy.percent_of_equity)

frommonth = input(defval = 1, minval = 01, maxval = 12, title = "From Month")
fromday = input(defval = 1, minval = 01, maxval = 31, title = "From day")
fromyear = input(defval = 2021, minval = 1900, maxval = 2100, title = "From Year")

tomonth = input(defval = 12, minval = 01, maxval = 12, title = "To Month")
today = input(defval = 31, minval = 01, maxval = 31, title = "To day")
toyear = input(defval = 2100, minval = 1900, maxval = 2100, title = "To Year")

garBarSetting1 = input(defval = 1.5, minval = 0.0, maxval = 100.0, title = "Gap Bar Size", type = input.float)
garBarSetting2 = input(defval = 0.65, minval = 0.0, maxval = 100.0, title = "Gap Bar Body Size", type = input.float)
TopSetting = input(defval = 0.10, minval = 0.0, maxval = 100.0, title = "Bull Top Bar Size", type = input.float)

profitMultiplier = input(defval = 2.0, minval = 1.0, maxval = 100.0, title = "Profit Multiplier", type = input.float)

// ========== 3-Bar and 4-Bar Play Setup ==========
barSize = abs(high - low)
bodySize = abs(open - close)

gapBar = (barSize > (atr(1000) * garBarSetting1)) and (bodySize >= (barSize * garBarSetting2))  // find a wide ranging bar that is more than 2.5x the size of the average bar size and body is at least 65% of bar size

bullTop = close > close[1] + barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bull bar)
bullTop2 = close > close[2] + barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (first collecting bear bar)
bearTop = close < close[1] - barSize[1] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bull bar)
bearTop2 = close < close[2] - barSize[2] * TopSetting ? false : true  // check if top of bar is relatively equal to top of the gap bar (second collecting bear bar)

collectingBarBull = barSize < barSize[1] / 2 and low > close[1] - barSize[1] / 2 and bullTop  // find a collecting bull bar
collectingBarBear = barSize < barSize[1] / 2 and high < close[1] + barSize[1] / 2 and bearTop  // find a collecting bear bar
collectingBarBull2 = barSize < barSize[2] / 2 and low > close[2] - barSize[2] / 2 and bullTop2  // find a second collecting bull bar
collectingBarBear2 = barSize < barSize[2] / 2 and high < close[2] + barSize[2] / 2 and bearTop2  // find a second collecting bear bar

triggerThreeBarBull = close > close[1] and close > close[2] and high > high[1] and high > high[2]  // find a bull trigger bar in a 3 bar play
triggerThreeBarBear = close < close[1] and close < close[2] and high < high[1] and high < high[2]  // find a bear trigger bar in a 3 bar play
triggerFourBarBull = close > close[1] and close > close[2] and close > close[3] and high > high[1] and high > high[2] and high > high[3]  // find a bull trigger bar in a 4 bar play
triggerFourBarBear = close < close[1] and close < close[2] and close < close[3] and high < high[1] and high < high[2] and high < high[3]  // find a bear trigger bar in a 4 bar play

threeBarSetupBull = gapBar[2] and collectingBarBull[1] and triggerThreeBarBull  // find 3-bar Bull Setup
threeBarSetupBear = gapBar[2] and collectingBarBear[1] and triggerThreeBarBear  // find 3-bar Bear Setup
fourBarSetupBull = gapBar[3] and collectingBarBull[2] and 
   collectingBarBull2[1] and triggerFourBarBull  // find 4-bar Bull Setup
fourBarSetupBear = gapBar[3] and collectingBarBear[2] and 
   collectingBarBear2[1] and triggerFourBarBear  // find 4-bar Bear Setup

labels = input(title="Show Buy/Sell Labels?", type=input.bool, defval=true)

plotshape(threeBarSetupBull and labels, title="3-Bar Bull", text="3-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(threeBarSetupBear and labels, text="3-Bar Bear", title="3-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
plotshape(fourBarSetupBull and labels, title="4-Bar Bull", text="4-Bar Play", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(fourBarSetupBear and labels, text="4-Bar Bear", title="4-Bar Play", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

alertcondition(threeBarSetupBull or threeBarSetupBear or fourBarSetupBull or fourBarSetupBear, title="3-bar or 4-bar Play", message="Potential 3-bar or 4-bar Play")
float sl = na
float tp = na
sl := nz(sl[1], 0.0)
tp := nz(tp[1], 0.0)
plot(sl==0.0?na:sl,title='SL', color = color.red)
plot(tp==0.0?na:tp,title='TP', color = color.green)
if (true)
    if threeBarSetupBull and strategy.position_size <=0
        strategy.entry("3 Bar Long", strategy.long, when=threeBarSetupBull)
        sl :=low[1]
    if threeBarSetupBear and strategy.position_size >=0
        strategy.entry("3 Bar Short", strategy.short, when=threeBarSetupBull)
        sl :=high[1]
    if fourBarSetupBull and strategy.position_size <=0
        strategy.entry("4 Bar Long", strategy.long, when=fourBarSetupBull)
        sl :=min(low[1], low[2])
    if fourBarSetupBear and strategy.position_size >=0
        strategy.entry("4 Bar Short", strategy.short, when=fourBarSetupBear)
        sl :=max(high[1], high[2])

if sl !=0.0
    if strategy.position_size > 0
        tp := strategy.position_avg_price + ((strategy.position_avg_price - sl) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)

    if strategy.position_size < 0
        tp := strategy.position_avg_price - ((sl - strategy.position_avg_price) * profitMultiplier)
        strategy.exit(id="Exit", limit=tp, stop=sl)