Bu proje; Borsa İstanbul (BIST), Amerikan Borsaları (US), Avrupa Borsaları (EU) ve Kripto Para (CRYPTO) piyasalarındaki yatırımlarınızı tek bir merkezden yönetmeniz, kümülatif maliyet eğrilerini izlemeniz ve vergi beyan altyapısı kurmanız için geliştirilmiş Python/Django tabanlı kurumsal bir Fintech platformudur.
-
Gelişmiş FIFO (First-In, First-Out) Algoritması: Satış işlemlerinde eldeki ilk alınan varlıklar kuruşu kuruşuna tespit edilerek eritilir. Kalan stoklar veritabanı seviyesinde atomik olarak yönetilir.
-
Enflasyon Düzeltmesi (Yİ-ÜFE): Satılan varlığın alındığı ayın Yİ-ÜFE endeksi ile güncel endeks kıyaslanarak maliyet enflasyona göre pürüzsüzce revize edilir. Endeks bulunamazsa ana para güvenliği için çarpan
1.00kabul edilir. -
Güvenli Mühürleme (FIFO Hash): FIFO döngüsünün parçaladığı her işlem ve o günkü endeks değerleri benzersiz bir hash (
p_hash) zinciri ile veritabanına kilitlenir. -
Çoklu Para Birimi & Otomatik Kur: Yabancı varlıklar için işlem tarihindeki resmi TCMB gösterge kurları geriye dönük tarama (Max 10 gün) algoritmasıyla otomatik eşleştirilir.
-
Canlı Dashboard & Trend Analizi: Chart.js entegrasyonu ile kümülatif alış maliyetleri, anlık portföy değeri ve net reel kâr çizgileri dinamik olarak haritalandırılır.
Proje, Python 3.13 ortamında tam kararlılıkla çalışacak şekilde yapılandırılmıştır.
# Temel Geliştirme Framework'ü
Django==6.0.6
# Veritabanı Sürücüsü (PostgreSQL)
psycopg2-binary==2.9.12
# Veri Analizi ve Excel Entegrasyonları
pandas==3.0.4
numpy==2.5.0
openpyxl==3.1.5
# Canlı Finansal Veri ve Kur Servisleri
yfinance==1.5.1
requests==2.34.2
python-dateutil==2.9.0.post0
# Üretim (Production) Ortamı Araçları
waitress==3.0.2
gunicorn==26.0.0
whitenoise==6.12.0
# Yardımcı Metin ve SQL Düzenleyiciler
sqlparse==0.5.5
asgiref==3.11.1
# Çevre Değişkenleri ve Yapılandırma Yönetimi
python-dotenv==1.2.2
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# Windows için: .venv\Scripts\activate
pip install -r requirements.txtProjenin kök dizininde (settings.py'nin görebileceği konumda) bir .env dosyası oluşturun. Terminalde taze bir anahtar üretip bu dosyaya ekleyin:
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"# .env dosyasının içeriği
DJANGO_SECRET_KEY=urettiginiz_gizli_anahtar
migrations dizini yoksa oluşturmak için:
python manage.py makemigrations investments
python manage.py makemigrationsvarsa buradan devam edin:
python manage.py migrate
python manage.py createsuperuser
python manage.py runserverProjede TCMB kaynaklı döviz kurları ve Yİ-ÜFE enflasyon endeks veritabanını beslemek için akıllı dosya kontrol mekanizmasına (Excel/JSON) sahip 3 yeni Django yönetim komutu eklenmiştir.
| Komut | Parametreler | Açıklama |
|---|---|---|
python manage.py ekle |
--kur, --endeks, --file [yol] |
Tek bir çatı altından seçimli olarak kur veya endeks yüklemesi yapar. |
python manage.py ekle_kur |
--file [yol] |
Doğrudan döviz kuru verilerini sisteme işler. |
python manage.py ekle_endeks |
--file [yol] |
Doğrudan Yİ-ÜFE enflasyon verilerini sisteme işler. |
python manage.py add_inflation |
--file [yol] |
Yereldeki Excel dosyasındaki tüm geçmiş Yİ-ÜFE verilerini veritabanına topluca enjekte eder. |
python manage.py update_inflation_null |
- |
Yereldeki Excel dosyasından boş veya eksik ayların Yİ-ÜFE verilerini günceller. |
python manage.py update_inflation |
- |
TCMB EVDS API'sine bağlanarak canlı veri çekmeye çalışır. (Kurumsal IP engeli veya geçersiz API anahtarı durumunda güvenlik gereği işlemi keser.) |
python manage.py add_forex |
--file [yol] |
Excel tablosundaki resmi TCMB kurlarını sisteme topluca enjekte eder. |
python manage.py seed_inflation |
- |
Kod içindeki data sözlüğüne endeks verileri girilir. Girilen verileri manuel olarak sisteme topluca enjekte eder. |
Tüm komutlar hibrit bir dosya doğrulama mimarisine sahiptir:
-
Excel Varsa: Sistem öncelikli olarak
.xlsxdosyasını baz alır, verileri yüklerken otomatik olarak geriye dönük bir.jsonyedek dosyası üretir. -
Excel Yok, JSON Varsa: Projenin üretim (production) ortamında Excel olmasa dahi, sistem otomatik olarak mevcut
.jsonyan yolunu (fallback) devreye sokarak veritabanını kesintisiz beslemeye devam eder. -
Hiçbiri Yoksa: Hata vermeden önce ilgili dizinde boş bir JSON şablonu oluşturarak kullanıcının veri girmesini kolaylaştırır.
# Akıllı komut ile enflasyon endekslerini yükleme (Varsayılan dosya üzerinden)
python manage.py ekle --endeks
# Akıllı komut ile kur verilerini yükleme (Varsayılan dosya üzerinden)
python manage.py ekle --kur
# Özel bir JSON dosyasından doğrudan kur yükleme yan yolunu tetikleme
python manage.py ekle_kur --file yedekler/tcmb_2026_kur.json
# Doğrudan spesifik bir Excel dosyasından endeks yükleme
python manage.py ekle_endeks --file /path/to/enflasyon.xlsxVerileri Windows ve Linux ortamları arasında aktarırken Türkçe karakter uyuşmazlıklarını ve sistem veri çakışmalarını önlemek için şu betikler kullanılmalıdır:
Windows (PowerShell/CMD):
python -Xutf8 manage.py dumpdata --exclude contenttypes --exclude auth.Permission --format json --indent 4 -o database_backup.jsonLinux / Mac:
python manage.py dumpdata --exclude contenttypes --exclude auth.Permission --indent 4 -o database_backup.jsonVeriyi İçe Aktarma (Geri Yükleme):
python manage.py loaddata database_backup.jsonEğer hedef veritabanı oluşturulduktan sonra (ve geri yükleme öncesinde) yapılan veri girişleri nedeniyle bu adımda çakışma/hata alırsanız, önce veritabanını temizleyip ardından tekrar deneyin:
# Dikkat: Bu komut veritabanındaki tüm verileri siler, ancak tablo yapılarını (schema) korur.
python manage.py flushUygulama canlıya alınırken settings.py içinde DEBUG = False set edilmeli ve dış dünyaya asla Django'nun çekirdek runserver motoruyla açılmamalıdır.
❗ Yerelde test için runserver kullanımı
python manage.py runserver 0.0.0.0:8000python manage.py runserver 0.0.0.0:8000 --insecure✨ Adım 1: Statik Dosyaları Derleyin
python manage.py collectstatic --noinput✨ Adım 2: Gunicorn/Waitress Sunucusunu Başlatın
Dış API (Yahoo Finance, TCMB) isteklerindeki olası gecikmeler ve kilitlenmelerin (Worker Timeout) önüne geçmek amacıyla eş zamanlı işçiler ve arttırılmış zaman aşımı süresi (
gunicorn core.wsgi:application --bind 0.0.0.0:8000gunicorn core.wsgi:application --bind 0.0.0.0:8000 --workers 3 --timeout 90Gunicorn varsayılan olarak çok uzun URL ve istek başlıklarına izin vermez. Gunicorn'u başlatırken şu parametreleri ekleyin:
gunicorn core.wsgi:application --bind 0.0.0.0:8000 --workers 3 --timeout 90 --limit-request-line 8190 --limit-request-fields 10000waitress-serve --port=8000 core.wsgi:applicationwaitress-serve --port=8000 --threads=16 --connection-limit=200 core.wsgi:applicationPOST isteğinin oluşturacağı veri yükünü artırmak için (1 MB limit) ekleyin:
waitress-serve --port=8000 --threads=16 --connection-limit=200 --max-request-header-size=1048576 core.wsgi:application