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.Os ficheiros persistentes são carregados automaticamente.
- 2.O estado de trading anterior é restaurado na memória.
- 3.As posições ativas continuam a ser monitorizadas imediatamente.
- 4.As ordens pendentes continuam a rastrear o estado de execução da exchange.
- 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

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.Os dados são escritos num ficheiro temporário .tmp.
- 2.O ficheiro temporário é completamente finalizado.
- 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.Os ficheiros de persistência são detetados.
- 2.Os objetos serializados são carregados de volta para a memória.
- 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.Uma operação de gravação final é forçada.
- 2.A fila de gravação é completamente esvaziada.
- 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.