Scaricare le quotazioni in automatico con Excel

TheOrbix

Nuovo Utente
Registrato
30/3/07
Messaggi
286
Punti reazioni
32
Un pò di tempo fa ho scoperto (grazie ad un paio di voi del NG che mi hanno dato la dritta...) che Excel può recuperare dati dal web automaticamente o quasi, tramite la funzionalità di Query web.

Al momento recupero i dati delle quotazioni con una query web dal sito di MSN MoneyCentral, che però non mi soddisfa molto (i dati a volte sono aggiornati con 4/5 giorni di ritardo, e la query restituisce la quotazione ma non la data di aggiornamento, il che non è l'ideale se uno vuole costruirsi un proprio database storico delle quotazioni).

Quindi mi chiedevo: qualcuno ha creato delle proprie query web personalizzate e configurabili (pescando i dati da altri siti, non necessariamente da MSN)?

Io ho fatto qualche prova provando a pescare dati da un pò di siti, ma il limite peggiore è che nella maggior parte dei casi la query importa nel foglio Excel anche parti di formattazione e layout della pagina web di uscita che non servono a un bel niente (se non a complicare inutilmente la vita di chi vuole poi pescare i dati in automatico, andandoli poi a copiare nelle celle "target"): grafica, banner, e fregnacce simili

L'ideale sarebbe avere una query web su un sito che resituisca i dati delle quotazioni di un fondo o di un ETF in maniera "pulita" (ovvero solo i dati della quotazione)...

Se qualcuno ha risolto il problema, vi va di condividere degli esempi, magari sotto forma di file Excel di "demo" che mostrano come è stata implementata la funzionalità?
 

TheOrbix

Nuovo Utente
Registrato
30/3/07
Messaggi
286
Punti reazioni
32
OK, ho fatto la domanda e alla fine ieri sera con un pò di prove mi sono risposto da solo...

Un sito in grado di visualizzare dati "puliti" relativi alle quotazioni di un fondo è Yahoo.

L'URL che consente di recuperare le quotazioni è questa:

http://it.old.finance.yahoo.com/d/quotes.csv?s=CODICE_YAHOO&f=sl1d1t1c1ohgv&e=.csv

Dove ovviamente CODICE_YAHOO va sostituto con il codice Yahoo del fondo, ETF o azione che si interessa reperire.

Questo è il frammento di codice VBA che consente di reperire una determinata quotazione e inserirla in una cella Excel:

CurrentInvestmentID = Range("A2")

CurrentInvestmentOutput = "B2"

With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://it.old.finance.yahoo.com/d/quotes.csv?s=" & CurrentInvestmentID & "&f=sl1d1t1c1ohgv&e=.csv", _
Destination:=Range(CurrentInvestmentOutput))
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCell
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With


Fatto questo bisogna fare un pò di pastrugni per decodificare automaticamente la stringa (che è in formato CSV e contiene tutti i dati separati da semicolon) risultante dalla query Web e copiare l'output in colonne separate, ma il codice non è particolarmente difficile.

Se qualcuno è interessato posso postare un foglio Excel di esempio con il codice della macro commentato...
 

Toshiba

Nuovo Utente
Registrato
2/5/03
Messaggi
2.048
Punti reazioni
135
Ciao TheOrbix,
mi faresti un gra favore visto che anch'io stavo pensando di "costruirmi" una funzione simile per aggiornare le quotazioni di alcuni strumenti finanziari ma al momento non avrei idea di come fare...
Grazie mille.
Ciao.
T.
 

Haganah

p = &Cote_Azur; p++
Registrato
13/4/06
Messaggi
33.779
Punti reazioni
1.704
io uso borsaitaliana.it
 

pf.fin

FacileNo||SempliceSì
Registrato
24/9/05
Messaggi
11.645
Punti reazioni
971
TheOrbix ha scritto:
...Se qualcuno è interessato posso postare un foglio Excel di esempio con il codice della macro commentato...
Eccone un altro interessato... grazie in anticipo OK!

Ciao :)
 

cammello

ROB's something
Registrato
17/1/05
Messaggi
6.700
Punti reazioni
738
TheOrbix ha scritto:
Un pò di tempo fa ho scoperto (grazie ad un paio di voi del NG che mi hanno dato la dritta...) che Excel può recuperare dati dal web automaticamente o quasi, tramite la funzionalità di Query web.

Al momento recupero i dati delle quotazioni con una query web dal sito di MSN MoneyCentral, che però non mi soddisfa molto (i dati a volte sono aggiornati con 4/5 giorni di ritardo, e la query restituisce la quotazione ma non la data di aggiornamento, il che non è l'ideale se uno vuole costruirsi un proprio database storico delle quotazioni).

Quindi mi chiedevo: qualcuno ha creato delle proprie query web personalizzate e configurabili (pescando i dati da altri siti, non necessariamente da MSN)?

Io ho fatto qualche prova provando a pescare dati da un pò di siti, ma il limite peggiore è che nella maggior parte dei casi la query importa nel foglio Excel anche parti di formattazione e layout della pagina web di uscita che non servono a un bel niente (se non a complicare inutilmente la vita di chi vuole poi pescare i dati in automatico, andandoli poi a copiare nelle celle "target"): grafica, banner, e fregnacce simili

L'ideale sarebbe avere una query web su un sito che resituisca i dati delle quotazioni di un fondo o di un ETF in maniera "pulita" (ovvero solo i dati della quotazione)...

Se qualcuno ha risolto il problema, vi va di condividere degli esempi, magari sotto forma di file Excel di "demo" che mostrano come è stata implementata la funzionalità?

Guarda sul sito
http://www.gummy-stuff.org/

Simple Download

se hai i settings in italiano puoi avere un prob con il separatore dei decimali

modifica il vba con il seguente

//----------------------
//Inizio modifica
'construct the URL for the query

qurl = "http://chart.yahoo.com/table.csv?s=" & Symbol
qurl = qurl & "&a=" & Month(StartDate) - 1 & "&b=" & Day(StartDate) & _
"&c=" & Year(StartDate) & "&d=" & Month(EndDate) - 1 & "&e=" & _
Day(EndDate) & "&f=" & Year(EndDate) & "&g=" & Range("E3") & "&q=q&y=0&z=" & _
Symbol & "&x=.csv"
Range("c5") = qurl

QueryQuote:
With ActiveSheet.QueryTables.Add(Connection:="URL;" & qurl, Destination:=DataSheet.Range("C7"))
.BackgroundQuery = True
.TablesOnlyFromHTML = False
.Refresh BackgroundQuery:=False
.SaveData = True
End With

Range("C7").CurrentRegion.TextToColumns Destination:=Range("C7"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, other:=False

Range(Range("C7"), Range("C7").End(xlDown)).NumberFormat = "mmm d/yy"

' modified to transform "text" into "value";
' issue coming from the different decimal separators
For Each c In DataSheet.Range("D8:G500")
If Val(c.Value) <> 0 Then
c.Value = Val(c.Value)
End If
Next c

Range(Range("D7"), Range("G7").End(xlDown)).NumberFormat = "0.00"
Range(Range("H7"), Range("H7").End(xlDown)).NumberFormat = "0,000"
' modified to transform "text" into "value";
'issue coming from the different decimal separators
For Each c In DataSheet.Range("I8:I500")
If Val(c.Value) <> 0 Then
c.Value = Val(c.Value)
End If
Next c

//Fine modifica
//----------------------

C
 

TheOrbix

Nuovo Utente
Registrato
30/3/07
Messaggi
286
Punti reazioni
32
pf.fin ha scritto:
Eccone un altro interessato... grazie in anticipo OK!

Ciao :)

Ok, a grande richiesta ecco il fogliettino Excel con la macro di esempio...

Testato e funzionante su Excel 2003 (Win) e Excel 2004 (Mac).

Quando si apre il foglio, Excel segnalerà che il foglio contiene una macro e chiederà se si vuole abilitare l'esecuzione della macro (il solito warning di prevenzione dai virus VBA). Ovviamente bisogna rispondere di sì... :-)

Non ho ancora provato a scaricare e testare il foglio suggerito da Cammello, ma in effetti avevo visto dei vecchi post in cui parlava di quelle macro di esempio. Il principio delle query web è ovviamente lo stesso, però credo che l'output prodotto fosse decisamente diverso dal mio esempio.

In ogni caso quando avrò un pò di tempo libero vedrò di fare qualche ulteriore esperimento...
 

Allegati

  • Yahoo GetQuotes.xls.zip
    19,7 KB · Visite: 70.295

ghibli_70

AAAAh annamo bene...
Registrato
17/2/06
Messaggi
3.096
Punti reazioni
215
TheOrbix ha scritto:
Ok, a grande richiesta ecco il fogliettino Excel con la macro di esempio...
...

Bollino verde!

Seguo il thread, e se sarò in grado contribuirò! ;)

Ciao!

Davide - Ghibli
 

TheOrbix

Nuovo Utente
Registrato
30/3/07
Messaggi
286
Punti reazioni
32
ghibli_70 ha scritto:
Però è interessante il sito segnalato.
E pieno di files excel da "studiare":
http://www.gummy-stuff.org/Excel/

Interessante ai fini del thread la pagina:
http://www.gummy-stuff.org/macros.htm

Ciao!

Davide - Ghibli

Confermo... sembra esserci parecchia roba.

Mi sa che questa sera, dopo aver messo a nanna la bimba, mi metterò a fare un pò di spelunking nei vari fogli di esempio, per capire se si tira fuori qualcosa di utile e riutilizzabile.
 

TheOrbix

Nuovo Utente
Registrato
30/3/07
Messaggi
286
Punti reazioni
32
ghibli_70 ha scritto:
Bollino verde!
Seguo il thread, e se sarò in grado contribuirò! ;)

Cosa non si farebbe per un bollino verde... :)

Comunque grazie... vuol dire che funziona almeno su un altro PC oltre ai miei due (Primo Assioma delle macro VBA: puoi testarle per un milione di anni e funzioneranno sempre, ma appena le fai circolare in giro scopri sempre qualche stranezza del tutto imprevista).
 

TheOrbix

Nuovo Utente
Registrato
30/3/07
Messaggi
286
Punti reazioni
32
Haganah ha scritto:
io uso borsaitaliana.it

Ricordo che avevi già risposto così a una richiesta simile qualche tempo fa...

Domanda: io ho provato a usare www.borsaitaliana.it, ma finora le query web fatte da Excel mi restituiscono un sacco di "fuffa" (grafica, banner, etc.) che non serve a niente e dà solo fastidio.

E in effetti il motivo principale per cui ho scelto di fare le query su Yahoo è che l'URL utilizzata restituisce i dati nudi e crudi sotto forma di una stringa di testo in formato CSV e quindi diventa facile manipolarli.

Tu quale URL e quale query utilizzi per pescare i dati dal sito di Borsa Italiana?

Se hai tempo, potresti postare qualche esempio? Sarebbe sicuramente molto interessante studiare il modo in cui hai affrontato la cosa.
 
Ultima modifica:

cammello

ROB's something
Registrato
17/1/05
Messaggi
6.700
Punti reazioni
738
TheOrbix ha scritto:
Ricordo che avevi già risposto così a una richiesta simile qualche tempo fa...

Domanda: io ho provato a usare www.borsaitaliana.it, ma finora le query web fatte da Excel mi restituiscono un sacco di "fuffa" (grafica, banner, etc.) che non serve a niente e dà solo fastidio.


Io uso una webquery, in cui seleziono la tabella che mi serve (vedi allegato, borsaitaliana, tasto destro sui dati, modifica query).
Poi con una macro storicizzo quello che mi serve.

Sicuramente si può fare in maniera più elegante, ma mi ci vorrebbe più tempo, che per i miei scopi non penso valga la pena.

C
 

Allegati

  • Quotazioni.xls
    27 KB · Visite: 2.619

Elkjaer

Nuovo Utente
Registrato
8/8/06
Messaggi
517
Punti reazioni
21
cammello ha scritto:
Io uso una webquery, in cui seleziono la tabella che mi serve (vedi allegato, borsaitaliana, tasto destro sui dati, modifica query).
Poi con una macro storicizzo quello che mi serve.

Sicuramente si può fare in maniera più elegante, ma mi ci vorrebbe più tempo, che per i miei scopi non penso valga la pena.

C

anch'io uso come fonte borsaitaliana..
la cosa più importante è che la fonte sia il più attendibile possibile e tra borsaitaliana e yahoo preferisco la prima
Sono curioso di sapere un vostro parere a riguardo..

Su borsa italiana però non trovo l'informazione della data in modo da storicizzare i valori di un titolo per portarli su un grafico..

come funziona la tua macro che storicizza i dati ?
io ho solo il vincolo di immmetere su un altro foglio excel il valore e la data per riga e non per colonna ma non capisco come fare.. :confused:
usi un cerca.vert ?

Grazie! :)
 

Haganah

p = &Cote_Azur; p++
Registrato
13/4/06
Messaggi
33.779
Punti reazioni
1.704
Elkjaer ha scritto:
anch'io uso come fonte borsaitaliana..
la cosa più importante è che la fonte sia il più attendibile possibile e tra borsaitaliana e yahoo preferisco la prima
Sono curioso di sapere un vostro parere a riguardo..

Su borsa italiana però non trovo l'informazione della data in modo da storicizzare i valori di un titolo per portarli su un grafico..

come funziona la tua macro che storicizza i dati ?
io ho solo il vincolo di immmetere su un altro foglio excel il valore e la data per riga e non per colonna ma non capisco come fare.. :confused:
usi un cerca.vert ?

Grazie! :)


la macro che ho costruito importa in un foglio i dati da borsaitaliana (sono tutti etf), e sono comprensivi di data, massimi, minimi e altre statistiche costruisco io. poi copio le celle in altre aree del foglio di lavoro, prelevando solo i dati che mi servono a popolare i grafici e le ulteriori statistiche che mi interessano (poche, non sono un patito di AT)
 

Elkjaer

Nuovo Utente
Registrato
8/8/06
Messaggi
517
Punti reazioni
21
Haganah ha scritto:
la macro che ho costruito importa in un foglio i dati da borsaitaliana (sono tutti etf), e sono comprensivi di data, massimi, minimi e altre statistiche costruisco io. poi copio le celle in altre aree del foglio di lavoro, prelevando solo i dati che mi servono a popolare i grafici e le ulteriori statistiche che mi interessano (poche, non sono un patito di AT)

io gli etf li prendo da queste pagine : http://www.borsaitaliana.it/bitApp/quotes.bit?target=DisplayETFFondi1Lev&grp=etfetfs
ma non trovo la data, trovo l'ora.. :confused:
tu da che pagina di borsaitalia li scarichi?
 

Elkjaer

Nuovo Utente
Registrato
8/8/06
Messaggi
517
Punti reazioni
21
Haganah ha scritto:

mmm...pensavo che ci fosse qualcosa di più snello, cioè in un unica pagina tutti gli etf con data...
in questo modo per ogni etf che ti interessa tu importi una query web?
premesso che il lavoro lo fai la prima volta,
mi sembra lungo come procedimento, però magari tu conosci delle scorciatoie..

si vede che la mia conoscenza di excel è scolastica? :D

grazie :)