⚠ Trading önemli ölçüde zarar riski içerir. Bu sitedeki her şey yalnızca eğitim amaçlıdır ve finansal tavsiye değildir.
Ders 2 / 13 · Ücretsiz

Tek Oturumda Finans için Python'un Temelleri: Veri Türleri, Listeler, Sözlükler, Döngüler, Fonksiyonlar ve Hata Mesajları

Bir trader'ın ihtiyaç duyduğu asgari temel Python bilgisini öğrenin: sayılar, metinler, listeler, sözlükler, döngüler, fonksiyonlar ve bir traceback'in (hata izi) nasıl okunacağı.

Yazar: Moustafa Hijaziİçerik gözden geçirildi: 2026-10-305 dk okumaKendi kendine öğrenme kursu

Neler öğreneceksiniz

  • Fiyat verisinde karşılaşacağınız veri türleri: int, float, str, bool, None ve datetime.
  • Listelerin ve sözlüklerin bir işlem listesini nasıl sakladığı ve bir for döngüsünün onu nasıl işlediği.
  • Docstring ve varsayılan argüman içeren bir fonksiyonun nasıl yazılacağı ve fonksiyonların geriye dönük testleri neden test edilebilir kıldığı.
  • Bir Python traceback'inin aşağıdan yukarıya nasıl okunacağı ve en sık görülen beş hatanın nasıl düzeltileceği.

Açıklama

Türler. Python'daki her değerin bir türü vardır. 42 bir int (tam sayı), 42.5 bir float (ikili sistemde saklanan ondalık sayı), "AAPL" bir str (metin), True bir bool'dur; None ise "değer yok" anlamına gelir. Float değerler yaklaşıktır (0.1 + 0.2 ifadesi 0.30000000000000004 yazdırır), bu yüzden onları asla == ile karşılaştırmayın; round() ya da bir tolerans kullanın. Tarihler için pandas zaman damgalarını kullanın (3. ders).

Listeler, köşeli parantezle yazılan sıralı koleksiyonlardır: closes = [100.0, 102.0, 101.5]. İndeksleme sıfırdan başlar (closes[0] 100.0'dır), negatif indeksler sondan sayar (closes[-1] en son kapanıştır) ve dilimleme closes[1:3] 1 ve 2 numaralı öğeleri döndürür, 3'ü döndürmez. Aynı "bitiş hariç" kuralı pandas iloc için de geçerlidir.

Sözlükler anahtarları değerlere eşler: trade = {"symbol": "AAA", "entry": 50.0, "qty": 100}. Erişim trade["entry"] ile yapılır; eksik bir anahtar KeyError hatası verir, trade.get("fee", 0.0) ise bir varsayılan değer döndürür.

Döngüler ve koşullar. Bir for döngüsü her öğeyi sırayla ziyaret eder: for t in trades: ve ardından girintili bir blok. Bloğu girinti (dört boşluk) belirler. if, elif ve else koşullara göre dallanır; karşılaştırma operatörleri ==, !=, <, >='dir.

Fonksiyonlar, mantığı yeniden kullanılabilir ve test edilebilir olacak şekilde paketler. def anahtar kelimesi bir tanımı başlatır, parametreler parantez içine yazılır ve return bir değer geri gönderir:

def r_multiple(entry, exit_price, stop, side="long"):

'''Kârı başlangıç riski (R) birimiyle döndürür.'''

risk = abs(entry - stop)

pnl = exit_price - entry if side == "long" else entry - exit_price

return pnl / risk

Üç tırnakla yazılan metin bir docstring'dir (belgeleme) ve side="long" varsayılan bir argümandır. Fonksiyonları küçük tutun, girdileri konusunda açık olun ve yan etkilerden arındırın; 9. derste birim testi yazmayı mümkün kılan budur.

Hataları okumak. Bir şey başarısız olduğunda Python bir traceback (hata izi) yazdırır. Önce son satırı okuyun: hata türünü ve mesajını belirtir. Ardından hemen üstündeki satıra bakın; hatanın kodunuzun neresinde oluştuğunu gösterir. En sık görülen hatalar: NameError (bir değişkeni tanımlamadan önce kullandınız; çoğu zaman bir not defteri hücresi çalıştırılmadığı için); TypeError (örneğin CSV dosyasından gelen bir metni bir sayıya eklemek; float() ile düzeltin); KeyError (bir sütun veya sözlük anahtarı farklı yazılmış; boşlukları ve büyük harfleri kontrol edin); IndexError (10 öğeli bir listenin 10 numaralı öğesini istediniz; indekslemenin sıfırdan başladığını unutmayın); ve ZeroDivisionError (girişe eşit bir stop sıfır risk verir).

Çözümlü örnek

Varsayımsal örnek: tamamı euro cinsinden kapatılmış üç long işlem; komisyonlar ve vergiler dikkate alınmamıştır.

trades = [

{"symbol": "AAA", "entry": 50.0, "exit": 53.0, "stop": 48.0, "qty": 100},

{"symbol": "BBB", "entry": 20.0, "exit": 19.0, "stop": 19.0, "qty": 250},

{"symbol": "CCC", "entry": 80.0, "exit": 78.0, "stop": 76.0, "qty": 60},

]

total = 0.0

for t in trades:

pnl = (t["exit"] - t["entry"]) * t["qty"]

r = r_multiple(t["entry"], t["exit"], t["stop"])

total += pnl

print(t["symbol"], pnl, round(r, 2))

print("Toplam:", total)

AAA kârı = (53 − 50) × 100 = €300; hisse başına risk €2, dolayısıyla R = 3 ÷ 2 = 1.5. BBB = (19 − 20) × 250 = −€250; hisse başına risk €1, R = −1.0 (tam stop seviyesinden çıkış). CCC = (78 − 80) × 60 = −€120; risk €4, R = −0.5. Toplam = 300 − 250 − 120 = −€70. Çıktı satırları: AAA 300.0 1.5, BBB -250.0 -1.0, CCC -120.0 -0.5, Toplam: -70.0.

total += pnl, total = total + pnl ifadesinin kısaltmasıdır. Üç işlem bir yöntem hakkında hiçbir şey söylemez; buradaki amaç mekaniği göstermektir.

Sık yapılan hata

Not defteri hücrelerini sırasız çalıştırmakNot defterleri hücreleri herhangi bir sırayla çalıştırabilir. trades listesini düzenleyip yalnızca döngü hücresini yeniden çalıştırırsanız, eskimiş bir değer fark edilmeden sonuca karışır; çekirdeği (kernel) yeniden başlattıktan sonra ise bunun yerine NameError alırsınız. Herhangi bir sayıya güvenmeden önce "Restart kernel and run all cells" (çekirdeği yeniden başlat ve tüm hücreleri çalıştır) komutunu kullanın ve not defterinin baştan sona hatasız çalıştığından emin olun.

Uygulama etkinliği

Kâğıt üzerinde, tam hisse adedini (aşağı yuvarlayarak) döndüren ve stop girişe eşitse açık bir ValueError veren bir position_size(account, risk_pct, entry, stop) fonksiyonu yazın. Ardından hesap €8,000, risk 1.25%, giriş €32.50, stop €30.00 için sonucu yazın. Son olarak, fonksiyonu entry="32.50" (bir metin) ile çağırıp dönüştürmediğinizde Python'un hangi hata türünü vereceğini belirtin.

Çözümü göster

def position_size(account, risk_pct, entry, stop):

per_share = abs(entry - stop)

if per_share == 0:

raise ValueError("stop girişten farklı olmalıdır")

return int(account * risk_pct // per_share)

Sayılar: risk bütçesi = 8,000 × 0.0125 = €100; hisse başına risk = 32.50 − 30.00 = €2.50; 100 ÷ 2.50 = tam olarak 40 hisse, dolayısıyla fonksiyon 40 döndürür (planlanan risk €100, pozisyon değeri €1,300).

entry="32.50" ile "32.50" - 30.0 ifadesi TypeError: unsupported operand type(s) for -: 'str' and 'float' hatasını verir. float(entry) ile dönüştürün.

Sınırlamalar: fonksiyon asgari lot büyüklüklerini, komisyonları ve bir fiyat boşluğunun planlanan €100'dan fazla kaybettirebileceği gerçeğini göz ardı eder.

Önemli çıkarımlar

  • Float değerler yaklaşıktır, indeksleme sıfırdan başlar ve dilimler bitişi hariç tutar; bu üç gerçek, yeni başlayanların hatalarının çoğunu önler.
  • Sözlüklerden oluşan bir liste, pandas'tan önce işlemler için doğal yapıdır; döngüler onu işler, fonksiyonlar ona yeniden kullanılabilir mantık kazandırır.
  • Docstring içeren küçük, saf fonksiyonlar yazın; bunlar 9. derste test edeceğiniz birimlerdir.
  • Traceback'leri aşağıdan yukarıya okuyun ve bir not defteri sonucuna güvenmeden önce çekirdeği yeniden başlatıp tüm hücreleri çalıştırın.

Sonraki adım

3. ders pandas'ı tanıtıyor: Series, DataFrame, DatetimeIndex, satırları seçme ve filtreleme ve resample ile günlük çubukları haftalık çubuklara dönüştürme.

Öz değerlendirme

Soruları yanıtlayın, ardından yanıtlarınızı kontrol edin. İstediğiniz kadar tekrar deneyebilirsiniz.

1. closes = [100.0, 102.0, 101.5, 103.0] verildiğinde closes[1:3] ne döndürür?

2. Bir işlem listesi üzerindeki döngü KeyError: 'Exit' hatasıyla çöküyor. En olası neden ve çözüm hangisidir?

3. Dersteki r_multiple fonksiyonunu bir short işlem için kullanırsak: giriş €40.00, stop €42.00, çıkış €35.00. Fonksiyon ne döndürür?

Kendi tekrarınız için otomatik öz değerlendirme. Cevaplarınız tarayıcınızda kontrol edilir; bunları görmez ve değerlendirmeyiz. Bu bir sınav veya yeterlilik değildir.

İlerlemeniz

“Tamamlandı” yalnızca dersi bitirdiğinizi işaretlediğiniz anlamına gelir. Anlayışınızın bir sınavı değildir. İlerleme ve notlar yalnızca bu cihazdaki bu tarayıcıda saklanır — bir hesapta değil.