Skip to main content
Glama
README.md
# BIST Trading Skill (Claude Code)

Borsa İstanbul için Claude Code **skill'i + MCP sunucusu**. [day-trader-skill](https://github.com/jakeschincariol/day-trader-skill)'in
disiplin mantığı (önce risk kontrolü, sonra kullanıcı onayı) BIST kurallarına uyarlandı.

**Yapabildikleri**
- Teknik analiz: EMA 20/50/200, trend, RSI, MACD + kesişim, Bollinger + sıkışma, ATR, hacim, tavan/taban
- KAP bildirimleri (son N gün)
- Lot hesabı: BIST fiyat adımına yuvarlama, komisyon dahil risk, nakit ve ağırlık sınırı
- Risk kontrolü: işlem başı risk, R/R, günlük zarar limiti, günlük işlem sayısı, açık pozisyon sayısı, tavan/taban, seans
- Paper trading (sanal portföy, gerçekleşen/gerçekleşmemiş kâr-zarar, stop/hedef uyarıları)
- **Midas emir fişi:** Midas'a elle girilecek hazır emir
- **TradingView:** Pine Script alarmlarını webhook ile alır, Claude sinyalleri risk kontrolünden geçirir

> ⚠️ **Gerçek emir göndermez.** Midas'ın bireysel kullanıcılara açık bir emir API'si yok. TradingView de dışarıdan emir
> göndermeye izin vermez; aracı kurum entegrasyonunda bile emri ekranda sen verirsin. Bu yüzden gerçek işlem
> her zaman senin elinde: bot planı ve emir fişini hazırlar, emri sen girersin.
>
> Bu proje yatırım tavsiyesi değildir. Veri kaynakları resmi değildir ve gecikmeli olabilir.

---

## Kurulum

Gerekenler: **Node.js 22+** ve **Claude Code**.

```bash
git clone https://github.com/BurakOzcelik01/bist-trading-skill.git
cd bist-trading-skill
npm install
cp .env.example .env      # Windows: copy .env.example .env
npm test                  # 26 çevrimdışı test geçmeli
claude                    # Claude Code'u bu klasörde başlat
```

Claude Code ilk açılışta `.mcp.json`'daki **bist** sunucusunu onaylamanı ister; onayla. `/mcp` komutuyla
bağlı olduğunu görebilirsin. Skill `.claude/skills/bist-trader/SKILL.md` içinde, otomatik yüklenir.

> MCP sunucusunu elle başlatmana **gerek yok**; Claude Code onu kendisi çalıştırır.

### Her klasörden kullanmak istersen (isteğe bağlı)

```bash
# Skill'i kişisel skill klasörüne kopyala
mkdir -p ~/.claude/skills && cp -r .claude/skills/bist-trader ~/.claude/skills/
# MCP sunucusunu kullanıcı düzeyinde kaydet (yolu kendi klasörünle değiştir)
claude mcp add --scope user bist -- node /TAM/YOL/bist-trading-skill/src/server.js
```

## Örnek kullanım

```
THYAO'ya günlükte bak, KAP'ı kontrol et, işlem planı çıkar.
ASELS için 1 saatlik grafikte giriş arıyorum, plan yap.
Portföyüm ne durumda? Stop'u gelen var mı?
Yeni TradingView sinyali var mı? Varsa değerlendir.
Planı onaylıyorum, Midas için emir fişini ver.
```

## Araçlar

| Araç | Açıklama |
|---|---|
| `seans_durumu` | İstanbul saatiyle seans durumu |
| `bist_teknik_analiz` | `1d`, `1h`, `15m` periyotlarında teknik özet; tamamlanmamış mumu hesaba katmaz |
| `bist_temel_oranlar` | F/K, PD/DD, piyasa değeri vb. (Yahoo; eksik alanlar açıkça listelenir) |
| `kap_bildirimleri` | Son N gün KAP bildirimleri; ulaşılamazsa bunu açıkça söyler |
| `pozisyon_boyutlandir` | Lot hesabı |
| `risk_kontrol` | PASS / FAIL + engeller ve uyarılar |
| `paper_emir` | Sanal al/sat; alış önce risk kontrolünden geçer, fiyat piyasadan %3'ten uzaksa reddedilir |
| `portfoy_durumu` | Sanal portföy değerlemesi |
| `emir_fisi` | Midas'a elle girilecek emir |
| `tradingview_sinyalleri` | Webhook'tan gelen sinyaller |
| `portfoy_sifirla` | Sanal portföyü sıfırlar |

## Risk ayarları (`.env`)

| Değişken | Varsayılan | Anlamı |
|---|---|---|
| `BASLANGIC_NAKIT_TL` | 100000 | Paper portföy başlangıcı |
| `KOMISYON_ORANI` | 0 | Tek yön komisyon (Midas BIST'te komisyon almadığını açıklıyor) |
| `ISLEM_BASI_RISK_YUZDE` | 1 | Varsayılan işlem başı risk |
| `MAKS_ISLEM_BASI_RISK_YUZDE` | 2 | Aşılamaz üst sınır |
| `MIN_RISK_ODUL` | 2 | En az 1:2 R/R |
| `MAKS_ACIK_POZISYON` | 5 | Aynı anda açık pozisyon |
| `MAKS_POZISYON_YUZDE` | 25 | Tek hissenin portföydeki azami ağırlığı |
| `GUNLUK_MAKS_ZARAR_YUZDE` | 3 | Gün içi gerçekleşen zarar bu seviyeye gelince yeni işlem yok |
| `GUNLUK_MAKS_ISLEM` | 6 | Günlük işlem sayısı sınırı |
| `ACILIS_KAPANIS_TAMPON_DK` | 15 | Açılış/kapanışa yakın girişlerde uyarı |

Paper portföy ve sinyaller `data/` klasöründe tutulur (Git'e yüklenmez).

## TradingView webhook kurulumu

TradingView alarmını bota iletmek için:

1. `.env` içine `WEBHOOK_SECRET` yaz (en az 16 karakter):
   `node -e "console.log(require('crypto').randomBytes(24).toString('hex'))"`
2. Alıcıyı başlat: `npm run webhook` (varsayılan `127.0.0.1:8080`)
3. Dışarıya aç. TradingView **yalnızca 80/443 portlarına** gönderir ve localhost'a ulaşamaz. Örneğin
   Cloudflare Tunnel ile: `cloudflared tunnel --url http://localhost:8080` → sana bir `https://….trycloudflare.com` adresi verir.
4. `pine/ema-rsi-webhook.pine` dosyasını TradingView'a ekle, ayarlara aynı anahtarı yaz.
5. Alarm oluştur. Mesaj kutusuna yalnızca `{{strategy.order.alert_message}}` yaz.
   Webhook URL: `https://<tünel-adresin>/webhook/tradingview`

Webhook için TradingView'da **ücretli plan** ve **iki adımlı doğrulama (2FA)** gerekir. Alarm mesajının biçimi:

```json
{"secret":"...","symbol":"THYAO","side":"BUY","price":312.25,"stop":298.5,"target":340,"strategy":"EMA-RSI"}
```

`side`: `BUY`, `SELL` veya `CLOSE`. `stop` ve `target` isteğe bağlı.

> Pine şablonu örnektir; kârlı olduğu iddia edilmez. Önce TradingView'da backtest et.

## Proje yapısı

```
.claude/skills/bist-trader/SKILL.md   Claude'un kuralları ve iş akışı
.mcp.json                             MCP sunucusunun Claude Code kaydı
src/server.js                         MCP sunucusu (stdio)
src/webhook.js                        TradingView alarm alıcısı
src/lib/bist-rules.js                 Fiyat adımı, tavan/taban, seans
src/lib/indicators.js                 EMA, RSI, MACD, Bollinger, ATR (bağımlılıksız)
src/lib/sizing.js, risk.js            Lot hesabı ve risk kontrolü
src/lib/portfolio.js                  Paper portföy
src/lib/market-data.js                Yahoo Finance
src/lib/kap.js                        KAP bildirimleri
src/lib/signals.js, order-ticket.js   Sinyal kaydı, emir fişi
pine/ema-rsi-webhook.pine             TradingView strateji şablonu
test/                                 Çevrimdışı testler
```

## Bilinen sınırlar

- **Veri:** Yahoo Finance resmi olmayan bir kaynak; BIST verisi ~15 dk gecikmeli olabilir, temel oranlar sık eksik gelir.
- **KAP:** KAP'ın belgelenmiş açık API'si yok. Kullanılan uçlar, kap.org.tr sitesinin kendi kullandığı JSON uçları;
  KAP bunları değiştirirse araç "ALINAMADI" der, hiçbir zaman sessizce "bildirim yok" demez.
- **Takvim:** Resmi tatiller ve arife yarım günleri araçta tanımlı değil.
- **Gerçek emir:** Yok (yukarıya bak). API'si olan bir aracı kuruma geçersen `paper_emir`'in yanına o kurum için yeni bir
  araç eklenebilir; gerçek emir için de kullanıcı onayı şartı korunmalı.

## Lisans

MIT