Esta estratégia rastreia a tendência de preços das criptomoedas definindo preços altos e baixos de ruptura.
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
Em especial, a lógica principal da estratégia é a seguinte:
Através deste loop lógico, ele pode capturar tendências ascendentes e descendentes do preço e alcançar a tendência seguinte.
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.
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.
Os seguintes aspetos podem ser ainda mais otimizados para esta estratégia:
Adicione a lógica de stop loss. Isso permite parar a perda quando as perdas excedem uma certa porcentagem para evitar perdas maiores.
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.
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.
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.
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())