Olá tudo bem Aqui é o luí e o vídeo de hoje é um aulão onde eu vou te ensinar Como monitorar as moedas listadas na binance procurando aquelas que mais valorizaram ou mais desvalorizaram dentro de um período de tempo definido por você eu chamei isso de top gainers e top losers e você pode usar essa informação para realizar trades para montar dashboards para alimentar Outras aplicações e robôs ou até mesmo gerar sinais para grupos A decisão é a sua mas dependente da escolha eu tenho certeza que esse passo a passo que eu montei aqui esse
grande aulão vai te ajudar a entender melhor como programar esse tipo de integração com a Bas E é claro Você pode adaptar também para outras corretoras que também sejam abertas a esse tipo de integração Combinado então se você conhece o meu trabalho se você gosta da minha didática aqui no YouTube Eu já vou pedir o seu like de largada porque a aula vai ser ó intensa Beleza então vamos lá [Música] Qual que é a ideia da nossa solução tá nós temos basicamente três grandes missões para conseguir concluir ela né a gente quer chegar onde a
gente quer chegar num relatório atualizado atual de agora de quais são por exemplo as top cinco moedas que mais valorizaram na binance no último minuto por exemplo em um minuto as top C que mais cresceram Luiz eu não quero saber em 1 minuto Acho que mais interessante fazer saber em 15 em uma hora vocês vão ver que vai ter várias opções é só trocar os parâmetros vocês vão conseguir adaptar para outros cenários tá bom Luiz eu não quero na binance eu quero em outra corretora bom aí você vai ter que ver o que que a
gente utilizou para para este exemplo verificar se na sua corretora favorita tem essas mesmas ferramentas e aí você adapta o código pra realidade da outra corretora sendo que a parte de cálculos você vai conseguir aproveitar do jeito que tá realmente só adaptar a parte de retenção dos dados tá então a gente vai pegar aí os top cinco que mais valorizaram se quiser pegar mais do que cinco também é fácil de mudar o código e os top cinco que mais desvalorizaram que mais derreteram se você quiser também mudar a quantidade é bem tranquilo também tá então
esta é a ideia para chegar nesse objetivo nós vamos ter três missões a primeira missão é descobrir as moedas existentes a segunda missão é conseguir monitorar todas essas moedas ao mesmo tempo certo pra gente conseguir então ver dentre todas as que mais valorizaram e que mais desvalorizaram e por último fazer os cálculos para montar este ranking pra gente beleza show de bola Então vamos lá que que eu tenho aqui tô no visual Studio code ferramenta que eu utilizo aí para codificação de JavaScript e a minha missão agora é descobrir todas as moedas atualmente em negociação
na binance certo outras corretoras vão ter meios diferentes de você ter a acesso a essa informação de todas as moedas e também outras corretoras talvez não D essa informação você teria que cadastrar de repente manualmente em algum lugar ou no seu código todas as moedas o que não é muito legal né felizmente a binance nos fornece uma API para isso que a gente pode est consultando para obter facilmente essa informação de todas as moedas atualmente em negociação tá muito importante essa palavra né atualmente em negociação tá bom não é todas as moedas do mundo nem
todas as moedas que eles já tiveram é todas as moedas que estão negociação agora né que estão sendo compradas e vendidas pra gente criar o nosso projeto você vai abrir aí um terminal de linha de comando na sua máquina eu vou trabalhar aqui com terminal do vest code que você abre aqui terminal New terminal beleza e aí você vai navegar até alguma pasta da sua máquina para criar o projeto certo a pasta do projeto Então vou entrar aqui no desktop e dentro do desktop tá você pode salvar onde quiser T salvando desktop você vai rodar
um mkdir para criar a pasta do projeto tá então por exemplo eu posso criar aqui um ã binance top GL tá GL seria gainers e losers né os mais os ganhadores e os perdedores Tá bom mas pode ser qualquer nome aí que vocês quiserem vou entrar nessa pasta binance top GL pá e dentro dela eu vou inicializar um projeto node JS certo como é que eu faço isso com o node instalado na minha máquina eu tô aqui com a versão ó 20.9 tá mas vai funcionar com praticamente qualquer versão porque os códigos aqui são bem
tranquilos vou rodar o comando npm init Men Y que é para inicializar um projeto nessa pasta aqui então inicialize um projeto e agora eu vou instalar as dependências que nós vamos precisar para consumir uma pi Qualquer que seja você precisa de um cliente http n htp é o protocolo de comunicação na internet apis nada mais são né do que url de internet que você consome para Obter dados eu utilizo o cliente htp axios tá então eu posso instalar aqui ó npm install axos certo é o o cliente htp que eu costumo utilizar Então vou instalar
ele aqui beleza o axus instalado e agora eu posso estar abrindo o meu projeto vou aqui no desktop binance topg mandei abrir aqui na minha máquina certo então tô com o projeto aberto ele tem aqui os arquivos de configuração que é os package json package loock json e node modules que é a pasta onde ficam instaladas dependências vou criar um novo arquivo index.js e aqui dentro eu vou colocar então o script né ou os scripts que o nosso programa deve executar Então o que Eu mencionei é que eu quero acessar uma API da binance para
obter primeiramente as informações de todas as moedas porque se eu quero monitorar as moedas eu preciso primeiro saber quais elas são certo então a gente começa carregando o pacot do axius certo então tá carregando o pacote do axus e com esse pacote do axus a gente consegue fazer chamadas http Luiz como é que eu faço uma chamada htp com axus tá tem vídeo aqui no canal inclusive de introdução ao axus em que eu sou bem mais eh didático do que eu vou fazer aqui mas basicamente você chama axius ponto o verbo htp que você vai
utilizar que é o Get No caso passa o RL do que você quer consumir Qual a api que você quer consumir isso vai te retornar uma resposta certo a gente usa aqui para esperar o retorno né da resposta e aí essa resposta eu poderia fazer alguma coisa com ela por exemplo jogar no console Sei lá tá então basicamente o modos operand é esse para isso aqui funcionar Tá como eu tô usando ait aqui eu tenho que colocar isso dentro de uma função assíncrona tá essa é uma regrinha do JavaScript tem vídeo aqui no canal sobre
ass aight certo que é essa forma de escrever código assíncrono acho que acho que esse é o termo correto ess taxi sa de escrever código assíncrono então é async function vou chamar aqui minha função de start tem uma opção aí para dar o start no nosso script e aqui embaixo eu dou start de fato Beleza então nosso código vai ficar aqui dentro né aqui é só realmente o o belza b que que tenho que descobrir Agora eu tenho que descobrir qual é oendereço da pii que me traz todas as moedas em negociação na corretora se
eu for lá no Google e colocar binance rest api github eu acho facilmente aqui a documentação oficial das apis que a binance Me fornece e uma das apis que ela me fornece é justamente para pegar todas as informações da corretora neste momento incluindo as moedas negociadas então se eu procurar aqui por Exchange information né informações da corretora eu vou ver a api em questão ó esta aqui é a api que me traz todas as informações de moedas negociadas atualmente na corretora Inclusive eu posso testar isso no Browser porque no Browser a gente faz get né
get é pra gente pegar dados to vez que eu digito uma url no Browser do enter eu tô fazendo um http get Então qual que é a URL é https 2 p bar Barra api.binance.com barapi bar V3 bar Opa Exchange info repetir um pedaço aqui ó Então essa aqui ó é o resultado da api Exchange info que me traz todas as informações de negociação da corretora neste momento reparem como é um volume bem grande de dados mesmo tá então é isso aqui que a gente vai consumir primeiro então vou copiar essa URL aqui e vou
jogar aqui perfeito então o axus vai pegar esses dados aqui da mesma forma que eu fiz no Browser só que a gente vai fazer isso via código aí com a resposta que ele vai me trazer só me interessa os dados da resposta o data só isso que me interessa certo e aí eu recomendo que vocês já testem imediatamente imprimindo no console o data que são os dados da resposta aí você vai ver se você consegui fazer essa primeira etapa com sucesso aquiar os dados cruz depois fazer o tratamento deles então salvei para executar o projeto
node index ó Então tá aqui ó ele me imprime um pedaço do resultado da da api porque realmente é muito grande e no final ele coloca ó mais 200 2525 mais itens né então aqui ele trou só alguns dos itens Olha que interessante ó para cada par de moedas em negociação ele me retorna um objeto desses aqui ó com o símbol que é o par de moedas por exemplo enj negociado em eth o status tá em negociação neste momento o recurso base a moeda de cotação base precisão ã que mais tem um monte de de
informações aqui tá E tem alguns filtros que são regras de negociação Tem várias coisas bem bacanas que são importantes Inclusive tem um vídeo aqui no meu canal só sobre Exchange info que é essa api aqui quem quiser dominar ela Ela traz várias informações bem interessantes aí para aumentar a inteligência dos scripts e dos robôs de vocês tá bom mas o que me interessa aqui é a seguinte ideia eu não vou conseguir exibir ela desde o início então eu vou copiar esse aqui só PR a gente conseguir estudar esse resultado tá Exchange info. Jason Vocês não
precisam fazer isso tá é só pra gente juntos entender aquele retorno pra gente saber como que a gente vai utilizar ele mandando formatar aqui essa aqui é a api que a gente vai consumir ó retorna esses dados aqui tá retorna algumas informações de servidor de limites de uso e ela retorna uma propriedade symbols são os pares de moeda nessa propriedade simbols ela tem um Array com um objeto para cada par de moeda negociado certo ó tem várias informações para cada um dos pares de moeda Então o que a gente precisa fazer é na resposta que
a gente recebe da Exchange info a gente vai acessar a propriedade simbols e dentro de simbols nós vamos iterar né fazer um laço certo para pegar algumas informações desses objetos aqui beleza só tem um ponto importante S vou fazer primeiro com vocês mas eu vou citar um outro ponto importante na sequência então aqui em vez de data puro eu posso pegar data P simbols por exemplo e eu posso fazer um map né que é para percorrer todos os símbols E aí para cada sbol S eu posso estar pegando o sbol p o s p sbol
que a propriedade tem o nome do par de moedas certo então s p Symbol então se eu programei certo o que que eu tenho que ter agora quando eu rodar de novo eu tenho que ter só o nome das moedas na verdade dos pares de moeda né ó tá aqui então agora é uma rei de Strings com todos os pares de moedas só que repar um ponto importante ó eu tenho essas aqui que estão aparecendo mais 2525 é muito par de moeda tá é muito par de moeda de negociação a ponto de isso estourar o
limite de pares que eu posso monitorar ao mesmo tempo na binance bance tem uma limitação que tá documentada na documentação oficial das streams tá que é de 1024 streams monitoradas numa conexão de websocket então destas ã mais de 2600 não sei quanto tem aqui no total essas de cima mais 2525 eu posso monitorar até 100 24 através de uma conexão de websockets certo e isso não é exatamente um problema tá você pode de pensar Ah vou ter que deixar 15500 de Fora 1500 pares 1500 pares sim mas tratando de moedas são bem menas moedas do
que essas 2600 aqui tá são bem menos por quê cada moeda ela faz par com diversas outras moedas certo então acaba ficando uma informação bem redundante muitas vezes então você pega por por exemplo o Bitcoin né o Bitcoin faz par com SDT com o sd com BRL com sdc com BNB com eth uma infinidade de moedas né mas se você quer saber né se o Bitcoin é uma das moedas que mais cresceu ou mais perdeu o valor no último minuto na última hora enfim você não precisa consultar todos os pares do Bitcoin você pode pegar
por exemplo a cotação do Bitcoin dólar ou a cotação do Bitcoin real o que melhor lhe interessar Então o que eu vou propor aqui é ao invés da gente olhar todos os pares a gente olhar todas as moedas pareadas com uma moeda que para você faça sentido Como por exemplo o SDT ou BRL o sd enfim você vai escolher a moeda par tá dentre as moedas que mais fazem par nós temos o SDT certo porque se você pegar BRL por exemplo o real brasileiro Nem todas as criptomoedas fazem par com BRL tá agora o SDT
raramente alguma moeda não faz par com SDT então eu Luiz vou utilizar aqui no meu exemplo o SDT eu vou filtrar dentre todos os pares negociados que são mais de 2500 somente aqueles que fazem par com o SDT que aí eu vou remover qualquer tipo de repetição né de criptomoeda Então como é que eu pego a informação vou ter que filtrar esse cara aqui né hoje eu tô pegando todos os símbolos eu quero somente pegar aqueles que fazem par com SDT por exemplo esse primeiro aqui não faz ó ebtc mas se eu procurar aqui por
exemplo com ã fech finalizando com o SDT ó eu tenho abtc o SDT entre tantos outros como é que eu posso fazer o filtro todo par de moeda aqui na Exchange info ele tem uma propriedade que é o Coach asset ou ativo de cotação o ativo de cotação é o elemento à direita do par que no meu caso eu quero que seja o SDT certo então se eu filtrar por Coach asset igual ao SDT eu consigo fazer essa limpeza vamos dizer assim então vou voltar aqui no index eu vou filtrar fazer um Filter aqui antes
do Map certo todos os simbols S cujo s. Coach asset que é esta propriedade aqui seja igual a SDT E aí em cima de todas os pares filtrados eu vou pegar somente o nome do par né somente o o par de moeda beleza vamos até vou colocar isso aqui numa linha aa fica mais fácil de entender con simbols por exemplo E aí vou mandar imprimir os simbols vão ver que agora vai ficar muito mais limpo Então vamos novamente aqui no console node index Olha que interessante a gente caiu de 2500 e lá vai pedrada para
pouco mais de 400 itens então nós temos 400 e poucos moeda 400 e poucas moedas diferentes considerando aí que toda moeda faça par com SDT Eu acredito que sim tá Acho muito difícil que alguma moeda umaa criptomoeda não faça par com SDT então a gente pode assumir que praticamente Possivelmente a gente tem aqui a lista de todas as criptomoedas com né par de usdt E com isso se a gente criar um mecanismo de monitorar estes pares nós estaremos monitorando o preço em dólar né porque via de regra usdt é pareado com dólar de todas as
moedas listadas e com isso a gente pode ver quais que mais cresceram ou que mais diminuíram no último intervalo de tempo que eu vou trabalhar aqui com 1 Minuto Beleza então a gente já consegue reduzir bastante a gente tem uma limitação aí de no máximo 1024 pares sendo monitorados né simultaneamente eu tô aqui com 400 e pouco tá menos do que a metade do que o limite da binance me exige Beleza a gente tá aí com 501 né o pessoal contou ali 501 então aqui deve ter 100 né e maisos 401 Aqui de baixo tá
então menos da metade a gente tem um limite aí até 1024 que a gente pode monitorar Beleza então com isso a gente consegue finalizar a nossa primeira missão Nosa primeira missão era descobrir todos os pares que a gente tinha monitorar pegar as informações e tal temos isso já aqui agora a gente pode partir pra segunda missão a segunda missão é como que eu monitoro todos esses pares aqui certo como é que eu faço um código um script que fique de olho em todos esses pares aqui para que aí então depois eu possa fazer cálculos etc
qualquer outra coisa que eu imaginar com eles né qualquer outra coisa que eu me interessar em fazer pra gente monitorar pares de moedas nas corretoras geralmente o que se recomenda é que vocês utilizem Strings tá Strings são fluxos de dados que vocês podem se conectar com diferentes tecnologias como por exemplo websockets tem vídeo aqui no canal explicando o que que é websocket diferença de websocket stream api etc vocês encontram esses vídeos facilmente aqui no canal mas basicamente a gente vai criar um script que vai se conectar no servidor da binance e vai ficar aguardando nov
noes tá novidades de qualquer um dos mais de 500 pares que nós vamos monitorar E aí sempre que vier uma novidade a gente vai armazenar essa novidade depois fazer qualquer tipo de processamento que vocês quiserem certo e com isso gerar algum tipo de inteligência alum tipo de Resultado positivo pra gente se conectar no servidor da binance nas Strings da binance especificamente nós vamos precisar de um módulo cliente de websocket certo eu costumo utilizar o WS então eu vou instalar ele no meu projeto aqui o w é o o módulo o pacote de websocket mais popular
aí para node JS aliás eu tô fazendo isso aqui tudo com nodejs mas Vocês poderiam estar fazendo com react JS por exemplo até se quisessem montar uma Interface para exibir as informações eu vou exibir tudo no console mesmo tá mas é perfeitamente possível de fazer isso com frontend então eu vou pegar aqui e instalar npm instal WS Tá bom então você que vai instalar o pacote WS no meu projeto primeira coisa que a gente faz né a gente carrega o pacote Então vou carregar aqui const websocket recebe um require de WS certo então com ess
OBS aqui eu consigo criar novas conexões nos servidores da bimes E aí como que funciona pra gente criar uma conexão né a gente tem que pegar a URL do Servidor URL da stream que a gente a gente quer se conectar e com essa string a gente estabelece a conexão e passa a receber os dados que a gente processa Tá bom então basicamente é é esse o modos operante bom do ponto de vista de da conexão do websocket em si não é muito complicado tá como é que a gente faz a gente declara um WS uma
cons WS que é um um websocket conectado E a gente inicializa ele como sendo um New websocket esse New websocket aqui é o que eu importei aqui em cima inicializa ele como sendo um New websocket a gente passa o endereço da stram que a gente quer se conectar certo e aí depois a gente pode pegar o retorno disso tá tem dois retornos possíveis ou o o nosso objeto WS ele vai ficar recebendo mensagens e aí a gente vai tratar com este evento on message tá esse evento on message aqui recebe dados né que o servidor
enviar pra gente perfeito ou ele vai receber um erro que daí a gente trata com evento de erro certo que é este outro aqui tá então basicamente o que a gente tem que fazer é conecta no servidor E aí nós vamos receber mensagens ou receber erros basicamente é isso o que acontece tá bom em caso de erro eu não vou dar muita bola aqui eu vou simplesmente mandar jogar no console tá não vou fazer nenhum tipo de tratamento agora no caso de mensagens eu vou imprimir inicialmente mas depois é aqui aqui que a gente pode
fazer qualquer tipo de processamento que a gente quiser tá então vou pegar aqui mandar imprimir os dados da mensagem que a gente receber agora o ponto chave é a gente se conectar no na stream que a gente quer pegar a informação tá Se eu jogar no Google binance Strings github eu vou achar muito facilmente aqui a documentação oficial certo e daí aqui eu vou ver todo todas as streams que eu posso me conectar para receber dados da binance certo dependendo da stream que vocês conectarem a estratégia de processamento para encontrar as informações que vocês querem
Muda drasticamente então você tem que pensar muito bem que tipo de dado eu quero ter na minha aplicação eu preciso ter na minha aplicação para vasculhar as streams que melhor podem te atender se você quer o dado por exemplo de preço cru você pode est utilizando uma stram de ticker por exemplo se você quer um preço agregado 24 horas você tem stream de mini ticker que te traz isso também agora se você quer um preço agregado em intervalos menores do que 24 horas ou que não é só o instante exato agora ã ou você vai
pegando esses preços e vai agrupando da forma que você quiser ou você pode pegar essa informação a partir das velas tá por se eu vier aqui na stream decline eu vou ver que eu possuo velas com esses tempos gráficos certo então 1 segundo 1 Minuto 3 minutos 5 15 30 1 hora 2 4 6 8 12 um dia 3 dias uma semana e um mês então se a informação que eu quero é agregada dentro desses mesmos períodos cara eu quero por exemplo os top gainers e top losers de a cada um minuto né a cada
1 Minuto quem mais disparou quem mais caiu eu posso me aproveitar das velas de um minuto porque elas já fazem essa compilação da informação e com alguns cálculos simples eu consigo Então tirar o percentual de alteração e com isso montar os rankings etc certo então por isso eu acredito que o caminho mais rápido de você chegar na informação né numa informação agregada dentro esses intervalos é utilizando os dados das velas porque elas já fazem boa parte do trabalho de coleta e consolidação desses dados naquelas janelas de certo Então vou utilizar aqui com vocês velas como
que a gente se conecta numa string de vela tá não é difícil porque a documentação Ela é bem clara nesse ponto são duas dois pedaços de informação tá o primeiro pedaço tá aqui em cima no topo que é a URL você vai copiar a URL base aqui aqui é esta aqui até vou usar crase para poder combinar pedaços da stream pedaços da URL né Então essa é a base da URL aí você vai botar uma barra se você for se conectar for monitorar apenas uma coisa você usa WS bar nome da stream se você for
se conectar em várias Strings você usa barra stream dois pontos dois pontos não interrogação Strings igual e os nomes das Strings separados pro Barra certo então vai de como que você vai se conectar Tá eu vou me conectar em uma primeiro para vocês verem como é que funciona depois a gente faz o script que vai gerar completo todas as streams que a gente quer conectar Tá bom então vou utilizar aqui esse formato certo e aí eu tenho que passar os nomes das Strings aqui vou começar só com uma string num primeiro momento tá Qual é
o nome da string de velas que a gente quer se conectar o nome das stre de velas seg este formato aqui ó você coloca o par deeda @ under o intervalo gráfico que é um destes aqui perfeito vamos copiar esse cara aqui jogo aqui e aí onde Di sbol eu vou trocar pelo par de moeda que eu quero monitorar por exemplo btc SDT e onde diz interval eu vou trocar pelo intervalo que eu quero monitorar por exemplo um minuto tá então isto aqui vai conectar no servidor da binance para monitorar velas de 1 minuto de
BT vai escrever errado que né não existe essa variável aqui eu vou ter que jogar assim aqui dentro primeiro tá senão não vai funcionar então isso aqui vai conectar no servidor da binance para receber atualizações de velas o de um minuto de btc usdt perfeito então que eu vou fazer aqui vou só imprimir no console as informações das velas de btc usdt tempo gráfico de 1 minuto Então vou subir novamente Nossa aplicação para ver se tá funcionando imprimiu aqui as os pares de moeda não estamos usando para Nada no momento e notem que não está
vindo a informação onde que eu errei tá Este é um erro bem comum você não pode utilizar maiúsculas aqui tá tem que ser minúsculas perfeito isso tá lá na documentação eu sou um que sempre me esqueço tá tá algum canto aqui na documentação não lembro a onde agora mas eu sou um que sempre me esqueço que tem que ser em minúsculo aqui então vamos de novo ó agora sim reparem que ele imprimiu aqui embaixo pra gente ó e vai continuar imprimindo tá recebendo dados da binance e vai jogando aqui pra gente tá então nesses dados
aqui eu tenho as informações de velas de btc SDT intervalo gráfico de 1 minuto então aqui tá o dado cru né obviamente a gente vai tratar esse dado para pegar a informação que nos interessa se eu olhar aqui na documentação a informação que eu tô recebendo é esta aqui ó é esses dados que eu tô recebendo e aqui tá do lado a explicação de cada um dos dados perfeito inclusive quem não consegue entender essas documentações tem vídeo aqui no canal só sobre documentação de Strings tá bom só para ajudar vocês a entender essa documentação de
streams aqui tá E também tem vídeo ensinando a se conectar em streams e por vai de maneira muito mais didática do que eu tô trazendo agora que a gente tem um objetivo mais específico Beleza então eu tenho essas informações o que que eu posso fazer aqui para dar uma melhorada no que tá trazendo eu posso por exemplo converter isso aqui com Jon par um objeto vai ficar bem melhor da gente enxergar certo e eu posso também usar um console clear para limpar aqui o terminal vai ficar mais fácil da gente enxergar a informação chegando então
interessante a informação Vem vindo dentro dessa propriedade K eu tenho as informações da vela de fato e uma das das informações da vela que eu tenho é este C que é o Close o valor de fechamento né que geralmente quant a vela tá se formando é o valor atual da da moeda aquele par de moedas e quando a vela se fecha é o valor que ela fechou de fato no nosso caso aqui eu quero por exemplo pegar velas que se fecharam a cada um minuto tá o valor né os dados agregados da vela que se
fechou a cada 1 Minuto essa string ela me traz as informações atualizadas de dois Em 2 segundos Então ela me traz caso que a gente chama de vela parcial ou vela aberta mas pra gente fazer a consolidação eu quero pegar só as velas fechadas cer velas que concluíram o seu a sua agregação para eu saber se uma vela tá fechada ou aberta eu tenho que olhar essa propriedade x aqui ó o x vai vir pro padrão false quando a vela fechou no instante que ela fechou ele vai mandar o x como true E aí que
eu vou pegar a informação porque aí eu sei que fez a linha de corte e o valor o dado agregado ali tá dentro daquele sem mais nenhuma variação certo então eu posso olhar aqui c obj k para entrar aqui na propriedade da vela Ponto X para entrar aqui na propriedade que diz está fechado ou aberto Se isso tiver true aí eu vou jogar as informações na tela tá então se eu salvar agora aqui deixa derrubar Agora ele só vai me trazer a vela a cada um minuto na verdade eu vou est recebendo todas a cada
do segundos eu vou receber a parcial opa deu um erro aqui pera aí deu um erro que ele não conseguiu ler propriedade x de undefined Ah tem que entrar mais um date ainda isso é então tem que entrar num data depois no k depois no x Agora sim então a cada um minuto ele vai trazer a vela fechada Para pra gente aqui tá E aí com os dados da vela o que que eu tenho eu tenho o valor de abertura da vela certo vamos vamos pensar que é ã 20 horas da noite eu tenho o
valor que ela abriu que é o valor o open né o valor que ela abriu às 20 horas em ponto e eu vou ter no close o valor que ela fechou às 20:1 minuto na verdade 20:59 segundos né daí quando fechar 1 minuto já é a outra vela então se eu pegar com o Close e o open eu faço uma regra de três eu consigo saber o percentual né de variação entre a abertura e o fechamento isso vai me dizer o quanto variou aquela moeda né dentro daquele período né o período no caso de 1
minuto tá da abertura e o fechamento você pode fazer isso também daqui a pouco se você quiser calcular as sombras né você pega lá o low e o High né E você consegue calcular o valor percentual da sombra por exemplo daqui a pouco pode ser interessante paraas suas estratégias ou da abertura em relação ao topo aí você pode jogar com as informações que você tem conforme aí o que mais lhe interessar Beleza o que mais for pertinente pro seu algoritmo mas já tá trazendo aqui a cada um minuto velinha fechada pra gente né com as
informações aí que a gente vai utilizar Então se tá funcionando para uma stream vai funcionar para várias Strings desde que eu respeite ali a sintaxe da URL então RL eu tenho que colocar aqui barra e o nome da out string certo eu quero fazer isso PR as 50501 pares de moedas com SDT que eu tenho aqui em cima Então vou montar a string e eu coloco ela ali vai est monitorando todo mundo beleza que que eu vou ter que fazer eu vou ter que pegar esses símbolos aqui que é só os pares de moedas certo
e eu V ter que transformar eles numa string de Strings certo então a gente vai ter aqui um const Strings que vai ser um map até poderia botar o map lá em cima mas ia ficar meio grande demais na minha opinião tá então vou pegar aqui o simbols vou fazer um map para cada Simbol E aí com cada sbol eu vou montar uma string então tô usando Cras aqui template string tá vou montar uma string com o s que é o sbol @ o intervalo 1 m só tem um ponto importante né que eu tenho
que esse S aqui que é o par de moedas ele tem que tá em minúsculo que vocês viram lá que dá erro né Se eu tentar botar maiúsculo aqui então eu já vou no meu map eu já vou dar um to lower case para passar pr pra minúscula sempre então aqui vai ser um Array de símbolos em minúscula aqui eu monto o nome das Strings certo e para juntar tudo numa única string eu faço um join onde os o elemento de junção das minhas Strings é barra porque é isso que diz a minha documentação que
eu tenho que utilizar então esses Strings aqui ó vou jogar no console pra gente ver o resultado primeiro ver se funcionou ó tá aqui ó reparem que que que ele tem uma string gigantesca com o nome de cada string separado por barra que eu quero monitorar certo então tá tudo aqui então essa tripa enorme aqui de dados que eu vou jogar aqui na minha URL perfeito então quando eu subir agora a aplicação o que que ele vai fazer ele vai se conectar no servidor da binance para monitorar não uma stream não um par de moedas
mas como 501 pares de moedas na data que eu tô gravando essa lição aqui talvez no futuro sejam mais sejam menos mas é todos que fazem par com o SDT que é a moeda que eu coloquei aqui como referência perfeito e aí este evento message ele vai disparar toda vez que a binance tiver uma atualização sobre qualquer um dess desses pares que a gente tá monitorando tá na prática no console h vai ser tudo muito rápido a gente não consegue ter certeza do que que aparece ali porque vai ser muita informação chegando a gente vai
acabar vendo só a última que tiver printada na tela tá mas você consegue a gente vai V isso no código quando for evoluir ele na sequência que de fato tá chegando os dados aí de todas as moedas Tá então vamos salvar aqui e vamos subir novamente o primeiro ele printou a string com todas Strings n a string com todas Strings e daqui a pouco quando fechar um minuto ele vai printar pra gente vai receber as informações da dos pares de moedas que fecharam a vela e vai trazer pra gente aqui foi tá então nota fica
meio cavalada vamos chamar assim n fica uma por cima da outra porque chega tudo junto tá mas tá aqui ele recebeu realmente todas as as streams só a última que a gente consegue ver inteira Mas recebeu de todas Tá bom então eu tenho agora um mecanismo que monitora mais de 500 pode monitorar até 1024 né Se existisse essa necessidade pares de moedas ao mesmo tempo que que eu tenho que fazer agora eu tenho que começar a organizar esse dado que tá chegando certo por porque tá chegando de qualquer jeito tá S jogando no console eu
tenho que começar a organizar isso em memória Tenho que começar a criar estruturas de dados que me permitam não apenas armazenar essas informações Como processar elas de maneira inteligente certo então que eu vou fazer aqui ó eu vou aqui no topo antes do start tá eu vou primeiro declarar um arr symbols certo que que esse arre symbols vai ter ele vai ter todos os pares que nós estamos monitorando Isso vai ser importante no segundo momento pra gente poder fazer a lógica de percorrer todos eles fazer os cálculos etc tá então primeiro pra gente guardar aí
todos os pares que nós estamos monitorando essa informação eu tava com ela dentro do start aqui vou começar a obter ela né ainda obtenho dentro do start mas V começar armazenar ela fora que a gente vai precisar aí em outros momentos tá então primeiro só o par de moedas segundo ponto tá segunda informação que eu vou precisar tá armazenando o percentual de alteração de cada moeda perfeito eu vou ter que ir guardando isso eu tenho que guardar tenho que calcular de todas as moedas guardar de todas elas para que eu consiga fazer o ranking das
que mais subiram das que mais caíram então para isso eu vou declarar uma outra estrutura que é o Changes que vai ser um objeto para quem não sabe em JavaScript objetos eles têm as propriedades deles funcionando como se fossem índices como se fossse não é literalmente índices então eu consigo por exemplo criar um objeto chamado Changes e utilizar como propriedades ã o par de moeda por exemplo então eu consigo ter uma propriedade que obc o SDT a outra que é o eth o SDT e qual que é o benefício disso Luiz Qual que é o
benefício de eu trabalhar com um objeto e não com o arrei o benefício é o acesso muito rápido a uma informação no arrei se eu sei a posição eu acesso rápido mas eu não sei a posição se eu quero usar algum tipo de filtro eu tenho que ficar percorrendo todo ele isso tem uma eficiência muito baixa tá então esse Changes aqui eu vou guardar as alterações de percentuais de moedas nele e eu vou conseguir acessar rapidamente baseado no nome da moeda e saber qual é o percentual de alteração dela tá vai ficar mais claro os
benef conforme a gente avançar aqui no algoritmo então no primeiro momento realmente você tem que confiar em mim que esse é o jeito mais eficiente de ser feito Tá bom então o que que eu tenho que fazer agora eu tenho que em símbolos já tenho os símbolos das moedas Eu Tenho que guardar em Changes o percentual de alteração de cada uma delas no período perfeito Então vamos ter que pegar essa informação aqui dentro do on message e guardando ali então fechou a vela o que que eu preciso pegar de informação eu preciso pris pegar por
exemplo o valor de abertura o open Price como é que eu pego o valor de abertura parce float porque eu preciso dele numérico porque eu vou fazer comparações Matemáticas e cálculos matemáticos também eu pego ele com o obj pon data que é os dados ponto k que é a vela ponto e aí eu vou lá na documentação e vejo que o valor de abertura o preço de abertura é o o minúsculo entãoo Open PR se eu quero ver a diferença entre o open Close eu precisar o Close também const Close Price recebe um par flj
o Close é o c minúsculo então eu tenho Open eu tenho Close tenho agora di perual ele vai ser o Close Price ve 100 dividido pelo Open Price Men 100 então is aqui vai me dar a variação percentual positiva ou negativa deste ativo certo Lembrando que vou receber de todos os ativos cada recebimento vai disparar uma vez essa função dentro do período de 1 minuto que é o que eu t utilizando aqui nas minhas velas variação então percentual de 1 minuto do ativo e aí eu vou salvar essa informação eu vou lá em Changes na
posição daí eu vou ter que botar o par da moeda como chave né obj na propriedade obj pon datata ponto eu quero sbol sbol tá na propriedade S aqui ó então S eu vou guardar o Change perfeito vou guardar o Change E aí eu vou só jogar no console não vou mais jogar essa informação inteira que eu pegava aqui que ela não é muito útil pra gente agora vou jogar no console só né a informação do símbol que eu acabei de receber então obj pdata PS e a informação da alteração percentual no período que tá
dentro de Changes na chave obj pdata PS só pra gente ver no console se tá vindo se a gente tá conseguindo calcular né as as informações perfeito Então qual que é o esperado agora vai subir a aplicação Vou descobrir todas as moedas vou montar toda a string da stream vou me conectar na stream qual queela URL e para cada dado que vai chegar quando fechar um minuto né vai chegar os dados de todas as velas para cada um uma das velas que chegar eu vou pegar os preços calcular o percentual guardar na estrutura de dados
e imprimir no console daí vai faltar realmente só fazer o ranking vamos salvar pode demorar aí até 1 minuto né receber as velas daí quando chegar as velas a gente vai ter um monte de console log ali trazendo os pares de moeda e variação percentual no último minuto aí então o que que nós temos aqui mbox o SDT no último minuto variou 0.09 positivo enquanto o GMT o SDT variou no último minuto 0.04 negativo esses zerados não quer dizer que não variou nada quer dizer por exemplo que é tão pequena a variação que daí nem
teve precisão suficiente tá embora pode acontecer também de não ter variado nada né o open e o Close ter sido igual por algum motivo Tá mas notem como a gente tem moedas como combo SDT Caiu 1.42 só no último minuto né E a gente vai encontrar também moedas que valorizaram como MTL SDT que valorizou 1.42 por só no último minuto Então você consegue ver inclusive algumas flutuações né Tira dinheiro de um lado da dinheiro pro outro você consegue perceber esse tipo de movimentação tá então você consegue ver aí várias e várias informações que podem ser
interessantes aí pros ã scripts e robôs de vocês beleza para algumas moedas 1 Minuto pode ser pouco também né moedas que não são tão ã líquidas né não tem tanta liquidez pode também não ter muita variação no minuto Daí pode ser interessante olhar em outros situações né em outros intervalos tá bom que que nós tem que fazer aqui agora nós já temos né Já estamos com todos os dados sendo armazenados em memória aqui no Chang se eu quero pegar um ranking se eu quero pegar um top certo eu posso fazer o quê eu posso percorrer
todos os Changes certo e aí com todos os Changes percorridos descobri qual que mais cresceu ou qual que mais diminuiu de valor de mercado perfeito agora se eu ficar percorrendo todos os changes para cada par de moedas vai demorar muito tempo vai ser um script ineficiente né vai funcionar vai mas eu guardei os Changes justamente em formato de objeto pra gente ter algumas estratégias diferentes para acessar essas informações então o que que eu vou fazer aqui com vocês a cada x tempo a gente vai dar uma olhada nas informações estão estocadas em memória e aí
a gente faz o ranking atualizado tá então eu vou criar aqui um intervalo de tempo um set interval né um timer onde de tempos em tempos eu vou dar uma olhadinha na memória como é que tá não vou fazer toda vez que chega as velas Tá eu vou dar uma olhadinha na memória como é que tá porque se eu fizesse quando chega a vela né eu teria um problema porque ele repetiria isso 500 vezes né então vou botar um intervalo em paralelo E aí por exemplo a cada sei lá 30 segundos é 30.000 aqui né
que é milisegundos eu vou dar uma olhada na memória ver como é que tá e vou imprimir pra gente o o nosso ranking beleza V começar então limpando aqui o console e aí o que eu vou fazer Primeira coisa eu quero pegar todas as alterações percentuais e fazer um ranking decrescente um ranking decrescente vai me trazer Primeiro as que mais valorizaram e aí depois eu quero fazer um um ranking crescente Porque aí se eu pegar o primeiro né os primeiros vai pegar quem mais desvalorizou quem tá menor né mais negativo certo para eu poder fazer
essas Ordenações crescentes e decrescentes eu tenho uma função JavaScript chamada sorte só que ela só funciona com arrei certo então como eu tô armazenando em objeto eu vou ter que transformar esse objeto para Rei para poder utilizar o sorte tá Ah mas Luiz por que que eu utilizei um objeto então se eu vou ter que transformar ele para Rei depois é porque paraa escrita das informações aqui o fato dele ser um objeto me permite salvar no lugar certo a informação muito rapidamente e aqui a demanda é realmente muito mais pesada porque eu sou bombardeado com
500 velas ali ao mesmo tempo quando fecha um minuto tá mas aqui para fazer o ranking eu preciso transformar aquele objeto num arrei é bem simples de fazer isso tá eu vou ter aqui um Change Array E aí eu vou fazer um Object P case de Chang isso aí vai pegar todas as as propriedades que estão armazenadas aqui em Changes certo e aí em cima dessas Chaves né Essas propriedades esses índices eu posso fazer né eu pego o k que é a minha chave e aí eu posso retornar um novo objeto só com o que
me interessa que é o nome do par e a alteração percentual que é o Changes na posição k Então essa é a vantagem de trabalhar com objeto tá eu consigo acessar ele numa posição específica tendo aí o a o nome daquela posição né o índice daquela posição e ele não é numérico né Ele é textual diferente do Array Então dessa forma aqui eu consigo montar um Array com objetos contendo símbol e alteração peral daquele símbol E aí com este arrei eu consigo facilmente utilizar a função sorte do JavaScript para ordenar crescente ou ordenar decrescente E
com isso meu ranking tá pronto certo então é bem fá a partir de agora então vou pegar aqui os top gainers que mais valorizou para pegar eles é só fazer um Change Array p s que é para ordenar e aí eu defino a função de ordenação toda função de ordenação tem dois parâmetros A e B E aí se você quer que seja decrescente você vai fazer B menos a é decrescente se você quisesse crescente seria o contrário certo Isso aqui vai ordenar de maneira decrescente todos os meus 501 pares de moeda que eu tenho salvo
ou que eu espero ter salvo né e por fim se eu quiser top C eu faço um Slice de zero a c tá que daí ele vai pegar uma fatia só do Array e guardar aqui no top gainers E aí eu posso imprimir no console top gainers certo e daí eu faço um map por exemplo top gainers pon map para cada TG eu mando imprimir no console um TG p sbol e um TG P Change eu posso botar uma formatação nele também né posso usar aqui fixed que daí eu digo que eu quero sempre duas
casas decimais por exemplo n posso ainda colocar mais formatação eu posso botar aqui um um template string ao redor E aí com template string eu posso colocar um percento né um percentual aqui no final e eu posso também ah fazer um um botar um mais aqui no início né porque aqui são os positivos top gers é os os positivos né então eu boto um mais no início um percentual no final vai ficar bem bacana ali no no terminal e para fazer os top losers é a mesma coisa só que ao contrário Então vou copiar esse
bloco aqui top losers aí o top losers vem para cá também que é top losers eu vou ordenar daí crescente crescente é só fazer o a menos o b pega os cinco né que tiverem mais ao topo E aí aqui o sinal vai ser negativo não preciso colocar porque já vem o sinal negativo no próprio número né e o percentual eu mantenho aqui no final então o que que vai acontecer agora quando eu executar né espero que a gente tenha daí concluído O Desafio né o exercício ele vai primeiro se conectar nas Strings vai imprimir
no console né que ele recebeu as velas e aí em algum momento né ele vai pegar essas informações na memória e vai imprimir no console os top gainers e os top losers Vou colocar até um contra barra n aqui para ele quebrar uma linha a mais para ficar menos menos grudado tá contra barra n é quebra de linha Então é isso que vai acontecer então vamos executar novamente quando fechar o minuto ele vai nos jogar aqui as informações que ele conseguiu calcular Em algum momento ele nos Joga aí os top gainers e top losers aí
ó informações que ele calculou e agora top gainers e top losers ó que interessante moeda que mais valorizou no último minuto foi chrt valorizou 0.89 e a moeda que mais perdeu o valor né foi o BB usdt perdeu 0.36 por. neste último minuto e aí ele vai manter atualizando vai daqui a pouco receber as velas de novo vai imprimir depois vai calcular de novo top gainers e top losers só esperar ele mostrar mais uma vez aqui para mostrar que tá recorrente mesmo ó Peg recebeu vela de novo e aí calculou de novo ó então BTT
bttc usdt no último minuto foi que mais valorizou Subiu aí 0.25% de valor enquanto que a que mais Caiu foi pi vx usdt caiu 0.33% no último minuto Lembrando que vocês podem alterar né se não quer top 5 quer top 10 ou eu não quero no último minuto qu nos últimos 15 minutos daí você Altera a vela por exemplo né tudo isso é fácil de vocês alterarem no código beleza E aí conseguiu sobreviver até o final do aulão eu vou pedir que você deixe aqui embaixo o seu comentário para eu saber quem conseguiu chegar até
o final porque realmente é uma aula bem densa bem profunda com bastante camadas e etapas e são pouquíssimo as pessoas se conseguem Então comente aqui embaixo 1% para eu saber que você faz parte daquele 1% que consegue digerir conteúdos tão completos assim agora se você gostou do vídeo eu vou pedir aí o seu like Retribuição a meu trabalho aqui na plataforma e recomendar que você se inscreva porque saem vídeos como esse semanalmente por aqui Combinado então um abraço e até o próximo valeu