Tendência de ruptura seguindo a estratégia

Autora:ChaoZhang, Data: 2023-12-08 17:16:34
Tags:

img

Resumo

Esta estratégia rastreia a tendência de preços das criptomoedas definindo preços altos e baixos de ruptura.

Princípio da estratégia

Esta estratégia usa principalmente o método da média móvel ponderada para determinar se há uma tendência óbvia para cima ou para baixo. Especificamente, ele registrará os preços mais altos e mais baixos durante um determinado período. Quando o preço de negociação real excede o preço mais alto registrado, julga-se que ocorreu uma tendência ascendente e vai longo. Quando o preço de negociação real é inferior ao preço mais baixo registrado, julga-se que ocorreu uma tendência descendente e vai curto.

Os preços de abertura para longo e curto são definidos através do parâmetro de entrada ENTRY, e os preços de fechamento são definidos através do parâmetro EXIT.

Em especial, a lógica principal da estratégia é a seguinte:

  1. Registro dos preços mais altos e mais baixos durante um determinado período (ajustável)
  2. Julgar se o preço de negociação real é superior ao preço mais alto
    1. Se superior, existe uma oportunidade longa, abrir posição longa com base no nível de preço definido pelo parâmetro ENTRY
    2. Se o preço de negociação real for inferior ao preço mais baixo, existe uma oportunidade curta, abrindo uma posição curta com base no nível de preço definido pelo parâmetro EXIT
  3. Após abrir uma posição longa, fechar quando o preço cair abaixo do nível definido pelo parâmetro EXIT
  4. Após abrir uma posição curta, feche-a quando o preço subir acima do nível definido pelo parâmetro ENTRY

Através deste loop lógico, ele pode capturar tendências ascendentes e descendentes do preço e alcançar a tendência seguinte.

Vantagens

A maior vantagem desta estratégia é que, ajustando os parâmetros, pode capturar automaticamente as tendências de preços sem a necessidade de julgamento manual da direção da tendência.

Além disso, esta estratégia é muito adequada para negociação quantitativa e pode facilmente alcançar a colocação automatizada de ordens. Sem operação manual, reduz o risco de negociação emocional e melhora muito a eficiência da negociação.

Por fim, esta estratégia também pode maximizar os retornos ajustando parâmetros.

Riscos

O maior risco desta estratégia é que configurações inadequadas de parâmetros podem levar a negociações excessivamente frequentes, aumento de taxas de negociação e perdas de deslizamento.

Além disso, um ajuste inadequado dos parâmetros também pode levar à falha em capturar as tendências de preços a tempo, perdendo oportunidades de negociação.

Por último, esta estratégia é demasiado sensível ao ruído do mercado a curto prazo, que pode gerar sinais de negociação errados.

Orientações de otimização

Os seguintes aspetos podem ser ainda mais otimizados para esta estratégia:

  1. Adicione a lógica de stop loss. Isso permite parar a perda quando as perdas excedem uma certa porcentagem para evitar perdas maiores.

  2. Adicione filtros de indicadores técnicos como média móvel, KDJ para julgar a tendência geral para evitar negociações excessivas devido ao ruído de curto prazo.

  3. Otimizar a lógica de configuração de parâmetros. O mecanismo de mudança adaptativo pode ser definido para parâmetros ENTRY e EXIT em vez de configuração estática para que possam ser ajustados com base nas condições do mercado.

  4. Utilize o aprendizado de máquina para treinar parâmetros ideais. Obtenha as configurações de entrada e saída ideais para o ambiente atual do mercado através de treinamento de dados históricos maciços.

Conclusão

A maior vantagem desta estratégia é que, ao capturar as tendências de preços, ela consegue negociação automatizada, o que pode reduzir o impacto das emoções humanas na negociação, reduzir os riscos e melhorar a eficiência.

Os principais riscos da estratégia são configurações inadequadas de parâmetros e sensibilidade excessiva ao ruído do mercado.

Em geral, esta é uma tendência simples e eficaz após a estratégia adequada para negociação quantitativa e automatizada.


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JstMtlQC

//@version=4
strategy("Trend Following Breakout",calc_on_order_fills=true,calc_on_every_tick =false, overlay=true, initial_capital=2000,commission_value=.1,default_qty_type = strategy.percent_of_equity, default_qty_value = 100)


/////////////// INPUT ENTRY EXIT
entry= input(100, "ENTRY H/L")
exit= input(50, "EXIT H/L")

/////////////// Backtest Input
FromYear = input(2015, "Backtest Start Year")
FromMonth = input(1, "Backtest Start Month")
FromDay = input(1, "Backtest Start Day")
ToYear = input(2999, "Backtest End Year")
ToMonth = input(1, "Backtest End Month")
ToDay = input(1, "Backtest End Day")

/////////////// Backtest Setting
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false 

/////////////// BUY OPEN PLOT
highestpricelong = highest(high,entry)[1]
plot(highestpricelong, color=color.green, linewidth=2)

/////////////// BUY CLOSE PLOT
lowestpricelong = lowest(high,exit)[1]
plot(lowestpricelong, color=color.green, linewidth=2)

/////////////// SHORT OPEN PLOT
lowestpriceshort = lowest(low,entry)[1]
plot(lowestpriceshort, color=color.red, linewidth=2)

/////////////// SHORT CLOSE PLOT
highestpriceshort = highest(low,exit)[1]
plot(highestpriceshort, color=color.red, linewidth=2)

///////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// CONDITION LONG SHORT //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

/////////////// SHORT 

entryshort= crossunder(close, lowestpriceshort)
exitshort= crossover(close,highestpriceshort)

/////////////// LONG 

exitlong= crossover(close, lowestpricelong)
entrylong= crossover(close,highestpricelong)

///////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// LONG and SHORT ORDER //////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////

/////////////// LONG 

if (entrylong)
    strategy.entry("LongEntry", strategy.long, when = window())
if (exitlong or entryshort)
    strategy.close("LongEntry", when=window())

/////////////// SHORT 

if (entryshort)
    strategy.entry("short", strategy.short, when = window())
if (exitshort or entrylong)
    strategy.close("short", when=window())



Mais.