Login Page - Create Account

Support Board


Date/Time: Sat, 04 May 2024 01:48:17 +0000



[User Discussion] - Yahoo Data Downloader

View Count: 2725

[2014-06-14 06:12:38]
Kiwi - Posts: 374
The following Python code will:

- download a base file from your chosen date to the end of this year (stops when the yahoo data stops)
(put dates in to suit yourself)
- every 5 minutes create the data file you plot by appending the current yahoo data for today to the base file
(my files are HSIbase and HSI and my data symbol is ^HSI)

Just something you can use or mess around with if you like and want something that Sierra isn't providing currently. It is based on Corey Goldberg's excellent and flexibly general purpose ystockquote.


# This is based on:
#
# ystockquote : Python module - retrieve stock quote data from Yahoo Finance
#
# Copyright (c) 2007,2008,2013 Corey Goldberg (cgoldberg@gmail.com)
#
# license: GNU LGPL
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# Requires: Tested under Python 3.4


import time, datetime
from urllib.request import Request, urlopen
from urllib.parse import urlencode

symbol = "^HSI"
basedatafile = '/home/john/zRamdisk/SierraChart/Data/HSIbase.dly'
datafile = '/home/john/zRamdisk/SierraChart/Data/HSI.dly'
startdate = '2007-06-01'
enddate = '2014-12-31'
seconds_until_repeat = 300

def _request(symbol, stat):
url = 'http://finance.yahoo.com/d/quotes.csv?s=%s&f=%s' % (symbol, stat)
req = Request(url)
resp = urlopen(req)
content = resp.read().decode().strip()
return content

def setup_base():

def get_data(start_date, end_date):
"""
Get historical prices for the given ticker symbol.
Date format is 'YYYY-MM-DD'
"""
params = urlencode({
's': symbol,
'a': int(start_date[5:7]) - 1,
'b': int(start_date[8:10]),
'c': int(start_date[0:4]),
'd': int(end_date[5:7]) - 1,
'e': int(end_date[8:10]),
'f': int(end_date[0:4]),
'g': 'd',
'ignore': '.csv',
})
url = 'http://ichart.yahoo.com/table.csv?%s' % params
req = Request(url)
resp = urlopen(req)
content = str(resp.read().decode('utf-8').strip())
daily_data = content.splitlines()
hist_data = []
for day in daily_data[len(daily_data):0:-1]:
dd = day.split(',')
hist_data.append([dd[0], dd[1], dd[2], dd[3], dd[4], dd[5]])
return hist_data

with open(basedatafile, 'w') as f:
ll = get_data(startdate, enddate)
for l in ll:
f.writelines(", ".join(l) +"\n")

def update_day():
with open(datafile, 'w') as f:
with open(basedatafile, 'r') as rf:
for l in rf:
f.writelines(l)
t = _request(symbol, 'd1l1om').split(',')
y = (datetime.date(int(l[0:4]), int(l[5:7]), int(l[8:10])) + datetime.timedelta(days=1)).isoformat()
f.writelines(y + ', ' + t[2] + ', ' + t[3].split('"')[1].split()[2] + ', ' + \
t[3].split('"')[1].split()[0] + ', '+t[1] + ', 0')


setup_base()
while "lifeonearth":
update_day()
time.sleep(seconds_until_repeat)

print("fell out the bottom")

[2016-08-08 03:21:29]
Japhro - Posts: 120
I have and sometimes use Motivewave software, and it comes with a connection to the Yahoo intraday data service that I believe updates in real time every 1 second. I have checked it against an IB feed and they are essentially the same quotes. It would be interesting to have a live (and free) Yahoo stock data feed for Sierra, similar to the Motivewave setup

To post a message in this thread, you need to log in with your Sierra Chart account:

Login

Login Page - Create Account