Binaryzando Todos os erros →

on_message() takes 2 positional arguments but 3 were given

Esse erro não é do seu código. É incompatibilidade de versão: o websocket-client mudou a assinatura das funções na versão 1.0, e a biblioteca da corretora foi escrita para a de antes.

TypeError: on_message() takes 2 positional arguments but 3 were given

O que mudou

Até a versão 0.x, os callbacks recebiam só a mensagem. Da 1.0 em diante passaram a receber também o próprio socket como primeiro argumento. Como a biblioteca da corretora declara as funções no formato antigo, o Python reclama de argumento a mais — e o erro aponta para o arquivo dela, o que faz muita gente procurar defeito no lugar errado.

Você normalmente cai nisso ao instalar as dependências sem fixar versão: o pip traz a mais recente, e a mais recente não serve.

Como resolver

Veja qual versão está instalada

pip show websocket-client

Instale a versão que a biblioteca espera

pip install websocket-client==0.59.0

Se o pip reclamar de conflito com outro pacote, é sinal de que você precisa do passo seguinte.

Use um ambiente isoládo — isto não é luxo

Travar uma versão antiga no Python do sistema inteiro quebra outros projetos seus mais tarde. Um ambiente por projeto resolve de vez:

python -m venv .venv

# Windows
.venv\Scripts\activate

# Linux / macOS
source .venv/bin/activate

pip install websocket-client==0.59.0

Anote as versões que funcionaram

Depois que rodar, congele. É o que impede o mesmo erro de voltar daqui a três meses numa máquina nova:

pip freeze > requirements.txt
Se o erro insiste depois de instalar a 0.59.0

Quase sempre é ambiente errado: você instalou num Python e está rodando noutro. Confirme com python -c "import websocket; print(websocket.__file__)" e veja se o caminho é mesmo o do ambiente ativo.

Antes de deixar o robó operar

Consertar o erro faz o robô rodar — não faz ele ganhar. O Binaryzando testa a sua estratégia no histórico real de velas antes de você arriscar dinheiro nela, e sela o resultado numa carta com código verificável — para o número não poder ser editado depois.

Testar minha estratégia