Continuando com os três artigos anteriores sobre código real de negociação programática:
Produtos secos pesados - detalhes e reflexões sobre negociação automatizada em tempo real de sistemas de negociação quantitativos (1. Problemas e dificuldades)
Sistema de negociação quantitativo - Detalhes e reflexões automatizadas da oferta firme (2. Objetivo da oferta firme)
Sistema de negociação quantitativo - Detalhes e pensamentos automatizados de ofertas reais (3. Habilidades de processamento)
Aqui continuaremos a falar sobre o sistema de negociação multiestratégia e o centro de mercado na estrutura geral do código de oferta real.
Prefácio
Na indústria comercial, especialmente nos contratos futuros, vários mestres comerciais de alta alavancagem aparecerão de vez em quando, e o principal de 100.000 yuans pode facilmente se transformar em dezenas de milhões. No entanto, quase todas essas pessoas eram como meteoros cruzando o céu noturno. Depois de um breve momento deslumbrante, desapareceram silenciosamente.
E outro grupo de comerciantes veteranos que fazem negócios há muito tempo são submissos o dia todo, falando sobre o futuro incognoscível, temendo o mercado e os cisnes negros chegando a qualquer momento, eles usam uma alavancagem muito baixa para. abrir posições e tentar errar A direção é como a grama na parede, balançando para a esquerda e para a direita, sem a determinação e a coragem de um mestre. Mas, por alguma razão, este grupo de pessoas tem estado activo no mercado. Embora a alavancagem seja baixa, as suas posições não são pequenas.
Na natureza humana do mundo comercial, as estrelas são fáceis de encontrar, mas as estrelas de aniversário são difíceis de encontrar.
Como um trader quantitativo sobrevivente, acho que um dos pontos mais importantes na negociação é perceber a necessidade de múltiplas estratégias. Ainda é difícil implementar estratégias múltiplas em negociações subjetivas porque a mão de obra é limitada (a menos que contrate vários traders como uma instituição) e o mercado funciona 24 horas por dia, 7 dias por semana e é fácil perder pontos de entrada. No entanto, a negociação programática é relativamente fácil de implementar. A programação perde a capacidade do cérebro e dos olhos humanos para identificar padrões de tendências de preços, mas tem capacidades de execução mais fortes e uma capacidade mais forte de copiar estratégias e dispersar posições, o que tem vantagens e desvantagens.
Com multi-alvo, multi-estratégia e multiparâmetros, as posições de capital são naturalmente dispersas. Não há mais uma emocionante abertura e fechamento de um único lucro ou prejuízo, mas a busca por suavizar ao máximo a curva de capital.
Visão geral
A imagem abaixo é o diagrama geral da arquitetura de um conjunto do meu código real.

Toda a arquitetura é dividida em duas partes. Um é um centro de mercado independente e o outro é o programa de negociação responsável pela implementação da lógica estratégica.
Normalmente eu inicio um programa com uma conta, e seus parâmetros de política e chaves de conta são diferenciados por arquivos de configuração, para que o código possa ser completamente compartilhado e a versão do código seja mais fácil de gerenciar. Alguns parâmetros da estratégia podem ser ligeiramente diferentes, principalmente para escalonar certas operações para que não sejam executadas repentinamente ao mesmo tempo.
Quando antes havia poucas estratégias, iniciei um programa Python com cada subestratégia, mas depois descobri que a memória do servidor não era suficiente. Porque um programa Python em si ocupa cerca de 60M de memória. Se houver mais estratégias e for copiado para várias contas, ele ocupará rapidamente muita memória. Embora você possa pagar mais por um servidor mais poderoso, ele também é difícil de gerenciar e manter. No final, foi alterado para o que é agora. Com base nas contas, estratégias semelhantes em diferentes moedas (múltiplas moedas e vários parâmetros) são agrupadas e, em seguida, um grupo de estratégias é dividido em um aplicativo Python. Depois de executá-lo, sinto que esse modelo de combinação é muito bom para o layout de múltiplas contas e múltiplas estratégias. É muito conveniente para gerenciamento de código e operação e manutenção em tempo real.
A vantagem de uma subestratégia para um aplicativo Python é que o código pode ser muito mais simples. No entanto, imagine só, se a sua estratégia for executada nas 40 principais moedas, e então cada moeda executar 3 estratégias diferentes, então serão 120 subestratégias. Se houver mais três contas, serão 360 subestratégias. estratégias. Este modelo Seria insustentável.
Quando há poucos aplicativos, você pode primeiro usar um terminal como o tmux para gerar informações de log em tempo real, o que é muito conveniente para monitorar nos estágios iniciais da operação do programa. Depois que o código estiver estável no período posterior, software de operação e manutenção como o pm2 será usado para gerenciamento. Basta analisar o arquivo de log regularmente no futuro.
No caso de múltiplos alvos e múltiplas estratégias, um centro de mercado independente deve ser padrão. As diversas informações de mercado obtidas podem ser compartilhadas entre múltiplos programas de negociação, ou seja, os módulos de estratégia no lado esquerdo da imagem acima.
Centro de cotação
A imagem abaixo é uma imagem mais detalhada do módulo market center.

Em primeiro lugar, você pode definir os símbolos da linha k a serem obtidos através do arquivo de configuração, para que seja mais fácil alterar o tipo no futuro.
Se for multiperíodo, você poderá obter a linha k do período do divisor comum e, em seguida, cada estratégia poderá reamostrar de acordo com suas próprias necessidades.
Se você quiser simplificar as coisas de uma vez por todas, então é melhor obter diretamente a linha K de 15 minutos, porque estratégias de média e baixa frequência, especialmente acompanhamento de tendências, com um ciclo inferior a 15 minutos, são basicamente difícil ganhar dinheiro a longo prazo.
Por exemplo, se você tiver uma estratégia de 15 minutos, 1 hora ou 4 horas, o centro de mercado só precisará obter a linha K de 15 minutos. Se o comprimento da linha k do grande período após a reamostragem não for suficiente, será necessário salvar mais linhas k de 15 minutos no banco de dados no momento da inicialização.
Como o websocket envia apenas as informações atualizadas mais recentes da linha k, se sua estratégia usar um ciclo de linha k relativamente grande e um longo tempo de lookback, como 4 horas de ma150, serão 600 horas (25 dias) de dados, 15 Se for necessária uma k linha por minuto, serão necessárias 2.400. Isso depende da aquisição única e do salvamento por meio da API restante quando o centro de mercado é iniciado, como base para atualizações contínuas subsequentes.
Dividi todo o centro de mercado em dois aplicativos. Na verdade, também pode ser combinado em um aplicativo, mas é mais robusto separá-los. Vamos falar primeiro sobre o Plano B secundário.
Plano B
Conforme mencionado em vários artigos anteriores, isso serve principalmente para evitar que o websocket do PlanA seja desconectado. É utilizado como backup temporário, principalmente no momento de saída da estratégia, para evitar que o preço tenha percorrido uma certa distância na direção oposta e. a posição de saída não foi encerrada, causando mais perdas inesperadas.
O Plano B é muito simples. Ele usa principalmente a função public_get_ticker_price para obter os preços mais recentes de todos os contratos perpétuos de uma só vez. Esta é também a informação de preço mais recente compilada pelo próprio B An.
Atualmente, B'an possui mais de 200 contratos perpétuos. Se obtivermos os preços mais recentes um por um, devemos garantir que o preço de cada produto seja atualizado a cada 3 segundos. A API será chamada mais de 4.000 vezes em um minuto. que deve exceder o limite não. No entanto, o peso da API da função mencionada anteriormente é de apenas 2. Se for usada uma vez a cada 3 segundos, consumirá apenas 40 cotas de API por minuto.
Após meu teste, basicamente a Binance agrega os preços de todos os contratos uma vez em cerca de 1 a 2 segundos, portanto, para o preço de backup de estratégias de média e baixa frequência, um atraso de cerca de 5 segundos é completamente suficiente.
Se seus requisitos não forem altos, você pode até usá-lo para sintetizar linhas K aproximadas para todos os contratos, evitando completamente o uso de websocket. Mesmo que este tipo de linha K não possa ser usado para negociação, ele também pode ser usado para escanear todas as informações do mercado e, em seguida, fornecer pontos de entrada para traders subjetivos com base em seus próprios algoritmos de estratégia projetados, como divergência e convergência de média móvel, reconhecimento de padrões simples, etc. Sinal. Caso contrário, como você pode ver tantas moedas? Se você tem um bom day trader, esta ferramenta pode ser útil para auxiliar na negociação. Já escrevi ferramentas semelhantes para outros. É muito bom quando o mercado está bom, mas o mercado não tem estado bom recentemente.
Obviamente, esta solução só tem utilidade prática ao negociar muitas moedas. Caso contrário, é melhor obter diretamente o preço BBO handicap de cada variedade.
Observe também que as informações de preço de backup devem ser usadas com frequência no código principal. Por exemplo, são usadas para calcular o valor dos fundos em moeda legal correspondente à posição e a taxa aproximada de lucros e perdas, o que não requer dados muito precisos. Porque trechos de código e informações que não são usados com frequência podem ter sido quebrados há muito tempo e você pode nem saber disso até que sejam usados. Qualquer pessoa que tenha escrito muito código sabe que esse tipo de código de apêndice pode ser facilmente alterado acidentalmente sem perceber.
Plano A
O código principal do centro de mercado. Este aplicativo possui 4 funções principais.
Obtenha castiçais de base histórica. Conforme mencionado anteriormente neste artigo, sempre que você começar, você deve garantir que todas as linhas K exigidas por todas as estratégias estejam presentes.
gerenciamento de websocket. Este módulo é um pouco mais complicado e precisa lidar com diversas situações de desconexão, reconexão, etc. Cada vez que a exchange envia novos dados da linha k, os dados da última barra da linha k no banco de dados são atualizados.
Além dos dados da linha K, também coloquei no centro do mercado as atualizações das informações de precisão de cada variedade. Ou seja, a função public_get_exchangeinfo obtém os vários preços do pedido e a precisão mínima da quantidade do pedido e depois os converte em um tipo de dicionário conveniente. Desta forma, todas as estratégias podem ser compartilhadas.
A última etapa é verificar, uma simples verificação de sanidade é suficiente. Verifique se as linhas K obtidas são contínuas e não há omissões e, em seguida, compare-as regularmente, uma por uma, com as linhas K obtidas pela API restante, se a diferença de preço com o preço obtido pelo Plano B é muito grande, etc. Resumindo, é apenas uma questão de comparação e inspeção para que os erros sejam descobertos precocemente.
Esta é provavelmente a estrutura central do meu mercado de estratégia de média a baixa frequência. Se necessário, as informações de atualização da conta também podem ser obtidas através do websocket. Mas isso é um pouco mais problemático e não será usado na maioria das vezes.