Per realizzare questo programma ho utilizzato le librerie ccxt e time che ci permettono di eseguire operazioni "buy" e "sell" di criptovalute tra gli exchange Binance e Coinbase Pro.
Fondamentali le relative chiavi API altrimenti il programma non sarà in grado di collegarsi ai vari exchange per le operazioni.

"Balance" contiene le informazioni sulle crypto e sul saldo disponibile (in dollari) che il trader possiede in quel momento.
Il ciclo principale del codice si basa in un loop while che viene eseguito continuamente finché l'utente non interrompe il programma per garantire l'aggiornamento dei vari dati.
Ad ogni input viene:
- Aggiornato il saldo disponibile
- Chiesto all'utente di specificare se acquistare o vendere
- Chiesto di specificare quale crypto si vuole scambiare
- Chiesto le unità da scambiare.
Fatto questo il programma cerca di ottenere il prezzo di acquisto o vendita per la crypto specificata da Binance e Coinbase Pro.
Se i servizi non rispondono o succedono degli errori imprevisti il programma restituisce la cifra "persa".
Dopo aver ottenuto i prezzi il programma calcola il costo totale dell'operazione in base alla crypto specificata e al prezzo corrente dell'exchange con il prezzo più basso per poi aggiornare il saldo e per convenzione dopo un secondo ripetere il tutto.
Codice:
import ccxt
import time
binance = ccxt.binance({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_API_SECRET',
})
coinbase_pro = ccxt.coinbasepro({
'apiKey': 'YOUR_API_KEY',
'secret': 'YOUR_API_SECRET',
})
balance = {
'USD': 20000,
'BTC': 0,
'ETH': 0,
}
while True:
print("Available balance:", balance)
action = input("Enter 'buy' or 'sell': ")
selected_symbol = input("Enter cryptocurrency symbol (Es. BTC/USD): ")
units = float(input("Enter units to trade: "))
prices = {}
try:
binance_ticker = binance.fetch_ticker(selected_symbol)
prices['Binance'] = {'bid': binance_ticker['bid'], 'ask': binance_ticker['ask']}
except Exception as e:
print("Failed to fetch data from Binance:", str(e))
try:
coinbase_ticker = coinbase_pro.fetch_ticker(selected_symbol)
prices['Coinbase Pro'] = {'bid': coinbase_ticker['bid'], 'ask': coinbase_ticker['ask']}
except Exception as e:
print("Failed to fetch data from Coinbase Pro:", str(e))
if not prices:
continue
total_cost = units * prices[min(prices, key=lambda k: prices[k]['ask'])]['ask']
print("Total cost of trade:", total_cost)
if action.lower() == "buy":
exchange = min(prices, key=lambda k: prices[k]['ask'])
price = prices[exchange]['ask']
try:
order = eval(exchange.lower()).create_market_buy_order(selected_symbol, units)
print(f"Bought {units} units of {selected_symbol} at {price:.2f} {exchange}")
balance['USD'] -= total_cost
balance[selected_symbol.split('/')[0]] += units
except Exception as e:
print(f"Error executing trade: {str(e)}")
continue
elif action.lower() == "sell":
exchange = max(prices, key=lambda k: prices[k]['bid'])
price = prices[exchange]['bid']
try:
order = eval(exchange.lower()).create_market_sell_order(selected_symbol, units)
print(f"Sold {units} units of {selected_symbol} at {price:.2f} {exchange}")
balance['USD'] += total_cost
balance[selected_symbol.split('/')[0]] -= units
except Exception as e:
print(f"Error executing trade: {str(e)}")
continue
else:
print("Invalid action")
continue
print("Updated balance:", balance)
time.sleep(1)
Output:
