Forum
>>
Principianti
>>
E' un modello che girerebbe??????
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Mniellodam |
2024-10-24 16:22:32 - E' un modello che girerebbe??????
|
ragazzi sono un laureando magistrale e come tesi dovrei implementare un modello di gestione di un portafoglio azionari con titioli da me scelti, mediante l'utilizzo di Python
nvidia coca cola tesla eni meta pltaform brunello cucinelli Ora essendo io completamente ebete ed inesperto, provado a smanettare con python ho tirato giù qualche stringa di codice (grazie anche ai vari video tutorial). import yfinance as yf import numpy as np import pandas as pd import matplotlib.pyplot as plt # Lista di ticker azionari tickers = ['AAPL', 'MSFT', 'GOOGL', 'AMZN', 'TSLA'] # Scarica i dati dei prezzi storici (5 anni di dati) data = yf.download(tickers, start="2019-01-01", end="2024-01-01")['Adj Close'] # Calcolo dei rendimenti giornalieri returns = data.pct_change().dropna() # Numero di azioni nel portafoglio num_assets = len(tickers) # Numero di portafogli da simulare num_portfolios = 10000 # Array per memorizzare risultati results = np.zeros((3, num_portfolios)) weights_record = [] # Simulazione dei portafogli for i in range(num_portfolios): # Generazione di pesi casuali weights = np.random.random(num_assets) weights /= np.sum(weights) # Normalizzazione: la somma dei pesi è 1 weights_record.append(weights) # Calcolo rendimento atteso e volatilità (std) del portafoglio portfolio_return = np.sum(weights * returns.mean()) * 252 # Annualizzato portfolio_volatility = np.sqrt(np.dot(weights.T, np.dot(returns.cov() * 252, weights))) # Annualizzato # Sharpe Ratio (considerando un tasso privo di rischio pari a 0) sharpe_ratio = portfolio_return / portfolio_volatility # Memorizza rendimento, volatilità e Sharpe ratio results[0,i] = portfolio_return results[1,i] = portfolio_volatility results[2,i] = sharpe_ratio # Trovare il portafoglio con il più alto Sharpe Ratio max_sharpe_idx = np.argmax(results2) best_weights = weights_recordmax sharpe idx # Trovare il portafoglio con la minore volatilità min_volatility_idx = np.argmin(results1) # Plotting dei risultati plt.scatter(results[1,:], results[0,:], c=results[2,:], cmap='YlGnBu', marker='o') plt.colorbar(label='Sharpe Ratio') plt.scatter(results[1, max_sharpe_idx], results[0, max_sharpe_idx], marker='*', color='r', s=500, label='Miglior Sharpe Ratio') plt.scatter(results[1, min_volatility_idx], results[0, min_volatility_idx], marker='*', color='g', s=500, label='Minima Volatilità') plt.title('Simulazione di Portafogli') plt.xlabel('Volatilità') plt.ylabel('Rendimento Atteso') plt.legend() plt.show() # Stampa dei risultati print("Portafoglio con miglior Sharpe Ratio:") print(f"Rendimento atteso: {results[0, max_sharpe_idx]:.2f}") print(f"Volatilità: {results[1, max_sharpe_idx]:.2f}") print(f"Pesi: {best_weights}") questo è più o meno il risultato, qualche buon anima e innovatore del nostro mondo può aiutare un uomo in pena con qualche dritta e consiglio? l' obiettivo oltre è valutare la performance in un arco temporale indicativo di 6 mesi da maggio ad oggi. vi amooo |
|
Scritto da Daniele aka Palmux |
2024-11-16 11:58:31 - Re: E' un modello che girerebbe??????
|
Ciao caro, dopo un'aggiustatina qua e la al codice e una razionalizzazione dei metodi (per mia comodità lo ammetto), si ottengono questi risultati:
Portafoglio con miglior Sharpe Ratio: Rendimento atteso: 0.46 Volatilità: 0.17 Pesi: NVDA: 0.49% KO: 48.86% TSLA: 10.83% ENI.MI: 18.15% META: 17.77% BC.MI: 3.90% Portafoglio con minima volatilità: Rendimento atteso: 0.08 Volatilità: 0.12 Pesi: NVDA: 9.41% KO: 33.57% TSLA: 52.92% ENI.MI: 1.35% META: 0.88% BC.MI: 1.87% Trovi qui il codice Cya |
Pagina: 1
Esegui il login per scrivere una risposta.