Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #%%
- from sklearn import cluster, covariance, manifold
- import yfinance as yf
- import pandas as pd
- import numpy as np
- from sklearn import metrics
- # List of tickers
- cfdtickers = [
- 'AUDNZD=X', 'AUDCAD=X', 'AUDCHF=X', 'AUDJPY=X', 'CHFJPY=X',
- 'EURGBP=X', 'EURAUD=X', 'EURJPY=X', 'EURCHF=X', 'EURNZD=X',
- 'EURCAD=X', 'GBPCHF=X', 'GBPJPY=X', 'CADCHF=X', 'CADJPY=X',
- 'GBPAUD=X', 'GBPCAD=X', 'GBPNZD=X', 'NZDCAD=X', 'NZDCHF=X',
- 'NZDJPY=X', 'NZDUSD=X', 'USDSGD=X', 'EURUSD=X',
- ]
- # Downloading data for each ticker and extracting the 'Close' column
- data = {ticker: yf.download(ticker, start="2023-01-01", end="2024-01-01")['Close'] for ticker in cfdtickers}
- # Creating a DataFrame from the downloaded data
- df = pd.DataFrame(data)
- df= df.pct_change()
- df=df.ffill()
- df=df.bfill()
- pct_change_combined_stock_df = df
- pct_change_combined_stock_df = pct_change_combined_stock_df.dropna()
- variation = pct_change_combined_stock_df
- edge_model = covariance.GraphicalLassoCV(verbose=True)
- X = variation.copy()
- X /= X.std(axis=0)
- edge_model.fit(X)
- _, labels = cluster.affinity_propagation(edge_model.covariance_)
- n_labels = labels.max()
- names=[]
- for stock in pct_change_combined_stock_df.columns.tolist():
- names.append(stock)
- names = np.array(names)
- sectorTickers = {f'Cluster {i+1}': ', '.join(names[labels == i]) for i in range(n_labels + 1)}
- print("sectorTickers",sectorTickers)
- # Calculate silhouette score
- silhouette_score = metrics.silhouette_score(X, labels)
- print("Silhouette Score:", silhouette_score)
- # %%
Advertisement
Add Comment
Please, Sign In to add comment