Sembra che i dati YQL in tempo reale utilizzati dal pacchetto yahoo_finance siano obsoleti. 69.71 è la chiusura l'11 maggio. Il valore corretto dovrebbe essere 69.3.
La soluzione più semplice è quella di uno accedere alla tabella dati storici dello stesso pacchetto come in
>>> from yahoo_finance import Share
>>> stock = Share('XLV')
>>> data, = stock.get_historical('2016-05-12','2016-05-12')
>>> data['Close']
69.300003
In alternativa, afferrare i dati vicini direttamente dal sito/Finanza Yahoo. (Molto più veloce e più flessibile) Quando provo a replicare la tua situazione, non riesco a ottenere lo sfarfallio dei valori da te segnalato, ma ottengo una raffica di chiusura (quella del 20 maggio invece del 23 maggio). Forse lo sfarfallio che vedi è il risultato del fatto che YQL talvolta va a un server con dati obsoleti, a volte no. Ecco il codice che ottiene la chiusura precedente dai dati storici di yahoo_finance (a), dai dati in tempo reale di yahoo_finance (b), direttamente dalle quotazioni in tempo reale di yahoo-finance (c) e direttamente dai dati storici di yahoo-finance (d).
import csv
import time
import datetime
import requests
import pytz
from yahoo_finance import Share
hist_url = 'http://real-chart.finance.yahoo.com/table.csv?s=XLV&a=4&b=23&c=2016&g=d&ignore.csv'
realtime_url = 'http://download.finance.yahoo.com/d/quotes.csv?s=XLV&f=p&e=.csv'
eastern = pytz.timezone('US/Eastern')
while True:
stock = Share('XLV')
a = stock.get_historical('2016-05-23','2016-05-23')[0]['Close']
b = stock.get_prev_close()
r = requests.get(hist_url)
reader = csv.DictReader(r.iter_lines())
c = float(next(reader)['Close'])
d = float(requests.get(realtime_url).text)
print datetime.datetime.now(eastern).time(), a, b, c, d
time.sleep(120)
La stretta da stock.get_prev_close() nel 3 ° colonna è sempre stantio, mentre gli altri numeri sono corretti secondo il seguente output:
09:24:51.582532 69.410004 69.69 69.410004 69.41
09:26:52.749902 69.410004 69.69 69.410004 69.41
09:28:54.589506 69.410004 69.69 69.410004 69.41
09:30:56.681914 69.410004 69.69 69.410004 69.41
09:32:58.255181 69.410004 69.69 69.410004 69.41
Non so se questo funzionerà meglio per te, ma ho trovato questo pacchetto che sembra fare una cosa simile - https://github.com/cgoldberg/ystockquote/blob/master/ystockquote.py. Vedo che ha anche una funzione get_previous_close, ma non l'ho ancora testata. Ti darò un colpo dopo oggi e ti faccio sapere. –
Volevo solo dare un suggerimento qui. Se stai usando per tirare ripetutamente il prezzo delle azioni, puoi osservare che yahoo_finance non è corretto a volte (non sto dicendo di essere 15 minuti lenti). Per tirare il prezzo attuale delle azioni, google finance è molto più preferito e per tirare i dati storici, yahoo_finance ha caratteristiche migliori. Spero che aiuti qualcuno. – Bhargav