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.
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
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