Reputation: 155
I am trying to make a simple Trading bot to trade on Binance.
When the bot trys to place an order it doesn't go through and I get the following error: "BinanceAPIException: APIError(code=-1121): Invalid symbol."
As far as I can tell I have the correct ticker for Ethereum and USDT. I have been trying to find an answer for hours, but can't find anything that helps.
Thanks for your help in advance,
Please see the code below.
import websocket, json, pprint, talib, numpy
import config
import smtplib, ssl
from binance.client import Client
from binance.enums import *
# pip uninstall numpy
#comparing chosen coin with tether
SOCKET = "wss://stream.binance.com:9443/ws/ethusdt@kline_1m"
#RSI candle period
RSI_PERIOD = 14
#Overbought indicator
RSI_OVERBOUGHT = 70
#Oversold indicator
RSI_OVERSOLD = 30
#Trade symbol
TRADE_SYMBOL = 'ETHUSD'
#Amount to buy
TRADE_QUANTITY = 0.00813
#Closes will be collected in a list
closes = []
#Don't own currency
in_position = False
#Client data
client = Client(config.API_KEY, config.API_SECRET, tld='us')
#Make an order
def order(side, quantity, symbol,order_type=ORDER_TYPE_MARKET):
try:
#Sending order to binance
print("Sending order....")
#order data
order = client.create_order(symbol=symbol, side=side, type=order_type, quantity=quantity)
#print order made
print("Order completed!!!!")
print(order)
#Failed payment
except Exception as e:
print("an exception has occured - {}".format(e))
return False
return True
#Connection opened
def on_open(ws):
print('Opened connection')
#Connection closed
def on_close(ws):
print('Closed connection')
#Message recieved
def on_message(ws, message):
global closes, in_position
print('Incoming Message')
json_message = json.loads(message)
#Print in readable format
pprint.pprint(json_message)
candle = json_message['k']
#Candle closed
is_candle_closed = candle['x']
close = candle['c']
if is_candle_closed:
#Print out candle closing data
print("Candle closed at {}".format(close))
closes.append(float(close))
print("Closes: ")
print(closes)
#if number of closes is greater than the RSI period
if len(closes) > RSI_PERIOD:
#Get array of 14 closes
np_closes = numpy.array(closes)
rsi = talib.RSI(np_closes, RSI_PERIOD)
print("RSI'S calculted so far: ")
print(rsi)
#Get the previous RSI DATA
last_rsi = rsi[-1]
print("The current RSI: {}".format(last_rsi))
#if the previous RSI is greater than the overbought limit
if last_rsi > RSI_OVERBOUGHT:
if in_position:
print("{TRADE_SYMBOL} is OVERBOUGHT, SELLING!!!!!!!")
# TRIGGER SELL ORDER
order_succeeded = order(SIDE_SELL, TRADE_QUANTITY, TRADE_SYMBOL)
#IF SUCCESFULL
if order_succeeded:
in_position = False
else:
print("NO {TRADE_SYMBOL} owned. DOING NOTHING!!!! ")
#if the previous RSI is LESS than the oversold limit
if last_rsi < RSI_OVERSOLD:
if in_position:
print("{TRADE_SYMBOL} is OVERSOLD, but you already own this curreny. DOING NOTHING!!!!!.")
else:
print("{TRADE_SYMBOL} is OVERSOLD, BUYING {TRADE_SYMBOL} !!!!!!!!!")
# buy logic
order_succeeded = order(SIDE_BUY, TRADE_QUANTITY, TRADE_SYMBOL)
#if buy successful
if order_succeeded:
in_position = True
#Web socket
ws = websocket.WebSocketApp(SOCKET, on_open=on_open, on_close=on_close, on_message=on_message)
#KEEP RUNNING
ws.run_forever()
Upvotes: 4
Views: 8710
Reputation: 1101
The error is on this line TRADE_SYMBOL = 'ETHUSD'
. You need to change it to ETHUSDT
Upvotes: 3