O artigo anterior, Informações Hard-Core - Detalhes e Reflexões sobre Oferta Real Automatizada de Sistema de Negociação Quantitativa (I. Problemas e Dificuldades), falou sobre alguns problemas básicos da negociação real no círculo monetário. Este artigo fala sobre o objetivo principal da oferta firme.
Acho que existem quatro principais:
1. Implementar a lógica estabelecida da estratégia
Não há dúvida sobre isso. Quando houver sinal, deverão ser realizadas as operações correspondentes, abrindo e fechando posições. Este ponto exige que você tente não usar pedidos com limite. Caso contrário, se a transação não puder ser concluída, você terá que prosseguir com o pedido. No final, o preço pode já ter ido longe demais. pergunta.
No longo prazo, a derrapagem causada pela utilização de ordens de mercado é aproximadamente semelhante à derrapagem causada pela perda ocasional de ordens com limite, mas pela perseguição de ordens, por isso é melhor entrar e sair do mercado diretamente, a menos que a sua estratégia seja muito especial.
Além disso, se você usar pedidos com limite, seu código será mais complicado porque você terá que gerenciar pedidos com limite não preenchidos e depois perseguir pedidos. E se apenas parte da ordem limite for preenchida? Os pedidos com limite restantes estão sempre suspensos? Ou devo perder a peça e emitir outra ordem de mercado? Esse tipo de operação de uma etapa gera vários pedidos de transação e a revisão subsequente também é problemática e fácil de ser confundida. Portanto, é melhor usar apenas a ordem de mercado. Desde que o envio seja bem-sucedido, a transação estará basicamente garantida. Se for de facto uma estratégia sensível à derrapagem, então negocie apenas em alvos com boa liquidez.
Além disso, para contratos, a alavancagem não deve ser alterada à vontade. É melhor usar a alavancagem ideal para backtesting e depois descontá-la em 20%. Não preveja o mercado subjetivamente e ajuste a alavancagem manualmente. Mudar de posição também é um tabu na negociação automatizada.
É melhor ganhar ou perder automaticamente e reduzir a posição. Quando a retração atingir um determinado nível, a alavancagem deve ser reduzida. Não faça o contrário, pensando que o vento está chegando e aumente a alavancagem (mas você pode aumentar a alavancagem). principal e reduzir a alavancagem). O mais importante é manter sua conta ativa, então fique invicto primeiro. Você pode esperar que a curva de capital passe pelo período de retração antes de adicionar novamente a alavancagem. No entanto, se for utilizado o modelo de juros compostos, já se trata de um simples contrato automático de vitória e perda.
2. Minimize o deslizamento
Isso foi mencionado no artigo anterior. O deslizamento não pode ser eliminado, apenas pode ser mitigado. Isto exige que você obtenha informações sobre preços de mercado o mais rápido possível, bem como vários fundos e informações de posição na conta de câmbio, para que possa responder rapidamente.
Em termos da estrutura geral da oferta real, existem muitas subestratégias e requer a aquisição atempada de diversas informações. Portanto, é necessário um centro de mercado de websocket dedicado para partilhar as tarefas. Equipado com centro de mercado Plano B da Restful para backup. Desta forma, se o websocket estiver desconectado e não puder ser conectado, ainda haverá um preço relativamente novo para julgar se é necessário sair do mercado. Ao correr, você tem que ser rápido. É melhor correr na direção errada do que ficar preso em um engarrafamento e não saber o que o futuro reserva.
3. Operação de longo prazo
Isso foi mencionado no artigo anterior. O círculo monetário funciona 7*24 e seu código não pode ser encerrado. Isso exige que o código não seja interrompido por diversas exceções lançadas e que haja código para lidar com diversas situações inesperadas. Também não deve haver bugs, como vazamentos de memória, caso contrário, o programa irá travar com o tempo e até mesmo todo o servidor será desativado. Felizmente, o Python não está sujeito a tais problemas. Ele possui um mecanismo automático de reciclagem de memória. Se não funcionar, você pode reiniciar manualmente o programa de negociação todos os dias ou alguns dias. De qualquer forma, é uma negociação de média e baixa frequência. Esses são requisitos básicos de desenvolvimento de código de back-end e são fáceis de alcançar.
Geralmente, a negociação quantitativa usa Python. Uma característica importante do Python, uma linguagem de script, é a compilação dinâmica, que tem eficiência de execução um pouco menor porque não é fácil de depurar porque é compilada e executada ao mesmo tempo (mas não afetará transações de média e baixa frequência em todos). Se houver um problema implícito na lógica do código, pode não ser fácil detectá-lo. Por exemplo, se houver 100 linhas de código e houver um problema na linha 99, mas ele só for executado até a linha 95 todas as vezes, o problema não será descoberto porque o erro deve ser encontrado após a execução até a linha 99 e acionar o código relevante. Mas isso pode ser tarde demais e o programa irá travar diretamente se você não tentar capturar a exceção.
Outro recurso está incluído no problema mencionado acima. Como o Python é fortemente tipado, as conversões implícitas são raras. Se você confiar muito no tipo de dados enviado pelo servidor, principalmente nesses números, é provável que sofra uma perda, pois às vezes os números se transformarão em strings. Diferentes moedas na troca, diferentes versões de API e os mesmos dados de retorno do websocket e do restante podem ser de tipos diferentes. Portanto, em princípio, você deve forçar a transformação todas as vezes ou primeiro determinar se é necessário transformar.
Além disso, não confunda as posições de abertura e fechamento entre várias estratégias, especialmente aquelas da mesma moeda, e faça um bom trabalho isolando-as. Caso contrário, em algumas condições extremas de mercado, a estratégia A fechará a posição da estratégia B, o que acabará por levar ao desalinhamento. Poderá ter de parar a oferta real e começar de novo, o que será incoerente e poderá perder as principais tendências do mercado.
Em uma palavra, tudo é para uma operação real totalmente automatizada e sem intervenção de longo prazo.
Contudo, se a estratégia for demasiado complexa, poderá não ser fácil alcançar uma abordagem completamente isenta de intervenção. Simplificar a estratégia também é um ponto de partida, não complique muito. Por exemplo, sinais como o OBV devem ser usados com moderação, porque o OBV precisa rastrear informações de preço e volume de longo prazo, e a negociação real precisa manter muitos dados. Cada interrupção e reinicialização é uma questão problemática. Como último recurso, evite tais fatores.
4. Controle de risco
Esta é a principal prioridade dos requisitos de oferta firme.
O mais perigoso é não conseguir fechar uma posição. O mercado seguiu na direção oposta e continuou a correr descontroladamente. Como resultado, seu código de saída estava fora de controle. Não importa o motivo, a posição foi fechada com perdas. No círculo monetário, as altcoins podem subir várias vezes em um curto período de tempo. Portanto, no caso de venda a descoberto, mesmo que você não utilize alavancagem e ainda tenha meia posição, pensando que não tem com o que se preocupar, o resultado pode ser que sua posição tenha sido apagada pela manhã.
Por conseguinte, é necessário garantir que o mecanismo de saída entre em vigor. Se perder a oportunidade de abrir uma posição, pelo menos não será fatal. Se perder a oportunidade, será no máximo uma pena, mas se perder a oportunidade de fechar a posição, causará grandes problemas.
Aqui estão duas soluções brevemente, e falarei sobre elas em detalhes mais tarde, quando tiver tempo.
O primeiro ponto é que é melhor ter um stop loss rígido, que é semelhante a um stop loss com taxa de perda fixa. Por exemplo, se uma moeda grande perder mais de 10% e uma moeda pequena perder 15%, a posição será fechada imediatamente e fugirá.
Para o método hard stop loss, o preço do stop loss deve ser definido no momento da abertura da posição. Portanto, as ordens stop-loss algorítmicas (algumas também chamadas de ordens condicionais) devem ser submetidas o mais rápido possível após a abertura de uma posição, e não há necessidade de alterar o preço no meio do caminho. Dessa forma, a bolsa o ajudará a monitorar o preço em tempo real e, em seguida, a enviar uma ordem de mercado para sair do mercado após seu acionamento. Pode haver muita derrapagem nesta abordagem, mas é mais provável que seja mais estável e confiável do que o stop loss que você mesmo definiu. E mesmo que algo dê errado e não seja acionado, você ainda pode ir para a bolsa para. reivindicar direitos (então você tem que ir para a bolsa superior).
É claro que esse tipo de stop loss é usado para cobrir o fundo e raramente deve ser acionado. É melhor controlar o momento da saída de acordo com sua própria estratégia, para que a retração seja provavelmente menor.
O segundo ponto é que o programa não abrirá posições aleatoriamente. Não abra posições continuamente, mas pense que não, e acabe abrindo uma grande exposição. Não há problema se o preço não flutuar em um curto período de tempo. É possível intervir manualmente para corrigi-lo. Se reverter repentinamente, sua posição poderá ser liquidada. Claro que este é um erro de baixo nível, mas acontece. Especialmente depois de iterar e atualizar o código no meio do caminho, isso pode não ser considerado com cuidado.
Nesse caso, você precisa primeiro desacelerar o ritmo de abertura de uma posição e aguardar o retorno dos resultados de abertura de posição. Além disso, você deve verificar e confirmar as informações da conta naquele momento antes de abrir uma posição. É claro que você também pode registrar todas as operações localmente, o que economizará o número de solicitações de API e o tempo de consulta da própria bolsa. Status da Conta.
Além disso, de forma mais eficaz, é possível limitar antecipadamente a alavancagem máxima de uma bolsa. Isso pode ser ajustado por você mesmo. O padrão do Binance é 20 vezes, mas você pode alterá-lo para 3 vezes ou até 2 vezes (é claro, isso requer que sua estratégia em si não use alta alavancagem, caso contrário você não será capaz de abrir alta alavancagem quando deveria). Portanto, não importa quão maluco seja o código, é impossível criar uma grande exposição enquanto você dorme. Isso é mais seguro.
Em suma, por vezes a verdadeira oferta não é apenas o código de transacção, mas também precisa de estabelecer outras linhas de defesa para evitar ser penetrado por eventos de cisne negro. Nunca leve isso de ânimo leve em nenhum momento e tente selar os pontos cegos.