Este sistema de negociação chamado
O sistema segue as seguintes etapas:
Calcular o ATR de 14 períodos e normalizá-lo dividindo-o pelo preço de fechamento.
Calcular a média móvel simples (SMA) de 100 dias do ATR normalizado.
Calcular a relação entre o ATR normalizado e a sua SMA de 100 dias.
Determinar a alavancagem-alvo com base na inversa do rácio (2/rácio).
Calcular o número alvo de operações abertas multiplicando a alavancagem alvo por 5.
Objetivo de gráfico e transações abertas atuais no gráfico.
Verifique se existe uma hipótese de compra (se as transacções abertas atuais forem inferiores à meta) ou de fechamento (se as transacções abertas atuais forem superiores à meta mais 1).
Se tiveres oportunidade de comprar, abre a transacção longa e adiciona-a à matriz openTrades.
Se a oportunidade de fechar a negociação e as negociações existirem na matriz openTrades, feche a transação mais recente referenciando a matriz e remova da matriz.
O sistema visa capturar tendências ajustando dinamicamente as negociações abertas e a alavancagem com base na volatilidade do mercado.
As vantagens desta estratégia:
O ajustamento dinâmico da alavancagem e do tamanho da posição com base nas alterações da volatilidade do mercado pode gerenciar eficazmente o risco.
A utilização do indicador ATR para calcular o tamanho da posição-alvo, que reflete a volatilidade do mercado, é uma escolha razoável.
A pirâmide com várias posições pode lucrar com tendências.
O registo de cada operação em matriz permite um controlo explícito da abertura e do encerramento das operações.
A estratégia tem poucos parâmetros e é fácil de implementar e operar.
A lógica é clara e a estrutura do código é bem organizada para fácil otimização e iteração.
Os riscos desta estratégia:
O ATR reflete apenas a volatilidade passada, não sendo capaz de prever alterações futuras, pode levar a um ajustamento inadequado da alavancagem.
A pirâmide pode acumular perdas quando a tendência se inverte.
As operações de registro de matriz aplicam-se apenas a operações abertas/fechadas simples.
As definições da alavancagem e do tamanho da posição-alvo devem ser ajustadas com base nas especificidades do símbolo e não em parâmetros fixos.
A dependência de um único indicador pode ser enganosa. Outros indicadores de volatilidade ou algoritmos de aprendizado de máquina podem melhorar a robustez.
A estratégia pode ser otimizada nos seguintes aspectos:
Adicionar stop loss para cortar perdas ativamente ao atingir o nível de stop loss.
Otimizar os parâmetros do indicador através do ensaio de diferentes períodos de ATR.
Tente outras estratégias de entrada como entradas de quantidade fixa e teste os resultados.
Adicionar outras métricas de volatilidade como Bollinger Bands WIDTH, KD, RSI etc. para utilização combinada.
Usar modelos de aprendizagem de máquina para prever a volatilidade em vez de suavização simples.
Otimizar o cálculo do tamanho da posição, por exemplo, utilizando múltiplos ATR ou funções de volatilidade.
Registre mais detalhes de entrada, como preço de entrada, tempo, etc. para análise e otimização da estratégia.
Adicione otimização de parâmetros para otimização automática para encontrar conjuntos de parâmetros ideais.
A estratégia ajusta dinamicamente a alavancagem e o tamanho da posição com base no ATR para gerenciar a exposição ao risco durante as tendências e tem certas vantagens.
/*backtest start: 2022-10-09 00:00:00 end: 2023-10-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("I11L - Risk Adjusted Leveraging", overlay=false, pyramiding=25, default_qty_value=20, initial_capital=20000, default_qty_type=strategy.percent_of_equity,process_orders_on_close=false, calc_on_every_tick=false) atr = ta.atr(14) / close avg_atr = ta.sma(atr,100) ratio = atr / avg_atr targetLeverage = 2 / ratio targetOpentrades = 5 * targetLeverage plot(targetOpentrades) plot(strategy.opentrades) isBuy = strategy.opentrades < targetOpentrades isClose = strategy.opentrades > targetOpentrades + 1 var string[] openTrades = array.new_string(0) if(isBuy) strategy.entry("Buy"+str.tostring(array.size(openTrades)),strategy.long) array.push(openTrades, "Buy" + str.tostring(array.size(openTrades))) if(isClose) if array.size(openTrades) > 0 strategy.close(array.get(openTrades, array.size(openTrades) - 1)) array.pop(openTrades)