La estrategia de avance de la doble tortuga integra la estrategia de avance de la tortuga y el principio de stop loss móvil de Linda Raschke, con un excelente rendimiento de avance y un estricto control de riesgos.
La lógica básica es ir corto cuando se rompe el ciclo pequeño alto en el punto alto del ciclo grande, y ir largo cuando se rompe el ciclo pequeño bajo en el punto bajo del ciclo grande. Después de abrir una posición, configure un stop loss móvil y tome el beneficio móvil, primero detenga la pérdida para confirmar el riesgo. Cuando la cantidad de tenencia se acumula en el conjunto tome el beneficio cantidad, cancele la orden de stop loss en el siguiente ciclo, luego salga de la mitad de la posición y configure un stop loss móvil y tome el beneficio móvil para bloquear las ganancias y rastrear los spreads.
Los pasos específicos de la operación son:
Calcular el ciclo grande (20 ciclos) punto alto antes de alto y el ciclo pequeño (4 ciclos) punto alto pequeñoPeriodo alto.
Cuando el máximo de la última línea K es mayor que prevHigh, y prevHigh es mayor que smallPeriodHigh, indica que el punto alto del ciclo grande rompe con el punto alto del ciclo pequeño.
Después de abrir una posición, establezca un stop loss en movimiento.
Cuando la cantidad de tenencia alcanza el número de ciclo de ganancias en movimiento (actualmente 0 ciclos), salga de la mitad de la posición en el siguiente ciclo y configure un stop loss móvil y un movimiento de ganancias para rastrear el margen y bloquear las ganancias.
Para las rupturas de los mínimos, las posiciones largas se establecen en función de las relaciones de ruptura entre los mínimos de ciclo grandes y los mínimos de ciclo pequeños.
Se trata de una estrategia de avance muy completa con las siguientes ventajas:
La combinación del comercio de tortugas de doble ciclo puede identificar eficazmente las señales de avance.
El uso de técnicas de stop loss y movimiento de beneficios controla estrictamente los riesgos y evita grandes pérdidas.
Salir en dos etapas, tomar la mitad de la posición de ganancia a la vez, luego salir completamente a través de la mudanza tomar ganancias, bloquear las ganancias.
Tener en cuenta tanto las operaciones largas como las operaciones cortas, que coinciden con las características de los mercados alternativos de múltiples vacíos.
Excelentes resultados de backtesting con un fuerte rendimiento comercial real.
Los principales riesgos y contramedidas son los siguientes:
Riesgo de falsos avances: ajustar adecuadamente los parámetros del ciclo para garantizar la validez de los avances.
El riesgo de perseguir aumenta y mata cae. El filtrado debe combinarse con tendencias y patrones para evitar la apertura de posiciones al final de las tendencias.
El riesgo de que se elimine la pérdida de parada: relajar adecuadamente la amplitud de la pérdida de parada para garantizar un espacio suficiente.
Riesgo de pérdida de parada en movimiento demasiado sensible Ajustar la configuración del deslizamiento después de la pérdida de parada para evitar paradas innecesarias.
La estrategia también puede optimizarse en los siguientes aspectos:
Añadir filtros de avance de volumen para garantizar la autenticidad de los avances.
Añadir indicadores de juicio de tendencia para evitar la apertura de posiciones al final de las tendencias.
Combine más ciclos de tiempo para determinar el tiempo de avance.
Aumentar los algoritmos de aprendizaje automático para la optimización dinámica de parámetros.
Combinar con otras estrategias de arbitraje estadístico.
La estrategia de avance de la doble tortuga utiliza técnicas de doble ciclo, teorías de avance y métodos estrictos de gestión de riesgos para garantizar altas tasas de ganancia y al mismo tiempo asegurar rendimientos estables. Este modelo de estrategia es simple y claro, fácil de entender y aplicar, y es una excelente estrategia cuantitativa. Esta estrategia todavía tiene un gran potencial de optimización. Los inversores pueden innovar sobre esta base para crear sistemas de negociación aún mejores.
/*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()