Misafir adlı üyeden alıntı: mesajı görüntüle
Birşeyler deniyorum
Claude free

import tkinter as tk
from tkinter import messagebox, scrolledtext
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from datetime import datetime
import time
import threading
import os
import signal
import sys

class BinanceGridBotApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Binance Futures Grid Bot Otomasyonu")
        self.root.geometry("600x500")
        self.root.resizable(True, True)
        
        self.is_running = False
        self.emergency_stop = False
        self.driver = None
        self.thread = None
        
        # GUI Bileşenleri
        self.create_widgets()
        
        # Acil durdurma için olay
        self.stop_event = threading.Event()
        
        # Uygulama kapatıldığında temizlik yapmak için
        self.root.protocol("WM_DELETE_WINDOW", self.on_closing)
        
    def create_widgets(self):
        # Kontrol butonları
        control_frame = tk.Frame(self.root)
        control_frame.pack(pady=10, fill=tk.X)
        
        self.start_button = tk.Button(control_frame, text="Başlat", command=self.start_bot,
                                      bg="green", fg="white", width=15, height=2)
        self.start_button.pack(side=tk.LEFT, padx=10)
        
        self.stop_button = tk.Button(control_frame, text="DURDUR", command=self.emergency_stop_bot,
                                     bg="red", fg="white", width=15, height=2, state=tk.DISABLED)
        self.stop_button.pack(side=tk.LEFT, padx=10)
        
        # Log alanı
        log_frame = tk.Frame(self.root)
        log_frame.pack(pady=10, fill=tk.BOTH, expand=True)
        
        log_label = tk.Label(log_frame, text="İşlem Günlüğü:")
        log_label.pack(anchor=tk.W)
        
        self.log_area = scrolledtext.ScrolledText(log_frame, width=70, height=20)
        self.log_area.pack(fill=tk.BOTH, expand=True, padx=10)
        
        # Durum çubuğu
        self.status_var = tk.StringVar()
        self.status_var.set("Durum: Hazır")
        status_bar = tk.Label(self.root, textvariable=self.status_var, bd=1, relief=tk.SUNKEN, anchor=tk.W)
        status_bar.pack(side=tk.BOTTOM, fill=tk.X)
        
    def log(self, message):
        timestamp = datetime.now().strftime("%H:%M:%S.%f")[:-3] # Milisaniye hassasiyeti
        log_message = f"[{timestamp}] {message}"
        self.root.after(0, lambda: self.log_area.insert(tk.END, log_message + "\n"))
        self.root.after(0, lambda: self.log_area.see(tk.END))
        print(log_message)
    
    def update_status(self, message):
        self.root.after(0, lambda: self.status_var.set(f"Durum: {message}"))
        
    def start_bot(self):
        if self.is_running:
            return
            
        self.is_running = True
        self.emergency_stop = False
        self.stop_event.clear()
        
        self.start_button.config(state=tk.DISABLED)
        self.stop_button.config(state=tk.NORMAL)
        
        self.log("Bot başlatılıyor...")
        self.update_status("Çalışıyor")
        
        # Bot işlemini ayrı bir thread'de başlat
        self.thread = threading.Thread(target=self.run_bot)
        self.thread.daemon = True
        self.thread.start()
    
    def stop_bot(self):
        if not self.is_running:
            return
            
        self.is_running = False
        self.stop_event.set()
        self.log("Bot durduruluyor...")
        self.update_status("Durduruluyor")
        
        # Tarayıcıyı kapat
        if self.driver:
            try:
                self.log("Tarayıcı kapatılıyor...")
                self.driver.quit()
                self.driver = None
                self.log("Tarayıcı kapatıldı.")
            except Exception as e:
                self.log(f"Tarayıcı kapatılırken hata: {str(e)}")
        
        self.start_button.config(state=tk.NORMAL)
        self.stop_button.config(state=tk.DISABLED)
        self.update_status("Durduruldu")
    
    def emergency_stop_bot(self):
        """Acil durdurma: Milisaniye hassasiyetinde durması için optimize edilmiş"""
        self.log("ACİL DURDURMA İSTEĞİ ALINDI!")
        self.emergency_stop = True
        self.stop_event.set()
        self.is_running = False
        
        # Tarayıcıyı hemen sonlandır
        if self.driver:
            try:
                # Tarayıcı sürecini doğrudan sonlandır
                self.log("Tarayıcı süreci anında sonlandırılıyor...")
                if hasattr(self.driver, 'service') and hasattr(self.driver.service, 'process'):
                    if self.driver.service.process:
                        pid = self.driver.service.process.pid
                        try:
                            if sys.platform == 'win32':
                                import ctypes
                                PROCESS_TERMINATE = 1
                                handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, pid)
                                ctypes.windll.kernel32.TerminateProcess(handle, 0)
                                ctypes.windll.kernel32.CloseHandle(handle)
                            else:
                                os.kill(pid, signal.SIGKILL)
                            self.log(f"Tarayıcı süreci (PID: {pid}) anında sonlandırıldı!")
                        except Exception as e:
                            self.log(f"Süreç sonlandırma hatası: {str(e)}")
                self.driver = None
            except Exception as e:
                self.log(f"Acil tarayıcı kapatma hatası: {str(e)}")
        
        # GUI'yi hemen güncelle
        self.start_button.config(state=tk.NORMAL)
        self.stop_button.config(state=tk.DISABLED)
        self.update_status("ACİL DURDURULDU!")
        
        # Aktif işlemleri iptal et
        if hasattr(self, 'active_orders') and self.active_orders:
            self.log("Aktif işlemler iptal ediliyor...")
            # İşlem iptali için gerekli kodlar burada yer alacak
            
        self.log("Tüm işlemler durduruldu!")
    
    def on_closing(self):
        """Uygulama kapatıldığında çağrılır"""
        if self.is_running:
            self.emergency_stop_bot()
        self.root.destroy()
    
    def check_stop_signal(self):
        """Durdurma sinyalini kontrol eder - tüm döngülerde çağrılmalıdır"""
        if self.stop_event.is_set() or self.emergency_stop or not self.is_running:
            raise Exception("Durdurma sinyali alındı")
        return False
    
    def run_bot(self):
        try:
            # Tarayıcı ayarlarını yapılandır
            self.log("Tarayıcı başlatılıyor...")
            chrome_options = Options()
            chrome_options.add_argument("--start-maximized")
            # chrome_options.add_argument("--headless") # Başsız modda çalıştırmak istiyorsanız bu satırı açın
            chrome_options.add_experimental_option("detach", False) # Tarayıcının ayrı süreç olarak çalışmasını engelle
            
            service = Service(ChromeDriverManager().install())
            self.driver = webdriver.Chrome(service=service, options=chrome_options)
            
            # Ana işlem döngüsü
            while self.is_running:
                self.check_stop_signal() # Her döngü başında durdurma sinyalini kontrol et
                self.execute_trading_cycle()
                
                # 2 dakika boyunca bekle veya Take Profit gerçekleşene kadar
                self.log("İşlem 2 dakika boyunca izleniyor...")
                wait_time = 120 # 2 dakika
                start_time = time.time()
                
                # Daha sık kontrol ile durdurma sinyaline hızlı yanıt ver
                while self.is_running and (time.time() - start_time) < wait_time:
                    self.check_stop_signal() # Her döngüde kontrol et
                    
                    # Take Profit durumunu kontrol et
                    try:
                        if self.check_take_profit():
                            self.log("Take Profit gerçekleşti. Yeni işlem başlatılıyor.")
                            break
                    except Exception as e:
                        if "Durdurma sinyali alındı" in str(e):
                            raise
                        self.log(f"Take Profit kontrolü sırasında hata: {str(e)}")
                    
                    # Daha kısa aralıklarla kontrol et (0.1 saniye)
                    for _ in range(10): # 1 saniyeyi 10 parçaya böl
                        self.check_stop_signal()
                        time.sleep(0.1)
                
        except Exception as e:
            if "Durdurma sinyali alındı" in str(e):
                self.log("Bot kontrollü şekilde durduruldu.")
            else:
                self.log(f"Bot çalışması sırasında hata: {str(e)}")
        finally:
            # Bot thread tamamlandığında GUI'yi güncelle
            if self.is_running:
                self.root.after(0, self.stop_bot)
    
    def execute_trading_cycle(self):
        try:
            # 1. Binance Futures Grid Bot sayfasına giriş yap
            self.log("Binance Futures Grid Bot sayfasına giriş yapılıyor...")
            self.check_stop_signal()
            self.driver.get("https://www.binance.com/en/futures/trading-bot")
            
            # Sayfanın yüklenmesi için bekle
            for _ in range(30): # 30 saniye timeout
                self.check_stop_signal()
                try:
                    if self.driver.find_element(By.XPATH, "//div[contains(text(), 'Grid Bot')]"):
                        break
                except:
                    pass
                time.sleep(1)
            
            self.log("Sayfa başarıyla yüklendi.")
            
            # 2. x50 kaldıraçlı ve maksimum 25$ giriş miktarı olan botları filtrele
            self.log("Filtreler uygulanıyor...")
            self.check_stop_signal()
            
            # Filtre butonlarını bul ve tıkla
            for _ in range(10): # 10 saniye timeout
                self.check_stop_signal()
                try:
                    filter_btn = self.driver.find_element(By.XPATH, "//button[contains(text(), 'Filter')]")
                    filter_btn.click()
                    break
                except:
                    time.sleep(0.5)
            
            # Kaldıraç filtresini ayarla
            self.check_stop_signal()
            for _ in range(10):
                try:
                    leverage_filter = self.driver.find_element(By.XPATH, "//div[contains(text(), 'Leverage')]/following-sibling::div//input")
                    leverage_filter.clear()
                    leverage_filter.send_keys("50")
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
            
            # Maksimum giriş miktarı filtresini ayarla
            self.check_stop_signal()
            for _ in range(10):
                try:
                    amount_filter = self.driver.find_element(By.XPATH, "//div[contains(text(), 'Max Investment')]/following-sibling::div//input")
                    amount_filter.clear()
                    amount_filter.send_keys("25")
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
            
            # Filtre uygula butonuna tıkla
            self.check_stop_signal()
            for _ in range(10):
                try:
                    apply_btn = self.driver.find_element(By.XPATH, "//button[contains(text(), 'Apply')]")
                    apply_btn.click()
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
                    
            self.log("Filtreler başarıyla uygulandı.")
            
            # 3. PNL'si en yüksek olan botu seç ve "Copy" yap
            self.log("PNL'si en yüksek olan bot seçiliyor...")
            self.check_stop_signal()
            
            # Botları PNL'ye göre sırala
            for _ in range(10):
                try:
                    sort_btn = self.driver.find_element(By.XPATH, "//div[contains(text(), 'PNL')]")
                    sort_btn.click()
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
                    
            time.sleep(1) # Sıralamanın uygulanması için kısa bekle
            self.check_stop_signal()
            
            # En üstteki botu (en yüksek PNL) seç
            for _ in range(10):
                try:
                    top_bot = self.driver.find_element(By.XPATH, "(//button[contains(text(), 'Copy')])[1]")
                    top_bot.click()
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
                    
            self.log("PNL'si en yüksek bot seçildi.")
            
            # 4. Tekrar "Copy" butonuna basarak işlemi onayla
            self.log("İşlem onaylanıyor...")
            self.check_stop_signal()
            
            for _ in range(10):
                try:
                    confirm_copy = self.driver.find_element(By.XPATH, "//button[contains(text(), 'Copy')]")
                    confirm_copy.click()
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
            
            # 5. Investment, Stop Loss ve Take Profit değerlerini ayarla
            self.log("Parametreler ayarlanıyor...")
            self.check_stop_signal()
            
            # Investment miktarını ayarla
            for _ in range(10):
                try:
                    investment_input = self.driver.find_element(By.XPATH, "//label[contains(text(), 'Investment')]/following-sibling::div//input")
                    investment_input.clear()
                    investment_input.send_keys("25")
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
            
            # Stop Loss değerini ayarla
            self.check_stop_signal()
            for _ in range(10):
                try:
                    stop_loss_input = self.driver.find_element(By.XPATH, "//label[contains(text(), 'Stop Loss')]/following-sibling::div//input")
                    stop_loss_input.clear()
                    stop_loss_input.send_keys("1")
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
            
            # Take Profit değerini ayarla
            self.check_stop_signal()
            for _ in range(10):
                try:
                    take_profit_input = self.driver.find_element(By.XPATH, "//label[contains(text(), 'Take Profit')]/following-sibling::div//input")
                    take_profit_input.clear()
                    take_profit_input.send_keys("0.50")
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
                    
            self.log("Parametreler başarıyla ayarlandı.")
            
            # 6. "Create" butonuna basarak işlemi başlat
            self.log("İşlem başlatılıyor...")
            self.check_stop_signal()
            
            for _ in range(10):
                try:
                    create_btn = self.driver.find_element(By.XPATH, "//button[contains(text(), 'Create')]")
                    create_btn.click()
                    break
                except:
                    self.check_stop_signal()
                    time.sleep(0.5)
            
            # İşlemin başlatıldığını doğrula
            successful = False
            for _ in range(20): # 10 saniye timeout
                self.check_stop_signal()
                try:
                    self.driver.find_element(By.XPATH, "//div[contains(text(), 'Bot Created Successfully')]")
                    successful = True
                    break
                except:
                    time.sleep(0.5)
                    
            if successful:
                self.log("İşlem başarıyla başlatıldı.")
            else:
                self.log("İşlem başlatma onayı alınamadı, ama devam ediliyor.")
            
        except Exception as e:
            if "Durdurma sinyali alındı" in str(e):
                raise
            self.log(f"İşlem döngüsü sırasında hata: {str(e)}")
            raise
    
    def check_take_profit(self):
        try:
            self.check_stop_signal()
            # Bu fonksiyon Take Profit'in gerçekleşip gerçekleşmediğini kontrol eder
            profit_element = self.driver.find_element(By.XPATH, "//div[contains(@class, 'profit-value')]")
            profit_text = profit_element.text
            
            # Profit değerini al ve Take Profit değeriyle karşılaştır
            profit_value = float(profit_text.replace("$", "").strip())
            take_profit_value = 0.50
            
            return profit_value >= take_profit_value
            
        except Exception as e:
            if "Durdurma sinyali alındı" in str(e):
                raise
            self.log(f"Take Profit kontrolü sırasında hata: {str(e)}")
            return False

def main():
    root = tk.Tk()
    app = BinanceGridBotApp(root)
    root.mainloop()

if __name__ == "__main__":
    main()
Chatgpt

import time
import threading
import tkinter as tk
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager

# Botun çalışıp çalışmadığını kontrol eden değişken
bot_running = False

# Tarayıcı başlatma fonksiyonu
def start_browser():
    global driver
    options = webdriver.ChromeOptions()
    options.add_argument("--start-maximized")
    driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)

# Binance Grid Bot işlemlerini yapan fonksiyon
def run_bot():
    global bot_running
    start_browser()
    
    driver.get("https://www.binance.com/en/futures/grid-trading")
    time.sleep(3)

    while bot_running:
        try:
            # **Filtreleme**: x50 kaldıraç ve max 25$ yatırım miktarı
            filter_button = driver.find_element(By.XPATH, "//button[contains(text(), 'Filter')]")
            filter_button.click()
            time.sleep(1)

            leverage_option = driver.find_element(By.XPATH, "//option[contains(text(), 'x50')]")
            leverage_option.click()
            time.sleep(1)

            investment_filter = driver.find_element(By.XPATH, "//input[@placeholder='Max Investment']")
            investment_filter.send_keys(Keys.CONTROL + "a") # Önce var olanı temizle
            investment_filter.send_keys("25")
            investment_filter.send_keys(Keys.RETURN)
            time.sleep(2)

            # **PNL'si en yüksek olan botu seç ve 'Copy' yap**
            top_bot = driver.find_element(By.XPATH, "(//button[contains(text(), 'Copy')])[1]")
            top_bot.click()
            time.sleep(1)

            copy_confirm = driver.find_element(By.XPATH, "//button[contains(text(), 'Copy')]")
            copy_confirm.click()
            time.sleep(2)

            # **Ayarları yap**
            investment_input = driver.find_element(By.XPATH, "//input[@name='investment']")
            investment_input.send_keys(Keys.CONTROL + "a")
            investment_input.send_keys("25")

            stop_loss_input = driver.find_element(By.XPATH, "//input[@name='stopLoss']")
            stop_loss_input.send_keys(Keys.CONTROL + "a")
            stop_loss_input.send_keys("1")

            take_profit_input = driver.find_element(By.XPATH, "//input[@name='takeProfit']")
            take_profit_input.send_keys(Keys.CONTROL + "a")
            take_profit_input.send_keys("0.50")

            # **"Create" butonuna basarak işlemi başlat**
            create_button = driver.find_element(By.XPATH, "//button[contains(text(), 'Create')]")
            create_button.click()
            time.sleep(2)

            # **İşlemi 2 dakika bekleyip kontrol et**
            time.sleep(120)
            driver.refresh()
            time.sleep(3)

            # **Take Profit gerçekleştiyse yeni işlem aç**
            try:
                profit_status = driver.find_element(By.XPATH, "//span[contains(text(), 'Take Profit')]")
                print("✅ Kâr alındı, yeni işlem başlatılıyor...")
                driver.get("https://www.binance.com/en/futures/grid-trading")
            except:
                print("⏳ İşlem devam ediyor...")

        except Exception as e:
            print(f"⚠️ Hata oluştu: {e}")
            break

    driver.quit()

# **Botu başlatma fonksiyonu**
def start_bot():
    global bot_running
    if not bot_running:
        bot_running = True
        threading.Thread(target=run_bot).start()

# **Botu durdurma fonksiyonu**
def stop_bot():
    global bot_running
    bot_running = False

# **GUI Arayüzü**
root = tk.Tk()
root.title("Binance Futures Grid Bot")
root.geometry("300x200")

start_button = tk.Button(root, text="Başlat", command=start_bot, bg="green", fg="white", font=("Arial", 12))
start_button.pack(pady=20)

stop_button = tk.Button(root, text="Dur
dur", command=stop_bot, bg="red", fg="white", font=("Arial", 12))
stop_button.pack(pady=20)

root.mainloop()
Manuel yaptığım işlemi chrome ile otomasyon istedim
Henüz bakmadım ama ikisi de çalışır bunların
Backtest, simülasyon ve al-sat botları konusunda bende bir kaç bir şey denedim. İlk 3-4 promtta GPT ile temel oluşturabildim ama daha karmaşık hale getirmek istediğimde saçmalaya başladı. Temel iskelet oluşturma konusunda başarılılar ama iş geliştirme, güncellemeye gelince biraz zortluyor Sanırım birde claude veya cursor deneyeceğim.