Sistema de negociação de alavancagem dinâmico ajustado ao risco


Data de criação: 2023-10-16 16:00:52 última modificação: 2023-10-16 16:00:52
cópia: 0 Cliques: 774
1
focar em
1617
Seguidores

Sistema de negociação de alavancagem dinâmico ajustado ao risco

Visão geral

O sistema de negociação, chamado de “Range Dynamic Risk Adjusted Leverage Trading System”, foi criado para gerenciar as negociações com base na volatilidade do mercado atual em relação à sua média histórica. O sistema calcula o número de posições abertas alvo com base no ATR (Average True Range) e ajusta a alavancagem de acordo. O sistema usa um método de abertura de posição em pirâmide, permitindo a abertura de várias posições ao mesmo tempo.

Princípio da estratégia

Os passos do sistema são os seguintes:

  1. Calcule o valor do ATR para um ciclo de 14 dias de ATR e divida-o pelo preço de fechamento atual para padronização.

  2. Calcule a média móvel simples de 100 dias do ATR padronizado ((SMA) }}.

  3. Calcule a proporção do ATR padronizado em relação ao seu SMA de 100 dias.

  4. De acordo com a inversão da proporção ((2 / proporção) determinar o objetivo de alavancagem

  5. A quantidade de posições alvo é calculada multiplicando a alavancagem alvo por 5.

  6. Trace o número de posições abertas e o número de posições abertas atualmente no gráfico.

  7. Verifique se há uma oportunidade de compra ((se o número de posições abertas atualmente for menor do que o número alvo) ou uma oportunidade de posição fechada ((se o número de posições abertas atualmente for maior do que o número alvo mais 1) ◦

  8. Se houver uma oportunidade de compra, crie mais uma ordem e adicione a transação ao arquivo openTrades.

  9. Se houver uma oportunidade de equilíbrio e houver transações na matriz openTrades, equilibre as transações mais recentes e remova-as da matriz.

O sistema foi desenvolvido para capturar as tendências do mercado através de um ajuste dinâmico do número de posições abertas e da alavancagem, e para controlar melhor a abertura de uma única transação usando o rastreamento de posições em arrays.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Ajuste dinâmico do número de posições e de alavancagem, pode ajustar a abertura de risco de acordo com a variação da taxa de flutuação do mercado. Quando a taxa de flutuação é baixa, aumente o número de posições e alavancagem, quando a taxa de flutuação é alta, reduza o número de posições e alavancagem, controle eficaz do risco.

  2. O uso do indicador ATR para calcular o número de posições alvo, que pode refletir a volatilidade do mercado, é uma opção de indicador razoável para ajustar posições dinamicamente.

  3. O método de aquisição de posição em pirâmide, ou seja, abrir várias posições ao mesmo tempo, permite lucrar com a tendência.

  4. O uso de arquivos para registrar cada posição aberta permite controlar claramente a abertura de cada transação, evitando a ocorrência de operações reversíveis desnecessárias.

  5. A estratégia tem poucos parâmetros e é fácil de implementar e operar.

  6. A estratégia é clara e fácil de entender, a estrutura do código é razoável, fácil de otimizar e iterar.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. Os indicadores ATR refletem apenas a volatilidade do passado, e as variações futuras na taxa de flutuação não são previsíveis, podendo levar a um ajuste indevido de alavancagem.

  2. A pirâmide pode acumular perdas quando a tendência se inverte.

  3. O registro de arquivos de abertura de posição só se aplica a operações simples de abertura de posição, e uma estrutura de dados mais complexa é necessária se a lógica de abertura de posição for mais complexa.

  4. A definição do objetivo de alavancagem e do número de posições precisa ser ajustada de acordo com as características da variedade e não deve ser limitada a um parâmetro fixo.

  5. Um único indicador pode ser enganoso e pode ser considerado a adição de outros indicadores de volatilidade ou algoritmos de aprendizagem de máquina para melhorar a estabilidade.

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Aumentar a estratégia de stop loss e parar ativamente quando os prejuízos atingem o ponto de stop loss.

  2. Otimizar os parâmetros do indicador, testar a eficácia de diferentes parâmetros do ciclo ATR.

  3. Tente estratégias diferentes de abertura de posições, como a abertura de uma quantidade fixa, para testar o efeito.

  4. Adicionar outros indicadores para medir a volatilidade, como WIDTH, KD, RSI, etc.

  5. O uso de métodos de aprendizado de máquina para prever a taxa de flutuação, em vez de métodos de suavização simples.

  6. Para otimizar o cálculo do número de posições abertas, pode-se usar o múltiplo ATR ou a função de taxa de flutuação.

  7. Registre mais detalhes de abertura de posição, como preço de abertura, tempo, etc., para análise estratégica e otimização.

  8. Adição de função de otimização de parâmetros, otimização automática para encontrar a melhor combinação de parâmetros.

Resumir

Esta estratégia é baseada em ATR de ajuste dinâmico de alavancagem e número de posições abertas, em uma tendência de ajustamento de risco de abertura, com uma certa vantagem. Mas também há parâmetros de definição de dificuldade, indicador de otimização de espaço, etc. problemas que merecem uma otimização adicional.

Código-fonte da estratégia
/*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)