Applicazioni pratiche di machine learning/Previsioni su azioni, criptovalute, derivati

Wikibooks, manuali e libri di testo liberi.
Indice del libro

AZIONI[modifica]

Installazione librerie[modifica]

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]

import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from prophet import Prophet

Parte 1: Dati[modifica]

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]

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]

Installazione librerie[modifica]

In un notebook Jupyter scaricare le seguenti librerie tramite:

pip install pandas
pip install matplotlib
pip install ccxt
pip install prophet

Caricamento librerie[modifica]

import pandas as pd
import ccxt
import matplotlib.pyplot as plt
from prophet import Prophet

Parte 1: Dati[modifica]

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]

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]

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.