Depois de estudar o backtrader por tanto tempo, sinto que, em comparação com o vnpy, a maior vantagem do backtrader é que ele lida com vários padrões e vários períodos com muita elegância, o que é mais forte que o vnpy. Ao lidar com vários alvos e vários ciclos em tempo real, é mais complicado devido ao atraso de rede incerto. Considere um cenário simples de vários alvos em um único período, receba ticks da extremidade remota e sintetize gráficos de barras de 1 minuto.
O tempo da linha composta de minutos do vnpy não é acionado pelo minuto completo do tempo físico, mas pelo próximo tick. Quando o próximo tick for recebido, verifique se o seu tempo é mais do que um minuto completo em comparação com o tempo do tick anterior. Em caso afirmativo, sintetize uma barra de 1 minuto. Se o próximo tick estiver longe do tempo do tick anterior, então há um grande problema. Sob alvos múltiplos, este mecanismo de síntese de k-linhas não pode sincronizar cada alvo.
No backtrader, o tempo de síntese da linha do minuto é acionado por todo o minuto do tempo físico (você pode definir o tempo de síntese para ser adiado, como um segundo, para considerar o atraso da rede). A cada minuto completo, como 10: 00, seu cliente começará a agregar os dados coletados. Marque, uma linha K de 1 minuto é sintetizada para cada alvo. Esse mecanismo faz um bom trabalho sincronizando as várias linhas de minuto subjacentes. Se multiciclo for considerado, a situação é mais complicada, bt pode lidar bem com isso, mas vnpy é difícil de lidar.
Claro, o backtrader também tem limitações, ou seja, muitas pessoas não conseguem entender.Na verdade, se você quiser quantificar a negociação, ainda existem muitas outras opções, como interface de negociação, versão crackeada, etc., você pode fazer alta frequência, e é uma oferta firme, e a tarifa é relativamente razoável e pode atender a maioria das necessidades.
sinal |
void SendOrders(int ClientId, int Category[], int EntrustType[], const char* Gddm[], const char* Zqdm[], float Price[], int Quantity[], int Count, char* Result[], char* ErrorInfo[]); |
|
Função |
Pedidos de lote de conta única, diferencie cada pedido por subscrito |
|
parâmetro |
ID do Cliente |
ID do Cliente |
Categoria[] |
Uma variedade de categorias confiadas, consulte [Categorias delegadas] para significados específicos |
|
EntrustType[] |
Uma variedade de métodos de cotação, consulte [métodos de cotação] para significados específicos |
|
Gddm[] |
matriz de código do acionista |
|
zqdm[] |
Matriz de código de segurança |
|
Preço[] |
Matriz de preço do pedido |
|
Quantidade[] |
Matriz de quantidade do pedido |
|
Contar |
O número de itens confiados, ou seja, o comprimento da matriz |
|
Resultado[] |
Matriz de resultados confiados, cada resultado precisa alocar 1024*1024 bytes de espaço Por favor, consulte [Formato do resultado] para o formato |
|
Informação de erro[] |
Matriz de mensagem de erro, cada mensagem de erro precisa alocar 256 bytes de espaço |
|
valor de retorno |
Nenhum, se a i-ésima comissão foi bem-sucedida ou não, é julgado se ErrorInfo[i] é uma string vazia |
Além disso, a interface de negociação quantitativa pode ser desenvolvida para desenvolvimento secundário, por isso é mais operável, e pequenos parceiros que têm necessidades a esse respeito podem aprender mais sobre isso.