Mniellodam
Profilo di
Nome | Mniellodam |
---|---|
Indirizzo email | n/a |
Messaggi | 1 |
-
- 2024-10-24 16:22:32
- E' un modello che girerebbe??????
- Forum >> Principianti
- 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