Binance spot piyasasında hacim patlaması + trend yakalayan otomatik scalping botu. modunda çalışır - gerçek emir göndermez, sanal cüzdan üzerinde işlem yapar.
개요
Binance spot piyasasında hacim patlaması + trend yakalayan otomatik scalping botu. modunda çalışır - gerçek emir göndermez, sanal cüzdan üzerinde işlem yapar. Eski monolitik app/main.py FastAPI APIRouter modüllerine bölünmüştür. app/routers/ altında modül dosyası vardır; bunların 'si APIRouter tanımlar ve main.py içinde adet include_router kaydı yapılır (2026-10-15 doğrulaması; aşağıdaki tablo eksiksizdir ve backend/tests/test_readme_router_table.py ile CI'da doğrulanır). runtime.py, global_radar.py ve llm_position_tools.py APIRouter : runtime.py uzun-ömürlü döngüleri ve yardımcıları taşır (fonksiyonları main.py tarafından doğrudan import edilir), global_radar.py Binance Global arka plan tarama döngüsünü çalıştırır, llm_position_tools.py yalnız LLM araç (tool) şema tanımlarını sağlar. Frontend'de frontend/app/charts/ altında grafik mantığı chartShared.ts (format/yerleşim sabitleri) ve signals.ts (gösterge/strateji sinyal matematiği) olarak ayrılmıştır.
README
Scalper Agent V4 - Paper Trading Bot
Binance spot piyasasında hacim patlaması + trend yakalayan otomatik scalping botu. Paper trading modunda çalışır - gerçek emir göndermez, sanal cüzdan üzerinde işlem yapar.
Çalışma Mantığı
Binance Public WS (1m kline)
│
▼
market_data.py ──► ticker + kapanış fiyatları + hacim
│
▼
analyzer.py (her 2 sn, tüm coinler)
│
├── Hacim patlaması? (hacim > 1.5x son 10 bar ortalaması)
├── Trend yukarı? (fiyat > 9 periyotluk EMA)
└── İkisi de TRUE ──► BUY (varsayılan 1.000 TRY paper emir)
│
▼
analyzer.py + database.py ──► sanal cüzdan güncelle (USDT düş, coin ekle)
│
▼
main.py (app kurulumu + lifecycle + WS) ──► WebSocket /ws üzerinden frontend'e yayınla
Modüler API yapısı
Eski monolitik app/main.py FastAPI APIRouter modüllerine bölünmüştür. app/routers/ altında 16 modül dosyası vardır; bunların 13’si APIRouter tanımlar ve main.py içinde 13 adet include_router kaydı yapılır (2026-10-15 doğrulaması; aşağıdaki tablo eksiksizdir ve backend/tests/test_readme_router_table.py ile CI’da doğrulanır). runtime.py, global_radar.py ve llm_position_tools.py APIRouter kullanmaz: runtime.py uzun-ömürlü döngüleri ve yardımcıları taşır (fonksiyonları main.py tarafından doğrudan import edilir), global_radar.py Binance Global arka plan tarama döngüsünü çalıştırır, llm_position_tools.py yalnız LLM araç (tool) şema tanımlarını sağlar.
| Modül | Sorumluluk |
|---|---|
app/main.py |
FastAPI kurulumu, CORS, startup/lifecycle, WS endpoint, pozisyon aç/kapa, config |
app/state.py |
Paylaşılan market + analyzer singleton’ları |
app/api_common.py |
Ortak runtime yardımcıları (scan log, correlation monitor, guard) |
app/routers/runtime.py |
Yayın, alert, strateji tarama, radar, sembol aktivite döngüleri |
app/routers/monitoring.py |
Sistemin en kritik parçası: master radar, unified sinyal zarfı, master-surge kapıları, hedef/pending takibi, bildirim üretimi. Bu modül 2026-09-26 denetimine kadar hiç belgelenmemişti (rapor #107) |
app/routers/macd_monitor.py |
MACD / rising-signal izleme döngüsü, kilit-temelli hesaplama |
app/routers/auto_paper.py |
Otonom paper pozisyon açma (radar/velocity bildirimlerinden), max-open ve idempotans kuralları |
app/routers/velocity.py |
Hız Avcısı aday takibi, microflow/sembol aktivasyonu, otonom paper girişler |
app/routers/llm_chat.py |
LLM sohbet, market tarama, chat auto-trade |
app/routers/chart_forecast.py |
Grafik için ML/istatistik tahmin uçları (cache’li) |
app/routers/llm_position_tools.py |
LLM’nin pozisyon okuma/eylem araçları |
app/routers/maintenance.py |
Backfill, replay-parity, strateji replay işleri |
app/routers/system.py |
Sağlık, memory, migration sistem rotaları |
app/routers/reports.py |
Salt-okunur rapor endpoint’leri |
app/routers/binance_trade.py |
Kullanıcı Binance TR işlemleri: Risk Merkezi ayarları, işlem planı (RR önerisi), idempotent pozisyon açma + OCO koruması, anahtar silme |
app/routers/global_radar.py |
Binance Global (USDT) spot piyasasını TR ile aynı velocity dedektöründen tarayan görünmez erken-tespit döngüsü (APIRouter yok; main.py döngüyü başlatır) |
app/routers/snapback.py |
Snapback Dip Avcısı (/api/signals/snapback) ve makro rejim kalkanı (/api/signals/macro-regime) |
app/routers/user_prefs.py |
Kullanıcı başına bildirim tercihleri (uygulama-içi, ses, WhatsApp) ve maskeli WhatsApp telefon numarası |
app/routers/journal.py |
Kullanıcıya özel işlem günlüğü (scalping disiplin notları, strateji etiketi); salt-not, emir/pozisyon değiştirmez |
Frontend’de frontend/app/charts/ altında grafik mantığı chartShared.ts (format/yerleşim sabitleri) ve signals.ts (gösterge/strateji sinyal matematiği) olarak ayrılmıştır.
Pozisyon Yönetimi (Aktif Stratejiye Göre)
- LLM_PAPER / CHAT_PREDICTION / VELOCITY_AUTO (aktif): Alım kararları LLM sohbet, chat-prediction veya otonom Hız Avcısı modüllerinden gelir. Sistem stop’u
HARD_STOP_LOSS_PCT=0.012(−%1,2), TPSPOT_PROFIT_TARGET_PCT=0.01(+%1). LLM yönetilen plan stop/TP/max-hold ve erken başarısızlık/bayat pozisyon kuralları uygulanır. - BB_MFI_MEAN_REVERSION: 2026-09-04 itibarıyla koddan kaldırılmıştır; belgedeki −%8,882 / +%2,317 sabitleri mevcut değildir.
- Re-entry guard’ları: Bar cooldown, timeout sonrası 24 saatlik blok, hard-stop sonrası 2 saatlik blok — timeout/hard-stop blokları restart’ta kalıcıdır.
- Not: eski belgedeki −%1 hard stop / +%0.2 break-even / %0.5 trailing modeli hiçbir aktif stratejide kullanılmaz; ölü yapılandırma sabitleri (
TAKE_PROFIT_PCT,TRAILING_*, çok kademeliTIME_DECAY_TP_*) config’ten kaldırılmıştır.
Stack
| Katman | Teknoloji |
|---|---|
| Backend | Python, FastAPI, WebSocket, PostgreSQL (psycopg/asyncpg) |
| Veri | Binance Public WS (1m kline stream, tek bağlantıda birleşik) |
| Analiz | NumPy (EMA, ortalama hacim) |
| Frontend | Next.js, React, Tailwind |
Kurulum & Çalıştırma
# Backend (port 8004)
cd backend
.\venv\Scripts\Activate.ps1
uvicorn app.main:app --reload --port 8004
# Frontend (port 3004)
cd frontend
npm run dev
Veya kök dizinde: .\start.ps1 (iki servisi birden başlatır)
Yapılandırma (.env)
| Değişken | Varsayılan | Açıklama |
|---|---|---|
| Market API | public | Yalnızca herkese açık piyasa verisi kullanılır |
| Başlangıç bakiyesi | 10.000 TL | Sanal paper trading cüzdanı |
| Varsayılan paper emir tutarı | 1.000 TRY | DEFAULT_ORDER_USDT adı geriye dönük uyumluluk içindir |
İnce ayarlar backend/app/config.py içinde: sembol evreni, maliyet/likidite filtreleri, DEFAULT_ORDER_USDT (1.000 TRY; isim geriye dönük uyumluluk içindir, birim TRY’dür) ve GAINER_RADAR_INTERVAL_SEC. Yüksek hacimli gözlem tablolarının saklama süresi RETENTION_DAYS (varsayılan 30 gün) ile ayarlanır.
2026-09-26 notu —
BACKTEST_ASSUMED_SPREAD_PCTartık kullanılmıyor. Bu değişkenconfig.pyiçinde yoktur; yalnız bakım dışı araştırma script’leri (backend/scripts/replay_*.py)config’den okumaya çalışır ve bu satırlar zatenAttributeErrorverir..envdosyanıza yazmanız durumunda hiçbir etkisi olmaz. BB-MFI stop/TP yüzdeleri de 2026-09-04’te kaldırılanBB_MFI_MEAN_REVERSIONstratejisine aitti ve config’de artık yoktur.
LLM paper giriş/çıkış ve sembol bazlı öğrenme sözleşmesi: docs/SCALPER_TRADE_POLICY.md.
Özel paper scalping agent skill’i: .agents/skills/scalper-trade-manager/SKILL.md.
Kaynaklı araştırma ve uygulama eşlemesi: docs/SCALPER_RESEARCH_EVIDENCE.md.
API
GET /health- durum, paper/public API bilgisi, açık pozisyonlarGET /api/market/top-gainers?refresh=true- Binance TR public 24 saatlik ticker verisinden ilk 10 TRY top-gainer sembolünü ve 10 dakikalık dinamik aktivasyon durumunu getirir/yeniler.WS /ws- ticker / signal / portfolio mesajları (frontend bunu dinler)GET /api/market-klines/{symbol}- frontend ve backend için ortak Binance TR public candle adapter’ıGET /api/trades,/api/signals,/api/decisions-limit,offsetve ilgili sembol/strateji filtreleriyle server-side listelemePOST /api/combined-radar-replay/start+GET /api/combined-radar-replay/status(+/report.csv,/sweep.csv) - salt-okunur birleşik radar kapalı-mum tekrarı (Ayarlar sayfasındaki “Radar Replay” panelinin arkası)POST /api/replay-parity-backfill/start+GET /api/replay-parity-backfill/status(+/trades.csv) - canlı/paper parite backfill işi
Uyarı
Varsayılan çalışma modunda sistem yalnızca paper trading yapar; sanal cüzdanda işlem yapar ve API anahtarı gerektirmez. Gerçek satış yalnız kullanıcı tarafından bilinçli olarak açılan üç katmanlı bir kapının arkasındadır — bkz. Gerçek satış kapısı.
Production deployment (Coolify / Docker Compose)
docker-compose.yaml sekiz servis tanımlar (2026-10-15 denetim düzeltmesi — eski metin “üç konteyner” diyordu):
| Servis | Görev | Not |
|---|---|---|
postgres |
PostgreSQL 17 + pgvector; tüm kalıcı veri (scalper_postgres_data) |
pg_isready healthcheck |
backend |
FastAPI + tarayıcı/strateji döngüleri (port 8004, yalnız iç ağ) | /health döngü kaydına bakar, kritik döngü ölü/bayat ise 503 (SCALPER_HEALTH_STALE_SEC, varsayılan 120); autoheal=true etiketi |
frontend |
Eski Next.js arayüzü (3004) | |
scalperintelligent |
Yeni Next.js arayüzü, /yeni-arayuz altında (3055) |
|
gateway |
nginx: /api, /health, /ws → backend; / → frontend; /yeni-arayuz → scalperintelligent; rate-limit, güvenlik başlıkları, gerçek istemci IP’si (set_real_ip_from) |
Tek dışa açık servis (Traefik → :80). Upstream’ler yeniden başlayınca depends_on … restart: true ile kendisi de yeniden başlar |
whatsapp-bridge |
Baileys WhatsApp köprüsü (3001, yalnız iç ağ) | Oturum whatsapp_auth volume’unda |
db-backup |
Günde bir pg_dump -Fc → scalper_pg_backups volume’u, son 14 dosya (scripts/pg_backup.sh) |
Postgres ile aynı imaj |
autoheal |
autoheal=true etiketli unhealthy konteyneri yeniden başlatır (docker socket salt-okunur) |
Docker tek başına unhealthy’yi restart ETMEZ |
Hiçbir servis host portu yayımlamaz; scalper_data volume’u paper/runtime artefaktları içindir.
Yedekten geri yükleme (custom format → pg_restore, psql DEĞİL; önce backend’i durdurun ki açık bağlantı/yazma olmasın):
docker compose stop backend
docker compose exec -T db-backup sh -c 'ls -1 /backups' # dosya adını seç
docker compose exec -T db-backup sh -c 'pg_restore --clean --if-exists --no-owner --no-acl -d "$PGDATABASE" /backups/scalper_.dump'
docker compose start backend
Off-box kopya için host’ta docker volume inspect scalper_pg_backups ile mountpoint’i bulup cron/rsync ile dışarı alın.
LLM salt-okunur rol (deploy notu — 2026-10-15 denetimi)
LLM’in read_only_sql aracı sqlglot AST doğrulamasından geçer (backend/app/sql_guard.py), sorgu READ ONLY ve statement_timeout = 5s ile koşar ve llm_readonly rolüne (migration 014_llm_readonly_role.sql) geçer. Migration rolü ve sütun bazlı SELECT yetkilerini oluşturur; ancak aşağıdakiler deploy kararıdır ve otomatik yapılmaz:
- Uygulama DB kullanıcısı (
DATABASE_URL) hâlâ superuser ise,pg_read_filegibi yetkilerin etkisini tam kapatmak için superuser olmayan bir kullanıcıya geçilmelidir. Superuser ile LLM rolü yalnızca SQL katmanındaki savunmaya bağlı kalır. - Migration, uygulama kullanıcısına
llm_readonlyüyeliğini vermeye çalışır; yetki yoksa NOTICE düşer veread_only_sqlsorguları rol geçişinde hata verir (kapalı başarısızlık). Bu durumdaGRANT llm_readonly TO ;komutunu bir süper kullanıcı ile elle çalıştırın. ALLOWED_COLUMNS(sql_guard.py) ile migration 014’teki GRANT listeleri birlikte güncellenmelidir.
Otomatik top-gainer sembol aktivasyonu
Backend, TOP_GAINERS_AUTO_ACTIVATE=true (varsayılan) iken Binance TR public /api/v3/ticker/24hr ve TRY exchangeInfo verilerini 10 dakikada bir (TOP_GAINERS_REFRESH_SEC=600) kontrol eder. 24 saatlik değişime göre ilk TOP_GAINERS_LIMIT=10 TRY sembolü analiz evrenine alınır. Açık pozisyon sembolleri yeni listenin dışında kalsa bile sistem tarafından korunur ve yönetilmeye devam eder. Bu akış yalnızca paper/public-data aktivasyonudur; gerçek emir göndermez.
Use docker-compose.yaml as the Compose file and point scalper.erkanerdem.online to the gateway service on port 80. Coolify should terminate HTTPS at the domain proxy.
⚠️ Gerçek satış kapısı (2026-09-26 düzeltmesi)
Önceki sürüm bu bölümde “backend kasıtlı olarak paper-only’dir (
LIVE_TRADING=false)” diyordu. Bu yanlıştı ve yanıltıcıydı:LIVE_TRADINGdeğişkenibackend/app/altında hiçbir yerde okunmuyor (grep ile doğrulandı) — yani güvenlik, var olmayan bir anahtara bağlanmıştı.docker-compose.yamliçindekiLIVE_TRADING: "false"satırı da tamamen etkisizdir.Gerçek kapı üç katmanlıdır (
main.py:_real_sell_state/_real_sell_state_for):
- Sunucu üst kapısı —
ENABLE_REAL_BINANCE_SELLortam değişkeni. Tanımlıysa her şeyi geçersiz kılar:"1"/"true"/"yes"/"on"→ satış her zaman açık; başka bir değer → her zaman kapalı.- Panel anahtarı — env hiç tanımlı değilse
llm_settings.binance_real_sell_enabled(main.py:2333) karar verir; UI’dan Ayarlar → Binance TR ile açılıp kapatılır.- Kullanıcı anahtarı —
user_binance_keys.real_sell_enabled(DB,database.py:4709). Kullanıcı başına ayrı ayrı kontrol edilir.
POST /api/binance/sellbu kapının kapalı olması halinde403döner. Alış tarafı her zaman paper’dır; gerçek satış yalnız bu üç anahtarın da açık olmasıyla mümkündür ve kullanıcının kimlik doğrulanmış oturumu + kendi API anahtarı gerektirir. Public piyasa verisi için hiçbir kimlik bilgisi gerekmez.
The frontend uses same-origin API and WebSocket URLs in production, so no frontend URL environment variable is required. For a local split deployment, set NEXT_PUBLIC_API_URL and NEXT_PUBLIC_WS_URL at build time.
Deney disiplini (2026-10-15)
Radar eşikleri ve flag’leri için iki belge:
- Deney kaydı:
docs/DENEY_KAYDI.md - Eşik sözleşmesi ve yapısal maliyet sınırı:
docs/RADAR_ESIK_SOZLESMESI.md
Kural: Hiçbir eşik veya flag değişikliği, docs/DENEY_KAYDI.md içinde karşılık gelen bir satır olmadan canlıya çıkmaz.
추천 도구
다른 키워드를 입력하거나 필터를 제거해 보세요.
설치
npx skillfish add optimus825482/sclpragnt