A arbitragem triangular envolve a exploração das discrepâncias nas taxas de câmbio entre três criptomoedas em uma mesma exchange. Os traders realizam uma série de transações para aproveitar as diferenças de preços entre os pares de criptomoedas, buscando lucrar com a arbitragem.
Exemplo de arbitragem triangular:
O trader possui Bitcoin (BTC), Ethereum (ETH) e Litecoin (LTC).
O preço do BTC/ETH é 50 ETH por BTC.
O preço do ETH/LTC é 100 LTC por ETH.
O preço do LTC/BTC é 0,005 BTC por LTC.
O trader realiza uma série de transações: compra BTC com ETH, compra LTC com BTC e, finalmente, vende LTC por ETH.
O trader lucra com a diferença entre as taxas de câmbio dos três pares.
Abaixo está um exemplo simplificado do código.
import ccxt # biblioteca para interagir com exchanges# Inicializando o exchange (binance, por exemplo)exchange = ccxt.binance({'apiKey': 'YOUR_API_KEY','secret': 'YOUR_SECRET',})defget_rate(symbol):"""Obtém a última taxa de câmbio para um par de criptomoedas""" orderbook = exchange.fetch_order_book(symbol)return orderbook['bids'][0][0] iflen(orderbook['bids'])>0elseNonedefexecute_trade(amount,from_symbol,to_symbol):"""Executa uma negociação em um exchange""" symbol = from_symbol +'/'+ to_symbol rate =get_rate(symbol)if rate isNone:return0print(f"Trading {amount}{from_symbol} to {to_symbol} at rate {rate}")return amount / rate # Retorna a quantidade de 'to_symbol' que obtemos# Arbitragem triangulardeftriangular_arbitrage(start_currency='BTC'):"""Executa arbitragem triangular começando e terminando com start_currency""" currencies = ['BTC','ETH','XRP'] start_index = currencies.index(start_currency) currencies = currencies[start_index:]+ currencies[:start_index]# Começa com a moeda inicial amount =1.0# Quantidade de moeda que estamos negociandofor i inrange(len(currencies) -1): amount =execute_trade(amount, currencies[i], currencies[i+1])# Trocar a última moeda de volta para a moeda inicial amount =execute_trade(amount, currencies[-1], currencies[0])if amount >1.0:print(f"Arbitragem triangular foi bem sucedida, lucro {amount - 1.0} {start_currency}")else:print(f"Arbitragem triangular não foi bem sucedida, perda {1.0 - amount} {start_currency}")# Execute o códigotriangular_arbitrage('BTC')