A Estratégia de Avanço de Tartaruga Dupla integra a estratégia de avanço de negociação de tartaruga e o princípio de stop loss móvel de Linda Raschke, com excelente desempenho de avanço e controle de risco rigoroso.
A lógica principal é ir curto quando se rompe o pequeno ciclo alto no ponto alto do grande ciclo, e ir longo quando se rompe o pequeno ciclo baixo no ponto baixo do grande ciclo. Após abrir uma posição, configure um stop loss em movimento e tome lucro em movimento, primeiro pare de perder para confirmar o risco. Quando a quantidade de detenção se acumula no conjunto tome lucro quantidade, cancele a ordem de stop loss no próximo ciclo, em seguida, saia da metade da posição e configure um stop loss em movimento e tire lucro em movimento para bloquear lucros e rastrear spreads.
As etapas de operação específicas são:
Calcular o ciclo grande (20 ciclos) ponto alto pré-alto e o ciclo pequeno (4 ciclos) ponto alto pequenoPeriodHigh.
Quando o máximo da última linha K é maior que prevHigh, e prevHigh é maior que smallPeriodHigh, indica que o ponto alto do ciclo grande quebra o ponto alto do ciclo pequeno.
Depois de abrir uma posição, defina um stop loss em movimento. espere que a posição se inverta antes de cancelar a ordem de stop loss para evitar ser parada.
Quando a quantidade de detenção atingir o número de ciclo de lucro movido (atualmente 0 ciclos), saia da metade da posição no próximo ciclo e configure um stop loss móvel e um lucro movido para rastrear o spread e bloquear os lucros.
No caso das rupturas dos pontos baixos, as posições longas são estabelecidas com base nas relações de ruptura entre os mínimos de ciclos grandes e os mínimos de ciclos pequenos.
Trata-se de uma estratégia de avanço muito abrangente com as seguintes vantagens:
A combinação do comércio de tartarugas de ciclo duplo pode identificar de forma eficaz os sinais de avanço.
O uso de técnicas de stop loss e take profit movendo-se controla estritamente os riscos e evita grandes perdas.
Sair em duas etapas, tirar lucro de metade de uma posição de cada vez, depois sair completamente através da mudança tirar lucro, bloquear os lucros.
Ter em conta as operações de curto e longo prazos, correspondendo às características dos mercados alternados de multi-vazio.
Excelentes resultados de backtesting com um forte desempenho comercial real.
Os principais riscos e contramedidas são os seguintes:
Risco de falsas descobertas: ajustar adequadamente os parâmetros do ciclo para garantir a validade das descobertas.
O risco de perseguição aumenta e o risco de morte diminui.
Risco de eliminação da perda de parada: relaxar adequadamente a amplitude da perda de parada para garantir espaço suficiente.
Risco de perda de parada em movimento excessivamente sensível Ajustar as configurações de deslizamento após a perda de parada para evitar paradas desnecessárias.
A estratégia pode também ser otimizada nos seguintes aspectos:
Adicionar filtros de ruptura de volume para garantir a autenticidade das rupturas.
Adicionar indicadores de avaliação da tendência para evitar a abertura de posições no final das tendências.
Combine mais ciclos de tempo para determinar o tempo de avanço.
Aumentar os algoritmos de aprendizagem de máquina para otimização dinâmica de parâmetros.
Combinar com outras estratégias de arbitragem estatística.
A Estratégia de Avanço da Double Turtle usa abrangentemente técnicas de ciclo duplo, teorias inovadoras e métodos rigorosos de gerenciamento de risco para garantir altas taxas de ganho, garantindo retornos estáveis. Este modelo de estratégia é simples e claro, fácil de entender e aplicar, e é uma excelente estratégia quantitativa. Esta estratégia ainda tem grande potencial de otimização. Os investidores podem inovar com base nisso para criar sistemas de negociação ainda melhores.
/*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()