Applicazioni pratiche di machine learning/Previsioni su azioni, criptovalute, derivati
AZIONI
[modifica | modifica sorgente]Installazione librerie
[modifica | modifica sorgente]In un notebook Jupyter scaricare se necessario le seguenti librerie tramite:
pip install pandas
pip install matplotlib
pip install yfinance
pip install prophet
Caricamento librerie
[modifica | modifica sorgente]import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from prophet import Prophet
Parte 1: Dati
[modifica | modifica sorgente]Collegarsi con Yahoo Finance da qui : https://it.finance.yahoo.com e cercare nell'apposita casella di ricerca l'azione TESLA. In corrispondenza del titolo dell'azione si legge : Tesla, Inc. (TSLA) quindi il simbolo dell'azione è TSLA . Scaricare i dati degli ultimi 5 anni di quote azionarie come pandas dataframe tramite la libreria yfinance passando il simbolo dell'azione. Si possono scaricare i dati per un periodo di tempo diverso, sostituendo il parametro period con uno dei seguenti valori:
1d: ultimo giorno 5d: ultimi 5 giorni 1mo: ultimo mese 3mo: ultimi 3 mesi 6mo: ultimi 6 mesi 1y: ultimo anno 2y: ultimi 2 anni 5y: ultimi 5 anni 10y: ultimi 10 anni ytd: da inizio anno a oggi max: tutti i dati disponibili
data = yf.download("TSLA", period='5Y')
data.tail()
Date Open High Low Close 2022-12-30 119.949997 124.480003 119.750000 123.180000 2023-01-03 118.470001 118.800003 104.639999 108.099998 2023-01-04 109.110001 114.589996 107.519997 113.639999 2023-01-05 110.510002 111.750000 107.160004 110.339996 2023-01-06 103.000000 114.389999 101.809998 113.059998
Le variabili che interessano per la previsione sono Date e Close, quindi si crea un dataframe con tali variabili da fornire alla libreria Prophet:
# initialize data of lists.
quote = {'ds': list(data.index),
'y': list(data["Close"])}
# Create DataFrame
df = pd.DataFrame(quote)
# Print the output.
df.head()
Parte 2: Previsioni
[modifica | modifica sorgente]Si prevedono le quote azionarie di TESLA per i successivi 365 giorni a partire dall'ultima data disponibile nei dati scaricati e si traccia il grafico. La linea blu rappresenta la previsione, l'area ombreggiata celeste rappresenta l'intervallo di confidenza previsionale all'80%, mentre la linea nera rappresenta i dati reali:
m = Prophet(daily_seasonality = True) # the Prophet class (model)
m.fit(df) # fit the model using all data
future = m.make_future_dataframe(periods=365) #we need to specify the number of days in future
prediction = m.predict(future)
m.plot(prediction)
plt.title("Prediction of the Tesla Stock Price using the Prophet")
plt.xlabel("Date")
plt.ylabel("Close Stock Price")
plt.show()
Si prevedono le quote azionarie nei successivi 20 giorni e si visualizza la tabella delle previsioni con yhat previsione alla data ds e [yhat_lower, yhat_upper] intervallo di confidenza all'80%:
future = m.make_future_dataframe(periods=20) #we need to specify the number of days in future
prediction = m.predict(future)
prediction[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(20)
ds yhat yhat_lower yhat_upper 4629 2023-01-07 135.237772 124.066947 147.274124 4630 2023-01-08 135.413466 123.708696 146.199598 4631 2023-01-09 135.864748 123.974760 146.670062 4632 2023-01-10 135.948641 125.184931 147.171731 4633 2023-01-11 136.173244 125.154799 148.297313 4634 2023-01-12 136.323332 125.202074 146.979928 4635 2023-01-13 136.418874 124.533623 148.434514 4636 2023-01-14 136.377036 126.042858 148.228069 4637 2023-01-15 136.514687 125.306550 147.593090 4638 2023-01-16 136.922638 125.965366 148.345261 4639 2023-01-17 136.958999 125.154397 148.167304 4640 2023-01-18 137.132998 125.917358 148.123067 4641 2023-01-19 137.230561 126.417526 148.524123 4642 2023-01-20 137.272794 125.928654 148.286496 4643 2023-01-21 137.177964 125.885137 148.997752 4644 2023-01-22 137.263975 125.649551 149.110246 4645 2023-01-23 137.622579 125.627036 148.529891 4646 2023-01-24 137.612720 126.122051 148.167514 4647 2023-01-25 137.744325 126.552612 148.780082 4648 2023-01-26 137.803880 127.165398 149.364249
CRIPTOVALUTE
[modifica | modifica sorgente]Installazione librerie
[modifica | modifica sorgente]In un notebook Jupyter scaricare le seguenti librerie tramite:
pip install pandas
pip install matplotlib
pip install ccxt
pip install prophet
Caricamento librerie
[modifica | modifica sorgente]import pandas as pd
import ccxt
import matplotlib.pyplot as plt
from prophet import Prophet
Parte 1: Dati
[modifica | modifica sorgente]La libreria ccxt può gestire vari mercati di scambio di criptovalute elencati di seguito ma in questa analisi si utilizzerà Binance:
print(ccxt.exchanges)
['alpaca', 'ascendex', 'bequant', 'bigone', 'binance', 'binancecoinm', 'binanceus', 'binanceusdm', 'bit2c', 'bitbank', 'bitbay', 'bitbns', 'bitcoincom', 'bitfinex', 'bitfinex2', 'bitflyer', 'bitforex', 'bitget', 'bithumb', 'bitmart', 'bitmex', 'bitopro', 'bitpanda', 'bitrue', 'bitso', 'bitstamp', 'bitstamp1', 'bittrex', 'bitvavo', 'bkex', 'bl3p', 'blockchaincom', 'btcalpha', 'btcbox', 'btcex', 'btcmarkets', 'btctradeua', 'btcturk', 'buda', 'bybit', 'cex', 'coinbase', 'coinbaseprime', 'coinbasepro', 'coincheck', 'coinex', 'coinfalcon', 'coinmate', 'coinone', 'coinspot', 'cryptocom', 'currencycom', 'delta', 'deribit', 'digifinex', 'exmo', 'flowbtc', 'fmfwio', 'gate', 'gateio', 'gemini', 'hitbtc', 'hitbtc3', 'hollaex', 'huobi', 'huobijp', 'huobipro', 'idex', 'independentreserve', 'indodax', 'itbit', 'kraken', 'kucoin', 'kucoinfutures', 'kuna', 'latoken', 'lbank', 'lbank2', 'luno', 'lykke', 'mercado', 'mexc', 'mexc3', 'ndax', 'novadax', 'oceanex', 'okcoin', 'okex', 'okex5', 'okx', 'paymium', 'phemex', 'poloniex', 'poloniexfutures', 'probit', 'ripio', 'stex', 'therock', 'tidex', 'timex', 'tokocrypto', 'upbit', 'wavesexchange', 'wazirx', 'whitebit', 'woo', 'yobit', 'zaif', 'zb', 'zipmex', 'zonda']
# creare un'istanza di Binance
exchange = ccxt.binance()
# impostare il simbolo del bitcoin/euro su Binance
symbol ='BTC/EUR'
# impostare il periodo di tempo desiderato cioè giornaliero
timeframe = '1d'
# scaricare i dati del prezzo del bitcoin
ohlcv = exchange.fetch_ohlcv(symbol, timeframe)
# convertire i dati in un DataFrame di pandas
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
# convertire la colonna timestamp in una colonna datetime
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
# visualizzare i dati
df.tail()
timestamp open high low close 495 2023-01-04 15803.30 16031.64 15771.00 15889.31 496 2023-01-05 15886.01 16034.95 15797.24 15993.84 497 2023-01-06 15993.84 16015.00 15809.07 15924.82 498 2023-01-07 15924.83 15954.45 15889.11 15917.02 499 2023-01-08 15916.00 15935.00 15888.88 15904.99
Le variabili che interessano per la previsione sono timestamp e close, quindi si crea un dataframe con tali variabili da fornire alla libreria Prophet:
data = df[["timestamp","close"]] # select Date and Price
# Rename the features: These names are NEEDED for the model fitting
data = data.rename(columns = {"timestamp":"ds","close":"y"}) #renaming the columns of the dataset
data.head()
Parte 2: Previsioni
[modifica | modifica sorgente]Si procede come nel caso delle azioni, prevedendo per i successivi 365 giorni a partire dall'ultima data disponibile nei dati scaricati il prezzo dei bitcoins e si traccia il grafico. La linea blu rappresenta la previsione, l'area ombreggiata celeste rappresenta l'intervallo di confidenza previsionale all'80%, mentre la linea nera rappresenta i dati reali:
m = Prophet(daily_seasonality = True) # the Prophet class (model)
m.fit(data) # fit the model using all data
future = m.make_future_dataframe(periods=365) #we need to specify the number of days in future
prediction = m.predict(future)
m.plot(prediction)
plt.title("Prediction of the Tesla Stock Price using the Prophet")
plt.xlabel("Date")
plt.ylabel("Close Stock Price")
plt.show()
Si prevede il prezzo dei bitcoin nei successivi 20 giorni e si visualizza la tabella delle previsioni con yhat previsione alla data ds e [yhat_lower, yhat_upper] intervallo di confidenza all'80%:
future = m.make_future_dataframe(periods=20) #we need to specify the number of days in future
prediction = m.predict(future)
prediction[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(20)
Conclusioni
[modifica | modifica sorgente]Uno dei vantaggi del machine learning è che può essere utilizzato per prevedere gli andamenti dei mercati in modo più preciso e tempestivo rispetto agli approcci basati sulla sola analisi umana. Inoltre, il machine learning può essere utilizzato per identificare pattern e trend nascosti che potrebbero non essere evidenti a un analista umano. Nonostante i vantaggi del machine learning, è importante notare che esso non è immune da errori e che le previsioni effettuate tramite questa tecnologia devono essere sempre prese con le dovute precauzioni.