Uma estratégia de negociação de tartarugas que rastreia o momento de rompimento


Data de criação: 2023-12-25 17:12:05 última modificação: 2023-12-25 17:12:05
cópia: 0 Cliques: 774
1
focar em
1623
Seguidores

Uma estratégia de negociação de tartarugas que rastreia o momento de rompimento

Visão geral

A estratégia de negociação de tartarugas (Turtle Trading Strategy) é uma estratégia de acompanhamento de tendências para rastrear a dinâmica de rupturas. Foi desenvolvida pelo famoso comerciante Richard Dennis na década de 1980 para verificar se os comerciantes poderiam ser treinados por regras, em vez de inatos. O conceito central da estratégia é rastrear as rupturas de preços e acompanhar as tendências, enquanto se segue rigorosamente os princípios de gerenciamento de fundos para limitar o risco de queda.

Princípio da estratégia

A estratégia de negociação de criptomoedas usa dois parâmetros N e N / 2 para construir canais. Concretamente, calcula-se o preço mais alto e o preço mais baixo nos últimos N dias e N / 2 dias, respectivamente.

No código, N correspondeenter_slowN/2 correspondentesenter_fast│ │ o preço mais alto nos últimos 55 dias e 20 dias, respectivamente.slowLefastLPreços mínimoslowest(slowSfastS)。当价格超过55天通道时做多(enterL2),当价格跌破20天通道时平多仓(exitL1);当价格跌破55天通道时做空(enterS2),当价格超过20天通道时平空仓(exitS1`)。

Análise de vantagens

A maior vantagem da estratégia de negociação de criptomoedas reside no controle do risco. Ao estabelecer posições em caso de ruptura do preço, a parada rápida em caso de retorno do preço pode efetivamente controlar os prejuízos individuais. Ao mesmo tempo, o princípio de gerenciamento de fundos de quota fixa reduz ainda mais o risco.

Outra vantagem é que a seleção de parâmetros é simples. A estratégia inteira tem apenas 4 parâmetros, o que é fácil de entender e ajustar. Os parâmetros em si também são mais estáveis, sem necessidade de otimização frequente.

Análise de Riscos

O maior risco de uma estratégia de negociação de pirâmide é não poder acompanhar a tendência de longo prazo. Quando a tendência começa a se formar, a estratégia pode perder a oportunidade de entrada. Além disso, a estratégia abre posições baixas com frequência em uma tendência de volatilidade, aumentando os custos de negociação e o risco de deslizamento.

Além disso, a configuração de parâmetros fixos também pode variar muito de acordo com a variedade e o ambiente de mercado. Isso requer ajustes de experiência manual.

Direção de otimização

As estratégias de negociação de criptomoedas podem ser otimizadas de várias maneiras:

  1. Adição de função de adaptação de parâmetros. Permite que os parâmetros de N, N / 2 sejam automaticamente ajustados de acordo com a volatilidade do mercado e a frequência do sinal, para adaptar-se a mais cenários.

  2. Aumentar a regra de julgamento de tendências. Julgar a direção da tendência antes de entrar, evitando a entrada errada de situações de volatilidade de preços.

  3. Combinação de várias estratégias de unidade de período de tempo. Determine a direção da tendência em períodos de tempo mais elevados e entre em níveis mais baixos.

  4. Optimizar a estratégia de stop loss. Trailing Stop Loss ou Time Stop Loss, reduzir a retração.

Resumir

A estratégia de negociação de mariscos permite o acompanhamento eficaz de tendências por meio de um sistema de ruptura simples. O controle de risco é a maior vantagem da estratégia, graças ao rápido stop loss e ao gerenciamento de fundos fixos. Ao mesmo tempo, também vemos que a estratégia pode ser expandida e otimizada em várias dimensões para se adaptar a mais variedades e ambientes de mercado.

Código-fonte da estratégia
/*backtest
start: 2022-12-24 00:00:00
end: 2023-12-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//oringinally coded by tmr0, modified by timchep
//original idea from «Way of the Turtle: The Secret Methods that Turned Ordinary People into Legendary Traders» (2007) CURTIS FAITH
strategy("Turtles", shorttitle = "Turtles", overlay=true, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100)
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(12, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////

shortingEnabled = input(title="Enable Shorting?", type=bool, defval=true)

enter_fast = input(20, minval=1)
exit_fast = input(10, minval=1)
enter_slow = input(55, minval=1)
exit_slow = input(20, minval=1)

fastL = highest(enter_fast)
fastLC = lowest(exit_fast)
fastS = lowest(enter_fast)
fastSC = highest(exit_fast)

slowL = highest(enter_slow)
slowLC = lowest(exit_slow)
slowS = lowest(enter_slow)
slowSC = highest(exit_slow)

enterL1 = high > fastL[1] 
exitL1 = low <= fastLC[1] 
enterS1 = low < fastS[1]
exitS1 = high >= fastSC[1]

enterL2 = high > slowL[1] 
exitL2 = low <= slowLC[1] 
enterS2 = low < slowS[1]
exitS2 = high >= slowSC[1]


if testPeriod()
    strategy.entry("fast L", strategy.long, when = enterL1) 
    
    if not enterL1
        strategy.entry("slow L", strategy.long, when = enterL2)
        
    strategy.close("fast L", when = exitL1)
    strategy.close("slow L", when = exitL2)

if shortingEnabled and testPeriod()
    strategy.entry("fast S", strategy.short, when = enterS1)
    if not enterS2
        strategy.entry("slow S", strategy.short, when = enterS2)
        
    strategy.close("fast S", when = exitS1)
    strategy.close("slow S", when = exitS2)