Estrategia de escape de la tortuga doble


Fecha de creación: 2023-11-28 16:25:41 Última modificación: 2023-11-28 16:25:41
Copiar: 0 Número de Visitas: 692
1
Seguir
1621
Seguidores

Estrategia de escape de la tortuga doble

Descripción general

La estrategia de breakout de las dos orillas combina la estrategia de breakout de la ley de comercio de las orillas y el principio de stop loss móvil de Linda Raschke, con una excelente capacidad de breakout y un control estricto del riesgo. La estrategia monitorea al mismo tiempo la subida y bajada de los precios, establece posiciones de venta o cancelación cuando se produce una ruptura, y utiliza el stop loss móvil y las posiciones de gestión de stop loss móviles.

Principio de estrategia

La lógica central es hacer un vacío cuando se rompe el pequeño ciclo de alta en el ciclo de alta, y hacer más cuando se rompe el pequeño ciclo de baja en el ciclo de baja en el ciclo de alta. Después de la creación de la posición, el establecimiento de la parada de movimiento y los paros móviles, primero el parón confirma el riesgo. Cuando el número de posiciones se acumula en el número de paradas de la configuración, en el siguiente ciclo de cancelar la orden de parada, y luego salir de la mitad de la posición y establecer el parón móvil y los parados móviles para bloquear los beneficios y seguir la diferencia de precios.

Los pasos son los siguientes:

  1. Calcula el periodo previo de 20 ciclos y el periodo posterior de 4 ciclos.
  2. Cuando el alto de la línea K más reciente es mayor que el prevHigh, y el prevHigh es mayor que el smallPeriodHigh, indica que el punto más alto del período mayor ha superado el punto más alto del período menor, en este momento, si no hay una posición vacía.
  3. Establezca un stop loss móvil después de la creación de la posición y cancele el stop loss después de la inversión de la posición para evitar que se detenga.
  4. Cuando el número de posiciones alcanza el número de ciclos de parada móvil establecido (el ciclo actual es 0), sale la mitad de la posición en el siguiente ciclo y establece un stop loss móvil y un stop stop móvil, rastrea la diferencia de precios y bloquea las ganancias.
  5. Para una ruptura de un punto bajo similar, establezca una posición múltiple basada en la relación de ruptura entre un punto bajo de un período mayor y un punto bajo de un período menor.

Análisis de las ventajas

Se trata de una estrategia de ruptura integrada que tiene las siguientes ventajas:

  1. La combinación de la técnica de la transacción de la tortuga de doble ciclo permite identificar con eficacia las señales de ruptura.
  2. El uso de la tecnología de stop loss móvil y stop stop móvil para controlar el riesgo y evitar grandes pérdidas.
  3. El juego es dividido en dos partidas, una en la que se detiene la mitad de las posiciones, y otra en la que se detiene la totalidad de las posiciones mediante el movimiento, para bloquear las ganancias.
  4. La combinación de la operación bidireccional de hacer más y hacer menos, en consonancia con las características del mercado de intercambio de más espacio.
  5. La detección es excelente y tiene una gran capacidad de rendimiento en disco duro.

Análisis de riesgos

Los principales riesgos y respuestas son:

  1. Riesgo de falsa ruptura. Se debe ajustar adecuadamente el parámetro de ciclo para asegurar la efectividad de la ruptura.
  2. Se debe filtrar en combinación con la tendencia y la forma, para evitar la construcción de posiciones al final de la tendencia.
  3. El riesgo de pérdida de amortiguamiento. La amplitud de la pérdida de amortiguamiento se puede flexibilizar adecuadamente para garantizar que haya suficiente espacio.
  4. El riesgo de pérdida móvil es demasiado sensible. Se debe ajustar la configuración del punto de deslizamiento después de la pérdida para evitar pérdidas innecesarias.

Dirección de optimización

La estrategia también puede ser optimizada en los siguientes aspectos:

  1. Aumentar la filtración de brechas en el volumen de transacciones para asegurar la autenticidad de las brechas.
  2. Incluir indicadores de tendencia para evitar posiciones al final de la tendencia.
  3. El tiempo de la brecha se puede calcular combinando más ciclos de tiempo.
  4. Se añaden algoritmos de aprendizaje automático y parámetros de optimización dinámica.
  5. Combinar otras estrategias para aplicar el arbitraje estadístico.

Resumir

La estrategia de ruptura de las dos olas utiliza una combinación de técnicas de doble ciclo, teoría de ruptura y métodos estrictos de gestión de riesgos para garantizar la estabilidad de los ingresos, al tiempo que mantiene una alta tasa de éxito. El modelo de estrategia es simple y claro, fácil de entender y aplicar, y es una excelente estrategia cuantitativa.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Turtle soup plus one", shorttitle = "Turtle soup plus one", overlay=true)

bigPeriod = input(20)
smallPeriod = input(4)
takeProfitBars = input(0)
trailingStop = input(5, title = "Trailing stop percentages")
if (strategy.position_size == 0)
    strategy.cancel("Long")
    strategy.cancel("Short")
    strategy.cancel("Stop")



stopLossPrice = 0.1
stopLossPrice := nz(stopLossPrice[1])
takeProfitStarted = false
takeProfitStarted := nz(takeProfitStarted[1])

prevHigh = highest(high, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodHigh = highest(high, smallPeriod - 1)[1]
if (high > prevHigh and prevHigh > smallPeriodHigh and close > prevHigh and strategy.position_size == 0)
    strategy.order("Short", strategy.short, stop = prevHigh)

if strategy.position_size < 0 and strategy.position_size[1] == 0
    stopLossPrice := high[1]
    strategy.order("Stop", strategy.long, qty = -strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size < 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close < strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.long, qty = ceil(-strategy.position_size / 2), stop = close)
    if (strategy.position_size != -1)
        strategy.exit("ExitFull", "Short", qty = -strategy.position_size - ceil(-strategy.position_size / 2), loss = stopLossPrice, trail_price  = close, trail_offset = -(close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
        

prevLow = lowest(low, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodLow = lowest(low, smallPeriod - 1)[1]
if (low < prevLow and prevLow < smallPeriodLow and close < prevLow and strategy.position_size == 0)
    strategy.order("Long", strategy.long, stop = prevLow)

if strategy.position_size > 0 and strategy.position_size[1] == 0
    stopLossPrice := low[1]
    strategy.order("Stop", strategy.short, qty = strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size > 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close > strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.short, qty = ceil(strategy.position_size / 2), stop = close)
    if (strategy.position_size != 1)
        strategy.exit("ExitFull", "Long", qty = strategy.position_size - ceil(strategy.position_size / 2),loss = stopLossPrice, trail_price  = close, trail_offset = (close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2038, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()