Come creare un grafico a candele utilizzando matplotlib in python


Un grafico a candela è un tipo di grafico finanziario che mostra i movimenti dei prezzi dei titoli nel tempo.

L’esempio seguente mostra come creare un grafico a candele utilizzando la libreria di visualizzazione Matplotlib in Python.

Esempio: creazione di un grafico a candele in Python

Supponiamo di avere il seguente DataFrame Panda che mostra il prezzo di apertura, chiusura, massimo e minimo di un determinato titolo in un periodo di 8 giorni:

 import pandas as pd

#createDataFrame
prices = pd. DataFrame ({' open ': [25, 22, 21, 19, 23, 21, 25, 29],
                       ' close ': [24, 20, 17, 23, 22, 25, 29, 31],
                       ' high ': [28, 27, 29, 25, 24, 26, 31, 37],
                       ' low ': [22, 16, 14, 17, 19, 18, 22, 26]},
                       index=pd. date_range (" 2021-01-01 ", periods=8, freq=" d "))

#display DataFrame
print (prices)

            open close high low
2021-01-01 25 24 28 22
2021-01-02 22 20 27 16
2021-01-03 21 17 29 14
2021-01-04 19 23 25 17
2021-01-05 23 22 24 19
2021-01-06 21 25 26 18
2021-01-07 25 29 31 22
2021-01-08 29 31 37 26

Possiamo utilizzare il seguente codice per creare un grafico a candele per visualizzare i movimenti dei prezzi di questo titolo in un periodo di 8 giorni:

 import matplotlib. pyplot as plt

#create figure
plt. figure ()

#define width of candlestick elements
width = .4
width2 = .05

#define up and down prices
up = prices[prices. close >=prices. open ]
down = prices[prices. close <prices. open ]

#define colors to use
col1 = ' green '
col2 = ' red '

#plot up prices
plt. bar (up. index , up. close -up. open , width, bottom=up. open , color=col1)
plt. bar (up. index ,up. high -up. close ,width2,bottom=up. close ,color=col1)
plt. bar (up. index , up. low -up. open , width2, bottom=up. open , color=col1)

#plot down prices
plt. bar (down. index , down. close -down. open , width, bottom=down. open , color=col2)
plt. bar (down. index , down. high -down. open , width2, bottom=down. open , color=col2)
plt. bar (down. index ,down. low -down. close ,width2,bottom=down. close ,color=col2)

#rotate x-axis tick labels
plt. xticks (rotation= 45 , ha=' right ')

#display candlestick chart
plt. show () 

Grafico a candele utilizzando matplotlib in Python

Ogni candela rappresenta la variazione del prezzo del titolo in un dato giorno. Il colore della candela ci dice se il prezzo ha chiuso al rialzo (verde) o al ribasso (rosso) rispetto al giorno precedente.

Sentiti libero di modificare la larghezza delle candele e i colori utilizzati per far apparire il grafico nel modo desiderato.

Ad esempio, potremmo rendere le candele ancora più sottili e utilizzare colori diversi per rappresentare i giorni “alti” e “bassi”:

 import matplotlib. pyplot as plt

#create figure
plt. figure ()

#define width of candlestick elements
width = .2
width2 = .02

#define up and down prices
up = prices[prices. close >=prices. open ]
down = prices[prices. close <prices. open ]

#define colors to use
col1 = ' black '
col2 = ' steelblue '

#plot up prices
plt. bar (up. index , up. close -up. open , width, bottom=up. open , color=col1)
plt. bar (up. index ,up. high -up. close ,width2,bottom=up. close ,color=col1)
plt. bar (up. index , up. low -up. open , width2, bottom=up. open , color=col1)

#plot down prices
plt. bar (down. index , down. close -down. open , width, bottom=down. open , color=col2)
plt. bar (down. index , down. high -down. open , width2, bottom=down. open , color=col2)
plt. bar (down. index ,down. low -down. close ,width2,bottom=down. close ,color=col2)

#rotate x-axis tick labels
plt. xticks (rotation= 45 , ha=' right ')

#display candlestick chart
plt. show () 

Risorse addizionali

I seguenti tutorial spiegano come creare altri grafici comuni in Python:

Come creare più grafici Matplotlib su una singola figura
Come tracciare un istogramma da un elenco di dati in Python
Come creare box plot per gruppo in Python

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *