Sistema de Persistência

Recuperação de Posição

O motor de trading inclui uma camada de persistência integrada, projetada para sobreviver a falhas (crashes), reinicializações e encerramentos inesperados sem perder o estado crítico do trading.

Todos os dados de trading ativos são automaticamente armazenados em disco usando o componente PersistentMap personalizado.

O sistema armazena persistentemente:

  • Posições ativas
  • Ordens pendentes
  • Controlos de trading por símbolo
  • Estados de gestão de risco

Quando o bot reinicia:

  1. 1.Os ficheiros persistentes são carregados automaticamente.
  2. 2.O estado de trading anterior é restaurado na memória.
  3. 3.As posições ativas continuam a ser monitorizadas imediatamente.
  4. 4.As ordens pendentes continuam a rastrear o estado de execução da exchange.
  5. 5.Os controlos de risco permanecem preservados.

Isto permite que o bot continue a operar sem intervenção manual após interrupções.

Objetivo:

  • Prevenir a perda de controlo sobre posições abertas
  • Preservar a continuidade do trading
  • Manter um estado de gestão de risco preciso
  • Evitar entradas duplicadas após reinicialização
Persistence System Example

Estrutura da Base de Dados

A camada de persistência usa armazenamento local leve baseado em ficheiros, construído sobre a serialização pickle do Python.

Cada estrutura persistente é armazenada num ficheiro independente:

  • active_positions.pkl
  • pending_orders.pkl
  • symbol_controls.pkl

A arquitetura é intencionalmente minimalista e otimizada para sistemas de trading de baixa latência.

Posições Ativas

Armazena trades atualmente abertos.

Cada posição contém:

  • Símbolo de trading
  • Direção da posição
  • Quantidade
  • Preço de entrada
  • Preço de stop loss
  • Preço de take profit
  • Estado do trailing stop
  • Timestamp

Objetivo:

  • Retomar a gestão de posição após reinicialização
  • Continuar a lógica de stop loss e trailing
  • Preservar o estado exato da entrada

Ordens Pendentes

Armazena ordens da exchange à espera de confirmação de execução.

Cada ordem contém:

  • Símbolo
  • Direção da ordem
  • Tipo de ordem
  • Quantidade
  • ID da ordem na exchange
  • Estado atual

Objetivo:

  • Prevenir ordens duplicadas
  • Continuar a monitorização do estado de execução da exchange
  • Recuperar fluxos de ordem não finalizados

Controlos por Símbolo

Armazena permissões de trading em tempo de execução e estados de proteção.

Cada símbolo pode conter:

  • Estado de compra ativada/desativada
  • Estado de venda ativada/desativada
  • Razões para desativação
  • Estados de bloqueio de risco

Objetivo:

  • Preservar restrições de risco automatizadas
  • Prevenir a reativação acidental após reinicialização

Lógica de Recuperação de Falhas (Crash)

O sistema de persistência é projetado para recuperação automática durante:

  • Falhas (crashes) do processo
  • Reinicializações do servidor
  • Falhas de VPS
  • Cortes de energia
  • Exceções inesperadas

Persistência Assíncrona

Todas as escritas são processadas numa thread de segundo plano dedicada.

Características:

  • Execução de trading não bloqueante
  • Gravação automática contínua
  • Agendamento de gravação baseado em fila

Objetivo:

  • Prevenir atrasos no trading causados por operações de disco.

Gravação Atómica de Ficheiros

O sistema usa substituição atómica de ficheiros para máxima segurança dos dados.

Fluxo de gravação:

  1. 1.Os dados são escritos num ficheiro temporário .tmp.
  2. 2.O ficheiro temporário é completamente finalizado.
  3. 3.O ficheiro é renomeado atomicamente para o ficheiro de persistência final.

Objetivo:

  • Prevenir ficheiros de persistência corrompidos durante falhas (crashes) ou escritas interrompidas.

Desduplicação de Gravação

A fila de persistência remove automaticamente pedidos de gravação obsoletos.

Comportamento:

  • Apenas o estado mais recente é persistido.
  • Escritas de disco redundantes são ignoradas.

Objetivo:

  • Reduzir o uso de disco
  • Melhorar o desempenho sob alta frequência de atualização

Recarregamento Automático do Estado

Durante a inicialização:

  1. 1.Os ficheiros de persistência são detetados.
  2. 2.Os objetos serializados são carregados de volta para a memória.
  3. 3.O motor de trading retoma a monitorização imediatamente.

Se os ficheiros de persistência não existirem:

  • Um novo armazenamento limpo é automaticamente inicializado.

Segurança entre Threads (Thread-Safety)

O motor de persistência usa bloqueios de sincronização internos durante as operações de gravação.

Características:

  • Escritas concorrentes seguras
  • Acesso multi-thread seguro
  • Substituição de ficheiros protegida

Objetivo:

  • Garantir consistência entre as threads de trading e a camada de persistência

Proteção de Encerramento Gracioso (Graceful Shutdown)

Antes do encerramento:

  1. 1.Uma operação de gravação final é forçada.
  2. 2.A fila de gravação é completamente esvaziada.
  3. 3.A thread de persistência em segundo plano é parada com segurança.

Objetivo:

  • Garantir que o estado de trading mais recente é escrito no disco antes da saída.