import tkinter as tk
from tkinter import messagebox
import ccxt
import logging

# Логирование
logging.basicConfig(filename='trading_bot.log', level=logging.INFO)

# Инициализация биржи (пример)
exchange = ccxt.binance({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET_KEY',
})

# Глобальные переменные для отслеживания сделок и прибыли
open_positions = []
session_profit = 0.0

# Получение цены
def get_current_price(symbol):
    try:
        ticker = exchange.fetch_ticker(symbol)
        return ticker['last']
    except Exception as e:
        logging.error("Ошибка при получении текущей цены: %s", e)
        return None

# Покупка
def buy(symbol, amount):
    global session_profit
    try:
        order = exchange.create_market_buy_order(symbol, amount)
        logging.info("Покупка: %s", order)
        open_positions.append(order)
    except Exception as e:
        logging.error("Ошибка покупки: %s", e)
        messagebox.showerror("Ошибка", f"Не удалось купить: {e}")

# Продажа
def sell(symbol, amount):
    global session_profit
    try:
        order = exchange.create_market_sell_order(symbol, amount)
        logging.info("Продажа: %s", order)
        
        # Рассчитываем прибыль от сделки
        if open_positions:
            last_buy_order = open_positions.pop()
            profit = (order['price'] - last_buy_order['price']) * amount
            session_profit += profit
        
    except Exception as e:
        logging.error("Ошибка продажи: %s", e)
        messagebox.showerror("Ошибка", f"Не удалось продать: {e}")

# Функция запуска операций
def execute_trade():
    global session_profit
    try:
        amount = float(entry_amount.get())
        dip_threshold = float(entry_dip.get()) / 100  # перевод в доли
        rise_threshold = float(entry_rise.get()) / 100  # перевод в доли
        
        current_price = get_current_price(symbol)
        if current_price is None:
            return
        label_price.config(text=f"Текущая цена: {current_price}")

        # Сохранение и инициализация метки предыдущей цены
        if not hasattr(execute_trade, "previous_price"):
            execute_trade.previous_price = current_price

        # Покупка при просадке
        if current_price <= execute_trade.previous_price * (1 - dip_threshold):
            buy(symbol, amount)
            execute_trade.previous_price = current_price

        # Продажа при росте
        elif current_price >= execute_trade.previous_price * (1 + rise_threshold):
            sell(symbol, amount)
            execute_trade.previous_price = current_price

        # Обновление информации о сделках
        label_positions.config(text=f"Открытых сделок: {len(open_positions)}")
        label_profit.config(text=f"Прибыль сессии: {session_profit:.2f}")

    except ValueError:
        messagebox.showerror("Ошибка", "Некорректный ввод. Убедитесь, что все значения заданы корректно.")

# Создание интерфейса
root = tk.Tk()
root.title("Bitcoin Trading Bot")

label_symbol = tk.Label(root, text='Символ:')
label_symbol.pack()
symbol = 'BTC/USDT'

label_amount = tk.Label(root, text='Количество:')
label_amount.pack()

entry_amount = tk.Entry(root)
entry_amount.pack()
entry_amount.insert(tk.END, '0.001')  # Значение по умолчанию

label_dip = tk.Label(root, text='Покупка при просадке (%):')
label_dip.pack()

entry_dip = tk.Entry(root)
entry_dip.pack()
entry_dip.insert(tk.END, '0.5')  # Значение по умолчанию

label_rise = tk.Label(root, text='Продажа при росте (%):')
label_rise.pack()

entry_rise = tk.Entry(root)
entry_rise.pack()
entry_rise.insert(tk.END, '1')  # Значение по умолчанию

button_trade = tk.Button(root, text="Торговать", command=execute_trade)
button_trade.pack()

label_price = tk.Label(root, text="Текущая цена: ")
label_price.pack()

label_positions = tk.Label(root, text="Открытых сделок: 0")
label_positions.pack()

label_profit = tk.Label(root, text="Прибыль сессии: 0.00")
label_profit.pack()

root.mainloop()  добавь в инструменты возможность менять торговую пару и какой единицей торговать.