Teknik Analiz Dünyasına Hoşgeldiniz. Paylaşmak Güzeldir.

Yayından kaldırmak istediğiniz formüller için algoritmabul@gmail.com ile iletişime geçebilirsiniz... 

  • DİKKAT: Formüller, Sistemler sadece eğitim amaçlıdır. Alım satım, olası anapara kaybı ve diğer kayıplar dahil olmak üzere "YÜKSEK RİSK" içerir.

Makine Öğrenimi - Python Monte Carlo

Machine Learning Algorithms - Makine Öğrenimi Algoritmaları BORSA

algoritma

eiπ + 1 = 0
Algorithmist
Algoritma
Katılım
23 Eki 2020
Mesajlar
1,806
Monte Carlo Yöntemi Nedir?

Monte Carlo yöntemi, rastgelelik ve istatistiksel denemelerin birleştirildiği, tahminler ve sonuçların elde edilmesi için kullanılan bir hesaplama tekniğidir. Bu yöntem, belirsizlik içeren sorunları ve karmaşık matematiksel problemleri çözmek için güçlü bir araçtır. İsmini Monte Carlo kumarhanelerinin şans eseri sonuçların hesaplandığı yerlerden almıştır.

Nasıl Çalışır?

Monte Carlo yöntemi, rastgele sayılar üreterek veya rastgele süreçlerle sistematik bir şekilde çok sayıda deneme yaparak sonuçlar elde eder. Bu denemeler, olasılık teorisi ve istatistik prensiplerine dayanarak gerçek dünya problemlerini modellemek için kullanılır.

1. Yalın halde Kullanımı
2. Lineer-Cholesky Kullanımı
3. Cholesky kullanımı
 
Son düzenleme:

algoritma

eiπ + 1 = 0
Algorithmist
Algoritma
Katılım
23 Eki 2020
Mesajlar
1,806
1. Monte Carlo Yalın halde kullanımı
Kod:
import os
import pandas as pd
import numpy as np

# "XU100" dizini içindeki tüm ".csv" dosyalarını alın
csv_dizin = 'XU100'
dosya_listesi = os.listdir(csv_dizin)
csv_dosyaları = [dosya for dosya in dosya_listesi if dosya.lower().endswith('.csv')]

results = []

for csv_dosya in csv_dosyaları:
    # Her bir CSV dosyasını yükleyin
    veri = pd.read_csv(os.path.join(csv_dizin, csv_dosya))

    # Fiyat değişimlerini hesapla
    veri['PriceChange'] = veri['Close'].pct_change()
    veri = veri.dropna()

    mean = np.mean(veri['PriceChange'])
    std_dev = np.std(veri['PriceChange'])

    simulations = 200  # Tavsiye edilen 200 olmalıdır, arttıkça tahmin olasılığı artar
    days_to_sim = 252

    close_end = []
    above_close = []

    for i in range(simulations):
        close_price = veri.iloc[-1]['Close']
        price_path = [close_price]
        for j in range(days_to_sim):
            perc_change = np.random.normal(mean, std_dev)
            close_price *= (1 + perc_change)
            price_path.append(close_price)

        if close_price > veri.iloc[-1]['Close']:
            above_close.append(1)
        else:
            above_close.append(0)

        close_end.append(price_path)

    probability_of_increase = sum(above_close) / simulations * 100

    results.append({
        'Dosya': csv_dosya,
        'Yükselme Olasılığı (%)': probability_of_increase
    })

# Sonuçları bir dosyaya yazdırın
results = [{'Hisse Adı': csv_dosya, 'Yükselme Olasılığı (%)': probability_of_increase} for csv_dosya, probability_of_increase in zip(csv_dosyaları, [result['Yükselme Olasılığı (%)'] for result in results])]

# Sonuçları bir Excel dosyasına kaydedin
results_df = pd.DataFrame(results)
results_df.to_excel('monte_carlo_Yalın.xlsx', index=False)

Bilgisayarınıza monte_carlo_Yalın.xlsx adında bir dosya kaydeder.
monte-carlo-1.jpg
 

algoritma

eiπ + 1 = 0
Algorithmist
Algoritma
Katılım
23 Eki 2020
Mesajlar
1,806
2. Monte Carlo Lineer- Cholesky Kullanımı
Kod:
import os
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# prepare_data fonksiyonunu tanımlayın
def prepare_data(data, steps):
    X, y = [], []
    for i in range(len(data) - steps):
        X.append(data[i:i+steps, 0])  # Sadece kapanış fiyatını almak için [0] ekledik
        y.append(data[i+steps, 0])     # Sadece kapanış fiyatını almak için [0] ekledik
    return np.array(X), np.array(y)

# "XU100" dizini içindeki tüm ".csv" dosyalarını alın
csv_dizin = 'XU100'
dosya_listesi = os.listdir(csv_dizin)
csv_dosyaları = [dosya for dosya in dosya_listesi if dosya.lower().endswith('.csv')]

# Sonuçları saklamak için boş bir liste oluşturun
results = []

# Her bir CSV dosyası için işlemleri gerçekleştirin
for csv_dosya in csv_dosyaları:
    # Her bir CSV dosyasını yükleyin
    veri = pd.read_csv(os.path.join(csv_dizin, csv_dosya))

    # Korelasyon matrisini hesaplayın
    corr_matrix = veri[['Close', 'Adj Close']].pct_change().corr()

    # Cholesky faktörizasyonu ile Cholesky matrisini hesaplayın
    cov_matrix = veri[['Close', 'Adj Close']].pct_change().cov()
    try:
        L = np.linalg.cholesky(cov_matrix)
    except np.linalg.LinAlgError:
        print(f"Matris pozitif belirli değil - {csv_dosya}")
        continue

    # Veriyi işlemek ve özellikleri (X) ve hedef (y) değişkenlerini oluşturmak için prepare_data fonksiyonunu kullanın
    X, y = prepare_data(veri[['Close']].values, steps=10)  # Örnek olarak, adımları 10 olarak belirledik

    # Veriyi eğitim ve test verilerine ayırın
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

    # Modeli oluşturun ve eğitin (Örnek olarak, bir lineer regresyon modeli kullanıldı)
    model = LinearRegression()
    model.fit(X_train, y_train)

    # Test verileri üzerinde tahmin yapın
    y_pred = model.predict(X_test)

    # Tahmin başarısını değerlendirin (örneğin, ortalama karesel hata)
    mse = mean_squared_error(y_test, y_pred)

    # Sonuçları listeye ekleyin
    results.append({
        'Hisse Adı': csv_dosya,
        'Yükselme Olasılığı (%)': mse * 100  # MSE'yi yüzde olarak göstermek için 100 ile çarpın
    })

# Sonuçları bir Excel dosyasına kaydedin
results_df = pd.DataFrame(results)
results_df.to_excel('Monte-carlo-lineer-cholesky.xlsx', index=False)
bilgsayarınıza Monte-carlo-lineer-cholesky.xlsx dosyasını kaydeder
monte-carlo-2.jpg

terminalde ise çıktı verir
cholesky.jpg

bu şu demek matris pozitif olmadığı için analiz dışına itildi.
 

algoritma

eiπ + 1 = 0
Algorithmist
Algoritma
Katılım
23 Eki 2020
Mesajlar
1,806
3. Cholesky kullanımı
Kod:
import os
import numpy as np
import pandas as pd

# "XU100" dizini içindeki tüm ".csv" dosyalarını alın
csv_dizin = 'XU100'
dosya_listesi = os.listdir(csv_dizin)
csv_dosyaları = [dosya for dosya in dosya_listesi if dosya.lower().endswith('.csv')]

# Ortalama yükselme olasılıklarını saklamak için boş bir liste oluşturun
average_rise_probabilities = []

# Monte Carlo simülasyonu için parametreleri belirleyin
num_simulations = 1000  # Simülasyon sayısı
num_days = 10  # Günlük veri sayısı

# Her bir CSV dosyası için işlemleri gerçekleştirin
for csv_dosya in csv_dosyaları:
    # Her bir CSV dosyasını yükleyin
    veri = pd.read_csv(os.path.join(csv_dizin, csv_dosya))

    # Verilerin başlangıç fiyatını belirleyin
    initial_prices = veri['Close'].iloc[-1]

    try:
        # Cholesky faktörizasyonu ile kovaryans matrisini hesaplayın
        cov_matrix = veri[['Close', 'Adj Close']].pct_change().cov()
        L = np.linalg.cholesky(cov_matrix)

        # Simülasyon sonuçlarını saklamak için boş bir dizi oluşturun
        price_simulations = np.zeros((num_simulations, num_days))

        # Monte Carlo simülasyonunu yapın
        for i in range(num_simulations):
            simulated_returns = np.random.randn(num_days)  # Rastgele getiri verileri oluşturun
            price_simulations[i, 0] = initial_prices
            for day in range(1, num_days):
                price_simulations[i, day] = price_simulations[i, day - 1] * (1 + simulated_returns[day])

        # Yükselme olasılığını hesaplayın
        rise_threshold = 0.01  # Örnek bir eşik değer, yükseliş olarak kabul edilecek getiri yüzdesi
        initial_price = price_simulations[0, 0]
        rise_probabilities = np.mean(price_simulations > (1 + rise_threshold) * initial_price, axis=0)

        # Ortalama yükselme olasılığını hesaplayın ve listeye ekleyin
        average_rise_probability = np.mean(rise_probabilities) * 100
        average_rise_probabilities.append({
            'Dosya': csv_dosya,
            'Ortalama Yükselme Olasılığı (%)': average_rise_probability
        })
    except np.linalg.LinAlgError:
        print(f"Matris pozitif belirli değil - {csv_dosya}. Bir sonraki dosyaya geçiliyor.")
        continue

# Ortalama yükselme olasılıklarını bir Excel dosyasına kaydedin
average_rise_probabilities_df = pd.DataFrame(average_rise_probabilities)
average_rise_probabilities_df.to_excel('Monte-carlo-cholesk-hepsi.xlsx', index=False)
bilgisayarınıza Monte-carlo-cholesk-hepsi.xlsx dosyasını kaydeder
monte-carlo-3.jpg


Diğer kullanım şekli ise hisseleri tek tek ayırıp yaptığı deneme sonuçları kod şöyle
Kod:
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# "XU100" dizini içindeki tüm ".csv" dosyalarını alın
csv_dizin = 'XU100'
dosya_listesi = os.listdir(csv_dizin)
csv_dosyaları = [dosya for dosya in dosya_listesi if dosya.lower().endswith('.csv')]

# Sonuçları saklamak için boş bir liste oluşturun
results = []

# Monte Carlo simülasyonu için parametreleri belirleyin
num_simulations = 1000  # Simülasyon sayısı
num_days = 10  # Günlük veri sayısı

# Her bir CSV dosyası için işlemleri gerçekleştirin
for csv_dosya in csv_dosyaları:
    # Her bir CSV dosyasını yükleyin
    veri = pd.read_csv(os.path.join(csv_dizin, csv_dosya))

    # Verilerin başlangıç fiyatını belirleyin
    initial_prices = veri['Close'].iloc[-1]

    try:
        # Cholesky faktörizasyonu ile kovaryans matrisini hesaplayın
        cov_matrix = veri[['Close', 'Adj Close']].pct_change().cov()
        L = np.linalg.cholesky(cov_matrix)

        # Simülasyon sonuçlarını saklamak için boş bir dizi oluşturun
        price_simulations = np.zeros((num_simulations, num_days))

        # Monte Carlo simülasyonunu yapın
        for i in range(num_simulations):
            simulated_returns = np.random.randn(num_days)  # Rastgele getiri verileri oluşturun
            price_simulations[i, 0] = initial_prices
            for day in range(1, num_days):
                price_simulations[i, day] = price_simulations[i, day - 1] * (1 + simulated_returns[day])

        # Yükselme olasılığını hesaplayın
        rise_threshold = 0.01  # Örnek bir eşik değer, yükseliş olarak kabul edilecek getiri yüzdesi
        initial_price = price_simulations[0, 0]
        rise_probabilities = np.mean(price_simulations > (1 + rise_threshold) * initial_price, axis=0)

        # Sonuçları listeye ekleyin
        results.append({
            'Dosya': csv_dosya,
            'Yükselme Olasılıkları (%)': rise_probabilities * 100
        })
    except np.linalg.LinAlgError:
        print(f"Matris pozitif belirli değil - {csv_dosya}. Bir sonraki dosyaya geçiliyor.")
        continue

# Sonuçları bir Excel dosyasına kaydedin
with pd.ExcelWriter('monte_carlo_hisseler-tek-tek.xlsx') as writer:
    for result in results:
        dosya_adi = result['Dosya']
        yukselme_olasiliklari = result['Yükselme Olasılıkları (%)']
        df = pd.DataFrame({'Dosya': dosya_adi, 'Yükselme Olasılıkları (%)': yukselme_olasiliklari})
        df.to_excel(writer, sheet_name=dosya_adi, index=False)
bilgisayarınıza monte_carlo_hisseler-tek-tek.xlsx dosyasını kaydeder
monte-carlo-4.jpg

yine terminalde Matris pozitif belirli değil olanları analize dahil etmez
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap