{"id":16979371,"url":"https://github.com/felipegtx/algodinha","last_synced_at":"2026-01-27T23:52:39.797Z","repository":{"id":73549206,"uuid":"114680160","full_name":"felipegtx/algodinha","owner":"felipegtx","description":":chart_with_upwards_trend: Algoritmo de negociação Bitcoin para Foxbit / Blinktrade","archived":false,"fork":false,"pushed_at":"2018-08-02T21:32:21.000Z","size":80,"stargazers_count":24,"open_issues_count":5,"forks_count":8,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-19T09:50:52.141Z","etag":null,"topics":["bitcoin","blinktrade","cryptocurrency","cryptocurrency-exchanges","cryptocurrency-trading-bot","foxbit","foxbit-api-client","nodejs","robotics","scalper","trade"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/felipegtx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-12-18T19:33:35.000Z","updated_at":"2020-02-13T13:19:29.000Z","dependencies_parsed_at":"2023-02-25T10:45:20.550Z","dependency_job_id":null,"html_url":"https://github.com/felipegtx/algodinha","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/felipegtx/algodinha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipegtx%2Falgodinha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipegtx%2Falgodinha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipegtx%2Falgodinha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipegtx%2Falgodinha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/felipegtx","download_url":"https://codeload.github.com/felipegtx/algodinha/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/felipegtx%2Falgodinha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28827978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-27T23:29:49.665Z","status":"ssl_error","status_checked_at":"2026-01-27T23:25:58.379Z","response_time":168,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","blinktrade","cryptocurrency","cryptocurrency-exchanges","cryptocurrency-trading-bot","foxbit","foxbit-api-client","nodejs","robotics","scalper","trade"],"created_at":"2024-10-14T01:45:37.599Z","updated_at":"2026-01-27T23:52:39.790Z","avatar_url":"https://github.com/felipegtx.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Algodinha\n\nAlgoritmo de negociação automatizada para Bitcoin - via Foxbit / [Blinktrade](https://github.com/blinktrade/BlinkTradeJS).\n\n:exclamation: **IMPORTANTE:**\n - A FoxBit não utiliza mais a plataforma Blinktrade portanto este projeto não será mais atualizado. Manterei o REPO ativo para pessoas que querem estudar a estrutura de um Robô de negociação e/ou a implementação da estratégia de Scalper implementada aqui.\n - Não me responsabilizo por qualquer tipo de dano e/ou prejuizo causado durante e/ou decorrente do uso desta ferramenta. \n - Lembre-se que [este repositório está disponível sob uma licença do tipo Apache 2.0](https://github.com/felipegtx/algodinha/blob/master/LICENSE).\n \n## Sobre\n\nO robô executa a estratégia [Scalper](https://www.daytraderpro.com.br/blog/o-que-e-scalping/), visando a execução de um grande volume de ordens de compra e venda com pequenos lucros entre si. A materialização desta estratégia depende basicamente da forma com que você parametrizará a execução do robô, principalmente no que tange o % de lucro esperado em cada operação e os valores das ordens em si. \n\n## Instalando\n\nBaixe o zip com o fonte ou realize o fork+clone deste Repo e, em seguida, baixe as dependêcias do projeto por meio do comando:\n\n```javascript\nnpm install\n```\n\n## Configurando\n\n### Segurança\nAntes de executar o robô você precisa gerar suas credenciais de acesso na plataforma FoxBit. Você pode realizar isso clicando [aqui](https://foxbit.exchange/#api). \n\nEstes dados devem ser salvos em um arquivo chamado `api.json` na raiz da biblioteca utilizando o seguinte formato:\n\n```javascript\n{ \n    \"user\": \"\",\n    \"password\": \"\",\n    \"secret\": \"\"\n}\n```\n\n### Email\nO robô está programado para enviar email - utilizando GMail - relatando o envio e execução de ordens. \n\nPara que esta infra funcione você precisa apenas criar um arquivo chamado `mail.json` na raiz da biblioteca utilizando o seguinte formato:\n\n```javascript\n{\n    \"email\" : \"seu endereço de email do Gmail\",\n    \"appPass\" : \"senha do gmail ou senha de app caso vc possua 2FA habilitado\",\n    \"destino\" : \"endereço de destino\"\n}\n```\n\n### Parametrização\nVocê deve também parametrizar a execução considerando os limites e riscos que você está disposto a correr com a ferramenta. Os principais parâmetros que coordenam a proporção risco/lucro são os seguintes:\n\n#### Limites de operação\nOs parâmetros abaixo limitam a operação do robô fazendo com que nada seja realizado se o mercado estiver acima do `valorMaximoCompra` ou abaixo do `valorMinimoCompra`.\n```javascript\n/// Valor máximo para compra de BTC\nvalorMaximoCompra : 70000,\n\n/// Valor mínimo para compra de BTC (base do túnel de negociação)\nvalorMinimoCompra : 30000,\n```\n\n#### Orçamento\nOs valores definidos nas variáveis abaixo ditam como o robô investirá o capital disponível - *if any*. \n\nO robô nunca gastará mais que o estipulado como o `maximoGastos` e gerará ordens de no máximo `valorMaximoOrdem` e, sempre que possível - veja detalhes abaixo - utilizará o `valorOrdem` para estas operações.\n\n##### Valor máximo da ordem\nEm uma situação onde for detectado que uma compra foi realizada em um valor superior ao disponível atualmente no mercado o valor da ordem poderá ser automaticamente ajustado utilizando o percentual de variação detectado: *Diferença % entre o valor mais alto pago pela fração da crypto e o valor atual da mesma.*\n\n```javascript\n/// Valor máximo que o robô está autorizado a gastar\nmaximoGastos : 2000,\n/// Valor das ordens de compra enviadas pelo robô\nvalorOrdem : 200,\n/// Valor máximo de cada ordem de compra. Se este valor for diferente do valor informado para \"valorORdem\", o rob^\n/// realizará um ajuste no valor pago, acrescentando o percentual de custo atual frente ao custo inicial por BTC até\n/// o limite de gastos definido aqui.\nvalorMaximoOrdem : 12,\n```\n\n### Outros dados operacionais\nO robô considera também as informações de quanto você possuía em fiat na corretora antes de iniciar a operação (`valorInicial`) para detectar possíveis prejuízos e ajustar a forma de operação e valores de ordens. \n```javascript\n/// Valor inicialmente depositado na corretora em fiat\nvalorInicial : 7000,\n```\n\nPara realização de atualização de valor médio o robô trabalha com um túnel dinâmico secundário que é ajustado baeado no `thresholdRecompraEmBRL`. Este túnel impede que sejam realizadas recompras se a flutuação do mercado não for considerada grande o suficiente - evitando operações sequenciais em valores muito próximos um ao outro. \n```javascript\n/// Threshold que define o momento de rebalanceamento do valor de saída\n///     - O robô faz uma média ponderada com os valores das compras e utiliza esta informação para \n///       decidir a melhor hora para sair\nthresholdRecompraEmBRL : 50,\n```\n\nQual o lucro total esperado após a execução do robô.\n```javascript\n/// Lucro % esperado\nlucroEsperado : 0.01,\n```\n\nNa versão atual você precisa informar a data da sua última venda para que o robô consiga coletar as informações de sua carteira ativa. Para tanto, basta acessar sua conta na corretora encontrar qual a data/horário em que isto aconteceu. \n\n\u003e Se for sua primeira operando em renda variável, você não deveria estar usando o robô. *#ficaDica*\n\nPor exemplo, no seguinte caso:\n\n![image](https://user-images.githubusercontent.com/1022404/34125435-5e516aa0-e41d-11e7-8ffc-3e4fc8e0a797.png)\n\nA data seria `12/18/2017, 10:22:02 AM`, adicionados `duas horas` do fuso horário.\n\n```javascript\n//// Data da última venda realizada na plataforma ou, qualquer data no futuro caso vc\n//// opte por iniciar vendido\ndataBase : \"2017-12-18 12:22:02\"\n```\n\nPara ignorar a carteira atual na corretora basta informar `true` como valor para `iniciaComprado`. \n\n```javascript\n/// Caso queira que o robô ignore o valor `dataBase` e inicie uma carteira nova, altere este valor para `true`\niniciaComprado: false\n```\n\nPara permitir a venda parcial de suas cryptos, altere o valor da variável `vendaParcial` para `true`.\n\n```javascript\n/// Caso queira que o robô ignore o valor `dataBase` e inicie uma carteira nova, altere este valor para `true`\nvendaParcial: false\n```\n\n## Executando\n\nPara executar, basta utilizar o seguinte comando:\n\n```\nnode algodinha.js\n```\n\n## Status de execução\n\nSe você quiser acompanhar o status do robô enquanto estiver longe do seu servidor/computador basta acessar o endereço: `http://ip_da_sua_maquina:1337/` (ou localmente em `http://localhost:1337/`).\n\n### Logs\nOs logs são salvos em disco no caminho `./log/algodinha.txt`. Recomendo o uso do [Baretail free](https://www.baremetalsoft.com/baretail/) para acompanhar - inclusive disponibilizei no projeto um arquivo de preferências `baretail.udm` com o highlight dos pricipais eventos do log.\n\n### Problemas conhecidos\nVeja a lista com as issues [aqui](https://github.com/felipegtx/algodinha/issues).\n\nOs principais problemas, IMHO são os seguintes: \n  - **Demora na inicialização:** Em alguns momentos o snapshot do book pode demorar muito para chegar. É uma característica da infra da Blinktrade. Se isso acontecer com você (observável pela demora em iniciar o robô), basta reiniciar o robô.\n  - **Reconexão:** O processo de reconexão ainda é bem arcaico. No estado atual, não recomendo que você deixe o robô executando sem supervisão.\n  \n## Contribuição\n\nContribuições em forma de Bitcoin e/ou PRs são muito bem vindas! Peço apenas que antes de trabalhar/enviar uma PR entre em contato comigo para alinharmos as expectativas e approach da implementação.\n\n**Gostou _MUITO_? Se quiser me fazer um agrado pagando um cafezinho, tá fácil:** \n - Carteira [SegWit](https://en.wikipedia.org/wiki/SegWit): `bc1qjfsqzmhu9na6ark3ldxxqfay8tjk72c67c9qhy`\n - Carteira BTC: `18BE5nYMmX91yu26Qh81UaNm7c89MmMj71`\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipegtx%2Falgodinha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffelipegtx%2Falgodinha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffelipegtx%2Falgodinha/lists"}