Symbol-Import aus txt-Datei
Verfasst: Samstag 15. Juni 2013, 15:20
Ein freundliches "hallo" an alle Forumsmitglieder,
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 :
Wie man aber zum Schluss sehr gut sehen kann, muss ich fuer jedes gewuenscht Symbol extra Code hinzufuegen. Ich wuerde aber gerne eine Textdatei, im Ordner wo das Programm liegt, mit allen benoetigten Symbolen hinterlegen. Somit soll das Programm dann jedes Symbol nach und nach abarbeiten, eine csv-Datei mit dem Namen des Symbols schreiben. Die txt-Datei mit den Symbolen soll wie folgt aussehen :
Frage :
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) :
einzusetzen, die csv-Datei zu schreiben und dann das naechste Symbol aus der txt-Datei zu nehmen, bis alle Symbole abgearbeitet sind. Schoen waere natuerlich wenn man die txt-Datei beliebig in der Anzahl der Symbole erweitern koennte. Fuer Anregungen bin ich sehr dankbar.
Viele Gruesse
Mike
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