ich moechte mit Hilfe von Python Kursdaten aus Yahoo importieren und das jeweils zu importierende Symbol aus einer Liste importieren, ohne fuer jedes einzelne Symbol eine Variable, Write- und Print-Anweisung im urspruenglichen Code implementieren zu muessen. Das mache ich naemlich jetzt und wird bei Verfollstaendigung der Liste dann aber > 4000 Zeilen Code enthalten. Sicher nicht Sinn und Zweck der Geschichte.
Nun kann ich mit folgendem Code die Yahoo-Kurse downloaden und im Verzeichnis wo das Programm "liegt" speichern :
Code: Alles auswählen
import urllib,time,datetime
class Quote(object):
DATE_FMT = '%Y-%m-%d'
TIME_FMT = '%H:%M:%S'
def __init__(self):
self.symbol = ''
self.date,self.time,self.open_,self.high,self.low,self.close,self.volume = ([] for _ in range(7))
def append(self,dt,open_,high,low,close,volume):
self.date.append(dt.date())
self.time.append(dt.time())
self.open_.append(float(open_))
self.high.append(float(high))
self.low.append(float(low))
self.close.append(float(close))
self.volume.append(int(volume))
def to_csv(self):
return ''.join(["{0},{1},{2},{3:.2f},{4:.2f},{5:.2f},{6:.2f},{7}\n".format(self.symbol,
self.date[bar].strftime('%Y-%m-%d'),self.time[bar].strftime('%H:%M:%S'),self.open_[bar],self.high[bar],self.low[bar],self.close[bar],self.volume[bar])
for bar in xrange(len(self.close))])
def write_csv(self,filename):
with open(filename,'w') as f:
f.write(self.to_csv())
def read_csv(self,filename):
self.symbol = ''
self.date,self.time,self.open_,self.high,self.low,self.close,self.volume = ([] for _ in range(7))
for line in open(filename,'r'):
symbol,ds,ts,open_,high,low,close,volume = line.rstrip().split(',')
self.symbol = symbol
dt = datetime.datetime.strptime(ds+' '+ts,self.DATE_FMT+' '+self.TIME_FMT)
self.append(dt,open_,high,low,close,volume)
return True
def __repr__(self):
return self.to_csv()
class YahooQuote(Quote):
''' Daily quotes from Yahoo. Date format='yyyy-mm-dd' '''
def __init__(self,symbol,start_date,end_date=datetime.date.today().isoformat()):
super(YahooQuote,self).__init__()
self.symbol = symbol.upper()
start_year,start_month,start_day = start_date.split('-')
start_month = str(int(start_month)-1)
end_year,end_month,end_day = end_date.split('-')
end_month = str(int(end_month)-1)
url_string = "http://ichart.finance.yahoo.com/table.csv?s={0}".format(symbol)
url_string += "&a={0}&b={1}&c={2}".format(start_month,start_day,start_year)
url_string += "&d={0}&e={1}&f={2}".format(end_month,end_day,end_year)
csv = urllib.urlopen(url_string).readlines()
csv.reverse()
for bar in xrange(0,len(csv)-1):
ds,open_,high,low,close,volume,adjc = csv[bar].rstrip().split(',')
open_,high,low,close,adjc = [float(x) for x in [open_,high,low,close,adjc]]
if close != adjc:
factor = adjc/close
open_,high,low,close = [x*factor for x in [open_,high,low,close]]
dt = datetime.datetime.strptime(ds,'%Y-%m-%d')
self.append(dt,open_,high,low,close,volume)
if __name__ == '__main__':
q = YahooQuote('VXX','1950-01-01')
print q
# ETF's
var1 = YahooQuote('GLD','1950-01-01')
var1.write_csv('GLD.csv')
var1 = Quote()
var1.read_csv('GLD.csv')
print var1
var2 = YahooQuote('XLF','1950-01-01')
var2.write_csv('XLF.csv')
var2 = Quote()
var2.read_csv('XLF.csv')
print var2
var3 = YahooQuote('SPY','1950-01-01')
var3.write_csv('SPY.csv')
var3 = Quote()
var3.read_csv('SPY.csv')
print var3
var4 = YahooQuote('VXX','1950-01-01')
var4.write_csv('VXX.csv')
var4 = Quote()
var4.read_csv('VXX.csv')
print var4
var5 = YahooQuote('EEM','1950-01-01')
var5.write_csv('EEM.csv')
var5 = Quote()
var5.read_csv('EEM.csv')
print var5
var6 = YahooQuote('EWJ','1950-01-01')
var6.write_csv('EWJ.csv')
var6 = Quote()
var6.read_csv('EWJ.csv')
print var6
var7 = YahooQuote('IWM','1950-01-01')
var7.write_csv('IWM.csv')
var7 = Quote()
var7.read_csv('IWM.csv')
print var7
var8 = YahooQuote('QQQ','1950-01-01')
var8.write_csv('QQQ.csv')
var8 = Quote()
var8.read_csv('QQQ.csv')
print var8
var9 = YahooQuote('XIV','1950-01-01')
var9.write_csv('XIV.csv')
var9 = Quote()
var9.read_csv('XIV.csv')
print var9
var10 = YahooQuote('SLV','1950-01-01')
var10.write_csv('SLV.csv')
var10 = Quote()
var10.read_csv('SLV.csv')
print var10
var11 = YahooQuote('XLU','1950-01-01')
var11.write_csv('XLU.csv')
var11 = Quote()
var11.read_csv('XLU.csv')
print var11
var12 = YahooQuote('XLE','1950-01-01')
var12.write_csv('XLE.csv')
var12 = Quote()
var12.read_csv('XLE.csv')
print var12
var13 = YahooQuote('EWH','1950-01-01')
var13.write_csv('EWH.csv')
var13 = Quote()
var13.read_csv('EWH.csv')
print var13
var14 = YahooQuote('USO','1950-01-01')
var14.write_csv('USO.csv')
var14 = Quote()
var14.read_csv('USO.csv')
print var14
var15 = YahooQuote('XLP','1950-01-01')
var15.write_csv('XLP.csv')
var15 = Quote()
var15.read_csv('XLP.csv')
print var15
var16 = YahooQuote('FXI','1950-01-01')
var16.write_csv('FXI.csv')
var16 = Quote()
var16.read_csv('FXI.csv')
print var16
var17 = YahooQuote('VWO','1950-01-01')
var17.write_csv('VWO.csv')
var17 = Quote()
var17.read_csv('VWO.csv')
print var17
Code: Alles auswählen
SPY
QQQ
DIA
GLD
SLV
XLF
XLU
:
usw.
1. Wie mache ich das das ich das Programm dazu bringe jede Zeile der txt-Datei nach dem Symbol zu checken und das dann jeweils hier (siehe Code : SYMBOL) :
Code: Alles auswählen
var4 = YahooQuote('SYMBOL','1950-01-01')
var4.write_csv('SYMBOL.csv')
var4 = Quote()
var4.read_csv('SYMBOL.csv')
Viele Gruesse
Mike
