WallStreetbot

Sunucu Bağlantısı Aktif
ROBOT DURUMU: PASİF

Simüle Portföyüm

Toplam Varlık (TL) 100.000,00 ₺
0.00 ₺ (0.00%)
Nakit TL
100.000,00 ₺
GLDTR.IS (Altın ETF)
0 adet 0,00 ₺
GMSTR.IS (Gümüş ETF)
0 adet 0,00 ₺

Borsa Canlı Takip (BIST)

CANLI VERİ
GLDTR (Altın ETF) 0.00 ₺
+0.00%
GMSTR (Gümüş ETF) 0.00 ₺
+0.00%
USD/TRY Kuru 0.00 ₺
+0.00%
ONS Altın (XAU/USD) $0.00
+0.00%

Robot Algoritma Ayarları

%
%
TL

Robot Logları & İşlemler

[SİSTEM] Robot simülatörü başlatıldı.
[SİSTEM] Fiyat dalgalanması simülasyonu aktif.
Henüz gerçekleşen alım-satım işlemi yok.

Enpara QNB Invest Gerçek Otomasyon Kodu (Playwright)

Enpara resmi API sunmadığı için kendi bilgisayarınızda arka planda otomatik alım-satım yapmak isterseniz tarayıcı otomasyonu kullanabilirsiniz. Aşağıdaki script Playwright kütüphanesini kullanır ve tarayıcıyı "görünür (non-headless)" modda açar. Bu sayede SMS 2FA doğrulamasını kendiniz elle yapar, ardından robotun otomatik tarama yapıp hisse/ETF alım satım paneline emir girmesini sağlarsınız.

Nasıl Çalıştırılır? Proje dizininde npm install playwright komutuyla kütüphaneyi kurun ve bu kodu bot.js olarak kaydedip node bot.js ile çalıştırın.
import { chromium } from 'playwright';

// Robot Alım/Satım Parametreleri
const TARGET_ASSET = 'GLDTR'; // Alım-satım yapılacak fon (GLDTR veya GMSTR)
const BUY_THRESHOLD_PCT = 0.2; // Zirveden % kaç düşünce alınacak
const SELL_THRESHOLD_PCT = 0.4; // Alıştan % kaç yükselince satılacak
const TRADE_AMOUNT_TRY = 5000; // Her alımda kullanılacak TL miktarı

async function startEnparaBot() {
  console.log('Tarayıcı başlatılıyor...');
  const browser = await chromium.launch({ headless: false }); // Girişte SMS doğrulaması için non-headless açıyoruz!
  const context = await browser.newContext();
  const page = await context.newPage();

  // Enpara Yatırım Sayfasına Git
  console.log('Enpara Yatırım giriş sayfasına yönlendiriliyor...');
  await page.goto('https://enpara.qnbinvest.com.tr/');

  console.log('Lütfen banka kullanıcı bilgilerinizi ve telefonunuza gelen SMS 2FA kodunu girerek oturum açın.');
  
  // Kullanıcının oturum açmasını bekle (Portföy sayfasının yüklendiğini teyit et)
  await page.waitForSelector('.portfolio-value-container', { timeout: 600000 }); // 10 dakika bekler
  console.log('Giriş başarılı! Otomatik trading botu aktif.');

  let peakPrice = null;
  let lastBuyPrice = null;
  let ownedQuantity = 0;

  // Takip ve Alım Satım Döngüsü
  setInterval(async () => {
    try {
      // 1. Canlı ETF Fiyatını Al (Ekrandan veya API'den kazı)
      await page.goto(`https://enpara.qnbinvest.com.tr/hisse-detay/${TARGET_ASSET}`);
      const priceText = await page.locator('.stock-current-price').innerText();
      const currentPrice = parseFloat(priceText.replace(',', '.'));
      
      console.log(`[TAKİP] ${TARGET_ASSET} Mevcut Fiyat: ${currentPrice} TRY`);

      if (peakPrice === null || currentPrice > peakPrice) {
        peakPrice = currentPrice;
        console.log(`[TAKİP] Yeni Zirve Fiyat Kaydedildi: ${peakPrice} TRY`);
      }

      // 2. Alım Kararı
      if (ownedQuantity === 0 && currentPrice <= peakPrice * (1 - BUY_THRESHOLD_PCT / 100)) {
        console.log(`[ALIM KOŞULU] Fiyat düştü! Alım emri giriliyor. Fiyat: ${currentPrice} TRY`);
        
        // Emir Verme Sayfasına Git & Giriş yap
        await page.click('#buy-order-tab');
        await page.fill('#order-amount-input', TRADE_AMOUNT_TRY.toString());
        await page.click('#submit-buy-order-btn');
        await page.click('#confirm-order-btn'); // Onayla
        
        lastBuyPrice = currentPrice;
        ownedQuantity = TRADE_AMOUNT_TRY / currentPrice;
        peakPrice = currentPrice; // Zirveyi güncelle
        console.log(`[ALIM TAMAMLANDI] Alınan Adet: ${ownedQuantity}, Alış Fiyatı: ${lastBuyPrice} TRY`);
      }

      // 3. Satım Kararı
      if (ownedQuantity > 0 && currentPrice >= lastBuyPrice * (1 + SELL_THRESHOLD_PCT / 100)) {
        console.log(`[SATIM KOŞULU] Kar hedefine ulaşıldı! Satış emri giriliyor. Fiyat: ${currentPrice} TRY`);
        
        await page.click('#sell-order-tab');
        await page.fill('#order-quantity-input', ownedQuantity.toFixed(4));
        await page.click('#submit-sell-order-btn');
        await page.click('#confirm-order-btn'); // Onayla
        
        console.log(`[SATIM TAMAMLANDI] ${ownedQuantity} adet ${TARGET_ASSET} satıldı. Fiyat: ${currentPrice} TRY`);
        ownedQuantity = 0;
        lastBuyPrice = null;
        peakPrice = currentPrice;
      }

    } catch (err) {
      console.error('Döngü hatası:', err.message);
    }
  }, 10000); // 10 saniyede bir kontrol et
}

startEnparaBot();