import tkinter as tk
from tkinter import ttk, messagebox
import requests
import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import ta
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier

# تابع برای دریافت قیمت لایو از Lbank
def get_live_price():
    url = "https://api.lbank.info/v1/ticker?symbol=shibusdt"
    response = requests.get(url)
    data = response.json()
    return float(data['data']['last'])

# تابع برای محاسبه سیگنال خرید و فروش
def calculate_signals(price_data):
    price_data['MA5'] = price_data['close'].rolling(window=5).mean()
    price_data['MA10'] = price_data['close'].rolling(window=10).mean()
    price_data['RSI'] = ta.momentum.RSIIndicator(price_data['close']).rsi()
    
    # سیگنال بهینه با استفاده از الگوریتم یادگیری ماشین
    features = price_data[['MA5', 'MA10', 'RSI']].iloc[10:].dropna()
    signals = []
    
    # آموزش مدل
    X = features.values
    y = [1 if price_data['close'].iloc[i+1] > price_data['close'].iloc[i] else 0 for i in range(len(features)-1)]

    # تقسیم داده‌ها
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # مدل درخت تصمیم
    model = DecisionTreeClassifier()
    model.fit(X_train, y_train)

    # پیش‌بینی
    latest_features = features.values[-1].reshape(1, -1)
    latest_signal = model.predict(latest_features)

    return latest_signal[0]

# تابع برای خرید یا فروش
def execute_trade():
    global balance_usdt, balance_shiba, trade_history, prices, price_data

    current_price = get_live_price()
    prices.append(current_price)

    new_row = pd.DataFrame({'close': [current_price]})
    price_data = pd.concat([price_data, new_row], ignore_index=True)

    if len(price_data) < 10:  # باید حداقل 10 دیتا داشته باشیم
        return

    latest_signal = calculate_signals(price_data)
    
    amount = 5  # مقدار که معامله می‌کنیم
    if latest_signal == 1 and balance_usdt >= amount:
        balance_usdt -= amount
        balance_shiba += amount / current_price
        trade_history.append((time.strftime("%Y-%m-%d %H:%M:%S"), 'buy', current_price, amount))
        alert_user("Buy signal executed!")
    elif latest_signal == 0 and balance_shiba >= amount / current_price:
        balance_shiba -= amount / current_price
        balance_usdt += amount
        trade_history.append((time.strftime("%Y-%m-%d %H:%M:%S"), 'sell', current_price, amount))
        alert_user("Sell signal executed!")

    update_display()
    update_graph()

def alert_user(message):
    messagebox.showinfo("Trade Alert", message)

def update_display():
    lbl_balance_usdt.config(text=f"موجودی USDT: {balance_usdt:.2f} $")
    lbl_balance_shiba.config(text=f"موجودی Shiba: {balance_shiba:.6f} SHIBA")
    
    for row in tree.get_children():
        tree.delete(row)

    for row in trade_history:
        tree.insert("", "end", values=row)

# ایجاد پنجره اصلی
root = tk.Tk()
root.title("ربات اسکالپینگ Shiba/USDT")
root.geometry("800x600")
root.configure(bg="black")

# متغیرها
balance_usdt = 5.0  # موجودی USDT
balance_shiba = 0.0  # موجودی Shiba
trade_history = []
prices = []
price_data = pd.DataFrame(columns=['close'])

# لایه برای اطلاعات مالی
frame = tk.Frame(root, bg='black')
frame.pack(pady=10)

lbl_balance_usdt = tk.Label(frame, text=f"موجودی USDT: {balance_usdt:.2f} $", bg='black', fg='gold')
lbl_balance_usdt.pack()

lbl_balance_shiba = tk.Label(frame, text=f"موجودی Shiba: {balance_shiba:.6f} SHIBA", bg='black', fg='gold')
lbl_balance_shiba.pack()

# جدول تاریخچه معاملات
columns = ('زمان', 'عملیات', 'قیمت', 'مقدار')
tree = ttk.Treeview(root, columns=columns, show='headings', height=10)
for col in columns:
    tree.heading(col, text=col)
tree.pack(pady=20)

# دکمه برای اجرای معامله
btn_trade = tk.Button(root, text="اجرا معامله", command=execute_trade, bg='gold', fg='black')
btn_trade.pack(pady=10)

# ایجاد گراف
fig, ax = plt.subplots(figsize=(6, 3), facecolor='black')
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.get_tk_widget().pack()

def update_graph():
    ax.clear()
    ax.plot(prices, color='gold', label='قیمت Shiba/USDT')
    ax.set_title('گراف قیمت Shiba/USDT')
    ax.set_xlabel('زمان')
    ax.set_ylabel('قیمت در USDT')
    ax.legend()
    canvas.draw()

# اجرای برنامه
root.mainloop()


به نظر میرسه در حال حاضر برنامه هیج عملیاتی انجام نمیده مطمئن شو این مشکل حل شه
در عین حال قیمت لحظه ای ارز شیبا به usdt رو درصرافی ال بنک به طور زنده نشون بده

وقتی بات شروع به کار میکنه مطمئن شو که لاک خرید و فروش و میزان سود و زیان ر و در بخشی ثبت کنه