Here is a bot that worked on txbit.io if anyone is interested.
I repeat, the risks are great.
from secrets import APIKEY, SECRET
from txbit import Txbit
import time
import requests
# Создание экземпляра класса Txbit
txbit = Txbit(APIKEY, SECRET)
# Торговая пара P3D/USDT
market = 'P3D/USDT'
# Функция для отмены всех ордеров на паре 'P3D/USDT'
def отменить_все_ордера():
open_orders = txbit.getOpenOrders(market)
for order in open_orders.result:
order_id = order['OrderUuid']
cancel_order = txbit.cancel(order_id)
if cancel_order.success:
print(f'Ордер {order_id} успешно отменен.')
else:
print(f'Не удалось отменить ордер {order_id}.')
# Отменить все ордеры перед запуском бота
отменить_все_ордера()
# Максимальная цена покупки и минимальная цена продажи
max_buy_price = 0.00860000
min_sell_price = 0.01000000
# Основной цикл бота
while True:
try:
# Проверка баланса P3D
balance = txbit.getBalance('P3D')
p3d_balance = float(balance.result['Available'])
if p3d_balance >= 300:
# Цикл продажи
while True:
# Получение ордербука на продажу
sell_orderbook = txbit.getOrderBook(market, 'sell')
# Получение ордербука на покупку
buy_orderbook = txbit.getOrderBook(market, 'buy')
# Проверка наличия ордеров в ордербуке на продажу
if len(sell_orderbook.result) > 0:
# Получение лучшего ордера на продажу
best_sell_order = min(sell_orderbook.result, key=lambda x: x['Rate'])
best_sell_price = best_sell_order['Rate']
# Проверка наличия ордеров в ордербуке на покупку
if len(buy_orderbook.result) > 0:
# Получение лучшего ордера на покупку
best_buy_order = max(buy_orderbook.result, key=lambda x: x['Rate'])
best_buy_price = best_buy_order['Rate']
# Вычисление разницы в цене между продажей и покупкой в процентах
price_difference_percent2 = (best_sell_price - best_buy_price) / best_buy_price * 100
# Проверка разницы в цене
if price_difference_percent2 >= 3:
# Вывод разницы в цене между продажей и покупкой
print(f'Разница в цене между продажей и покупкой составляет {price_difference_percent2}%')
# Проверка минимальной цены продажи
if best_sell_price >= min_sell_price:
# Вычисление цены для нового ордера на продажу
sell_price = best_sell_price - 0.00000001
# Размер ордера на продажу
sell_quantity = txbit.getBalance('P3D').result['Available']
# Размещение ордера на продажу
sell_order = txbit.sellLimit(market, sell_quantity, sell_price)
print(f'Sell Order Placed for {sell_quantity} P3D at price {sell_price}')
# Ожидание 30 секунд
time.sleep(30)
# Отмена ордера на продажу
cancel_order = txbit.cancel(sell_order.result['uuid'])
print(f'Sell Order Cancelled: {cancel_order}')
# Проверка выполнения ордера на продажу
if cancel_order.success and cancel_order.result is not None and cancel_order.result['Quantity'] > 0:
# Обновление размера ордера на продажу
sell_quantity = float(cancel_order.result['Quantity'])
else:
print(f'Цена продажи {best_sell_price} ниже минимальной цены продажи {min_sell_price}')
# Ожидание 10 секунд
time.sleep(10)
else:
print('Ожидание разницы в цене...')
# Ожидание 10 секунд
time.sleep(10)
else:
print('Отсутствуют ордера на покупку')
else:
print('Отсутствуют ордера на продажу')
# Проверка баланса P3D
balance = txbit.getBalance('P3D')
p3d_balance = float(balance.result['Available'])
if p3d_balance == 0:
# Переход к циклу покупки
break
else:
# Цикл покупки
while True:
# Получение ордербука на покупку
buy_orderbook = txbit.getOrderBook(market, 'buy')
# Получение ордербука на продажу
sell_orderbook = txbit.getOrderBook(market, 'sell')
# Проверка наличия ордеров в ордербуке на покупку
if len(buy_orderbook.result) > 0:
# Получение лучшего ордера на покупку
best_buy_order = max(buy_orderbook.result, key=lambda x: x['Rate'])
best_buy_price = best_buy_order['Rate']
# Проверка наличия ордеров в ордербуке на продажу
if len(sell_orderbook.result) > 0:
# Получение лучшего ордера на продажу
best_sell_order = min(sell_orderbook.result, key=lambda x: x['Rate'])
best_sell_price = best_sell_order['Rate']
# Вычисление разницы в цене между покупкой и продажей в процентах
price_difference_percent1 = (best_sell_price - best_buy_price) / best_sell_price * 100
# Проверка разницы в цене
if price_difference_percent1 >= 3:
# Вывод разницы в цене между покупкой и продажей
print(f'Разница в цене между покупкой и продажей составляет {price_difference_percent1}%')
# Проверка максимальной цены покупки
if best_buy_price <= max_buy_price:
# Вычисление цены для нового ордера на покупку
buy_price = best_buy_price + 0.00000001
# Размер ордера на покупку
buy_quantity = 500
# Размещение ордера на покупку
buy_order = txbit.buyLimit(market, buy_quantity, buy_price)
print(f'Buy Order Placed for {buy_quantity} P3D at price {buy_price}')
# Ожидание 30 секунд
time.sleep(30)
# Отмена ордера на покупку
cancel_order = txbit.cancel(buy_order.result['uuid'])
print(f'Buy Order Cancelled: {cancel_order}')
# Проверка выполнения ордера на покупку
if cancel_order.success and cancel_order.result is not None and cancel_order.result['Quantity'] > 0:
# Обновление размера ордера на покупку
buy_quantity = 3 - float(cancel_order.result['Quantity'])
else:
print(f'Лучшая цена на покупку {best_buy_price} превышает максимальную цену покупки {max_buy_price}')
# Ожидание 10 секунд
time.sleep(10)
else:
print('Ожидание разницы в цене...')
# Ожидание 10 секунд
time.sleep(10)
else:
print('Отсутствуют ордера на продажу')
else:
print('Отсутствуют ордера на покупку')
# Проверка баланса P3D
balance = txbit.getBalance('P3D')
p3d_balance = float(balance.result['Available'])
if p3d_balance >= 300:
# Переход к циклу продажи
break
except requests.exceptions.RequestException:
# Обработка ошибки отсутствия интернет-соединения
print('Отсутствует интернет-соединение. Ожидание...')
time.sleep(10)
continue
except Exception as e:
# Обработка других исключений
print(f'Произошла ошибка: {str(e)}')
break