cambiatus / backend

Cambiatus GraphQL API
GNU Affero General Public License v3.0
21 stars 18 forks source link

Rodar projeto de bots #296

Open lucca65 opened 2 years ago

lucca65 commented 2 years ago

Rodar o livro e tentar conectar na testnet da binance e se familiarizar com o repositório

MatheusBuss commented 2 years ago

Eu estava tendo problema em rodar o comando mix setup. Estava tendo esse erro:

== Compilation error in file lib/indicator/ohlc/worker.ex ==
** (CompileError) lib/indicator/ohlc/worker.ex:28: Core.Struct.TradeEvent.__struct__/0 is undefined, cannot expand struct Core.Struct.TradeEvent. Make sure the struct name is correct. If the struct name exists and is correct but it still cannot be found, you likely have cyclic module usage in your code
    lib/indicator/ohlc/worker.ex:28: (module)

Consegui resolver o erro adicionando o app Core pra lista de dependências do app Indicator. Pra fazer isso é só adicionar a seguinte linha no arquivo apps/indicator/mix.exs:

      {:core, in_umbrella: true}

Consegui compilar o código assim. Deve ser a única dependência do aplicativo, então as dependências devem ficar assim:

  defp deps do
    [
      {:core, in_umbrella: true}
    ]
  end
henriquecbuss commented 2 years ago

Eu tive problemas na hora de conectar com a testnet da Binance, com um erro do :crypto.hmac/3. Pra resolver, atualizei a dependência binance pra versão 1.0.

Nos arquivos apps/binance_mock/mix.exs, apps/data_warehouse/mix.exs, apps/naive/mix.exs e apps/streamer/mix.exs:

-  {:binance, "~> 0.7"},
+  {:binance, "~> 1.0"},
henriquecbuss commented 2 years ago

Pra conectar na testnet da binance, também alterei o endpoint usado pelo Websockex. No arquivo apps/streamer/lib/streamer/binance.ex:

- @stream_endpoint "wss://stream.binance.com:9443/ws/"
+ @stream_endpoint "wss://testnet.binance.vision/ws/"

Talvez isso deveria ser uma config de ambiente

E, seguindo a documentação do pacote binance, adicionei o end_point da testnet em config/config.exs:

config :binance,
  api_key: "<api_key>",
  secret_key: "<secret_key>",
+ end_point: "https://testnet.binance.vision"
image

Parece que tá tudo funcionando agora, só não sei se existe alguma interface da Binance pra confirmar que as orders estão lá mesmo

MatheusBuss commented 2 years ago

Até agora não consegui conectar na TestNet. Localmente funcionou bem, guardou os dados no SQL e tudo.

Mas eu quando altero os clientes de BinanceMock pra Binance ele retorna errors relacionados às funções fetch_symbol e fetch_symbol_filters. Parece que essas funções foram implementadas pro Mock mas estão faltando na biblioteca do wrapper da Binance mesmo.

@NeoVier não tivesse esse problema? Eu estou tentando rodar a branch do capítulo 21. Fiz essas alterações que comentasse e ainda alterei em config/config.exs, onde tinha BinanceMock alterei pra Binance.

henriquecbuss commented 2 years ago

O único erro que recebi foi do :crypto.hmac/3 que mencionei antes. Só clonei o repositório, fiz as alterações que mencionei (e mudar o BinanceMock pra Binance) e to rodando na master mesmo

MatheusBuss commented 2 years ago

Achei meu erro. Tinha trocado BinanceMock por Binance na config do Naive Trader. Agora não aparece o erro de falta de autorização que tinha antes.

Mas parece que o trader não está conectado com o teste da Binance. Peguei a chave de API por aqui. Conforme a documentação da Binance.

No terminal ele consta ter feito algumas orders, mas não apareceu no meu browser. Vou continuar dando uma investigada.

image

henriquecbuss commented 2 years ago

Acho que aí não vai aparecer pq é a interface de futures, enquanto o bot faz spot trading. Não sei se é isso mesmo, posso estar enganado 🤷. Não achei nenhum lugar da Binance onde eu poderia ver as orders do bot

MatheusBuss commented 2 years ago

Pelo jeito estavas certo sobre os futures e spots.

Mas não acho que sem mudar a config do trader de BinanceMock pra Binance vai ser feito trade na testnet. Digo isso porque tentei rodar com o BinanceMock sem chave de api e mesmo assim ele fez o trade.

E faz sentido então trocar de BinanceMock pra Binance ele acusar que não consegue autenticar as chaves, porque daí sim ele está tentado fazer trade na Binance.

No momento eu (acho que) consegui fazer ele autenticar o bot. Acredito que tem um problema com a importação das configurações do projeto geral pra dentro da biblioteca da Binance. Só colocando as chaves de api e end point na config do projeto geral tive um problema de autenticação, mas modificando a config dentro da biblioteca da Binance consegui um outro erro (:partying_face: :tada: ?). Isso pode ser porque a biblioteca da Binance usa usa um método deprecado (use Mix.Config) ao invés do atual (import Config). Portanto pode ser que tenha algum conflito aí que causa com que a config do projeto geral não seja importada pra dentro da biblioteca Binance.

MatheusBuss commented 2 years ago

Tive um problema com a sincronização do horário da minha máquina. Resolvido já.

Acho que agora está funcionando certinho. image