Bu soruda yardımcı olabilir misiniz?

2019 yılındaki bir ayın Dolar kurunu bir diziye atınız. (Bunu cevapta belirtiniz. Gerçek veriler kullanınız.** https://evds2.tcmb.gov.tr/index.php?/evds/serieMarket/#collapse_2 **) Bu ay daki en düşük değerden 10000 TL kadar parası olan kişi, kaçıncı gün dolar alıp, kaçıncı gün dolar satarsa en yüksek karı elde eder, karı ne kadar olur? (Dikkat: dolar almadan satamaz)

Yardimci olabiliriz, evet. Nasil yardimci olacagiz?

Yani nerede takıldınız, kod nerede?

çözüme dair hiçbir fikrim yok ve çok acil yaptırmam gerekli ücretli veya ücretsiz yapabilecek birini arıyorum

Şöyle bir yol izledim: paylaştığınız siteden 2019 senesine ait günlük dolar alış-satış verilerini içeren excel dosyasını indirdim.

Daha sonra inen dosyayı kendi içinde aylara göre gruplandırdım. Ve her ay için hangi gün dolar alınır ve hangi gün satılırsa maksimum kazanç elde edileceğini hesaplamaya çalıştım:

Kodlar şöyle:

import pandas as pd

from datetime import datetime as dt

df = pd.read_excel("EVDS.xlsx")

# NaN değerleri içeren satırları temizler.
df = df.dropna()

# Satırlara yeni bir satır numarası verir. 
df.index = range(1, len(df) + 1)

# İşimize yaramayacak olan satırları atar.
df = df[:249]

# Her aydaki günlük dolar alış ve satış rakamlarını bir sözlükte
# tutacağız. Ay numaraları sözlüğün anahtarı olacak. Ve bu anahtarın
# değeri ise gün, alış ve satış değerlerini içeren listeler olacak. 
dates = {}
for i in df.values:
    # month isimli değişken anahtar olacak.
    month = dt.strptime(i[0], "%d-%m-%Y").month
    # values isimli değişken ise ilgili anahtarın değerlerinden
    # birisi olacak.
    values = [i[0]] + [*map(float, i[1:])]
    # Eğer sözlükte bu anahtar yoksa
    if not month in dates:
        # Sözlüğe yeni anahtar ekler ve değerleri bir liste 
        # içerisine alır.
        dates[month] = [values]
    # Eğer sözlükte bu anahtar varsa
    else:
        # Anahtarın değeri olan listeye yeni değerler eklenir.
        dates[month].append(values)

# Sonuçları bu listede tutacağız.
sonuclar = {}
# Her bir anahtar ay ve değerleri için:
for k, v in dates.items():
    # Sonuclar sözlüğüne ayı anahtar olarak ekleyeceğiz. Bu anahtarın
    # değeri bir demet verisi olacak. Demet verisinin ilk değeri,
    # dolar alış tarihi; ikinci değeri, dolar satış tarihi ve üçüncü
    # değeri ise alış ve satış arasındaki fark olacak. Yalnız burada
    # satış tarihi, alış tarihinden büyük olduğu müddetçe diye bir
    # koşul da tanımlandı.
    sonuclar[k] = [
        (i[0], j[0], j[1] - i[2])
        for i in v for j in v
        if j[0] > i[0]
    ]
    # Aşağıdaki print ifadesi satış ile alış arasındaki farkın en çok
    # olduğu değeri her ay için ekrana yazdırır.
    print(
        list(
            filter(
                lambda m: m[2] == max(i[2] for i in sonuclar[k]), 
                sonuclar[k]
            )
        )
    )

Sonuçlar da şöyle:

[('02-01-2019', '15-01-2019', 0.23930000000000007)]
[('04-02-2019', '25-02-2019', 0.1318999999999999)]
[('01-03-2019', '26-03-2019', 0.3381999999999996)]
[('03-04-2019', '30-04-2019', 0.38200000000000056)]
[('02-05-2019', '10-05-2019', 0.2575000000000003)]
[('12-06-2019', '17-06-2019', 0.11410000000000053)]
[('05-07-2019', '11-07-2019', 0.15510000000000002)]
[('09-08-2019', '28-08-2019', 0.3617999999999997)]
[('05-09-2019', '12-09-2019', 0.11589999999999989)]
[('01-10-2019', '15-10-2019', 0.27719999999999967)]
[('05-11-2019', '12-11-2019', 0.09759999999999991)]
[('05-12-2019', '31-12-2019', 0.2149000000000001)]

Yani ilk ay için dolar 2’sinde alınıp, 15’inde satılırsa en çok kar bu aralıkta elde edilecektir. Demet verisi içindeki son değer ise alış ile satış arasındaki farkı gösteriyor.

programa kodu girdiğimde hata veriyor , bunu tek bir ay için nasıl yapabiliriz peki

Hata ne peki?

Yukarıda paylaştığım excel dosyasına göre kodları yazdım ve hata vermiyor. Siz bu excel dosyasını indirip, kodları değiştirmeden kopyalayıp çalıştırırsanız hata almazsınız. Ancak tabi ki pandas modülünün sisteminizde kurulu olması gerekir. Ayrıca Python betik dosyası ile excel dosyasının da aynı dizinde olması gerekiyor. Bu koşulları sağlarsanız hata almamanız gerekir.

1 Beğeni

Anladım,evet pandas bende kurulu olmadığından sanırım.Gerçekten çok çok teşekkürler yardımlarınız için.

Bir düzeltme yapmak lazım. Alış ile satışı karıştırmışım. Çıkarma işleminin j[2] - i[1] değil de j[1] - i[2] olması gerekiyor. Dolayısıyla sonuçlar şöyle olmalı:

[('02-01-2019', '15-01-2019', 0.21980000000000022)]
[('04-02-2019', '25-02-2019', 0.11299999999999955)]
[('01-03-2019', '26-03-2019', 0.3185000000000002)]
[('03-04-2019', '30-04-2019', 0.36129999999999995)]
[('02-05-2019', '10-05-2019', 0.23550000000000004)]
[('12-06-2019', '17-06-2019', 0.09309999999999974)]
[('05-07-2019', '11-07-2019', 0.13459999999999983)]
[('09-08-2019', '28-08-2019', 0.3414999999999999)]
[('05-09-2019', '12-09-2019', 0.09529999999999994)]
[('01-10-2019', '15-10-2019', 0.2564000000000002)]
[('05-11-2019', '12-11-2019', 0.07700000000000085)]
[('05-12-2019', '31-12-2019', 0.19390000000000018)]
1 Beğeni