Hi,
habe folgendes Problem, habe folgenden Code (ich poste mal alles damit auch nix fehlt):
'''
from GoogleFinance import GoogleFinance
import sys
import datetime
import pytz
import os
import time
def script(j):
# US Eastern time zone
uset = pytz.timezone("US/Eastern")
# google finance account
# for i in range(1,11):
# list of US holidays
# see: http://www.rightline.net/calendar/market-holidays.html
holidays = [datetime.date(2009,1,1),datetime.date(2009,1,19), \
datetime.date(2009,2,16),datetime.date(2009,4,10), \
datetime.date(2009,5,25), datetime.date(2009,7,3), \
datetime.date(2009,9,7), datetime.date(2009,11,26), \
datetime.date(2009,12,25)]
# US markets start and stop times
startTime = datetime.time(9,30)
stopTime = datetime.time(16,00)
# Check that it is trading time
def CheckTime(nowdatetime):
if ((nowdatetime.time() >= startTime) and \
(nowdatetime.time() <= stopTime)) and \
(nowdatetime.date().weekday() <= 4) and \
not (nowdatetime.date() in holidays):
return True
else:
return False
# this loop runs forever
while 1:
# if CheckTime(datetime.datetime.now(uset)):
# time.sleep(30)
for i in range(1,11):
email = '******' + str(i) + '@gmail.com'
password = '******'
dt = str(datetime.datetime.now(uset).date())
path = '' + dt + '/'
if not(os.path.exists(path)):
os.mkdir(path)
# log into Google Finance account and get portfolios
# record the datetime of fetch
# keep trying until there is no error
while 1:
try:
gfi = GoogleFinance(email, password)
# keep fetching data until markets close
# while CheckTime(datetime.datetime.now(uset)):
# get list of portfolios
# keep trying to success
while 1:
try:
pfl_list = gfi.portfolios.get()
except:
pass
else:
break
# loop through all portfolios
for pfl in pfl_list:
for pos in pfl.positions:
filename = path + pos.ticker_id.split(':')[1] + '_' + dt + '.csv'
if not(os.path.exists(filename)):
f = open(filename,'w')
f.write('DateTime,Price\n')
else:
f = open(filename,'a')
f.write(str(pos.updated) + ',' + str(pos.market_value/pos.shares) + '\n')
f.close()
# pause
# time.sleep(120)
except:
pass
else:
break
time.sleep(30)
if __name__ == '__main__':
script(1)
Wie ziehe ich jetzt die Preise meiner Positionen meiner Portfolios aus den Ordnern, in denen sie im obigen Code ja abgespeichert werden, heraus und berechne Bsp den aktuellen oder den Tagesreturn?
Vielen Dank für die Mühe, würde nicht sowas spezielles hier reinposten wenns nicht dringend und wichtig wäre.
Beste Grüße
Basti
Daten aus Ordner ziehen und bearbeiten
Bitte benutze Code-Tags in Deinem Posting: [code=python ... [/code
Von Python weißt Du wohl nicht viel? Die Einrückungen sind, anders als in anderen Sprachen, von Bedeutung!
Gruß
Von Python weißt Du wohl nicht viel? Die Einrückungen sind, anders als in anderen Sprachen, von Bedeutung!
Gruß
ohne Code-Tags wird die Einrückung 'vernichtet'
the more they change the more they stay the same
das mit der Einrückung ist mir bekannt, habe nicht aufgepasst sorry
weiß jemand wie ich mein oben beschriebenes problem lösen kann?
Code: Alles auswählen
'''
from GoogleFinance import GoogleFinance
import sys
import datetime
import pytz
import os
import time
def script(j):
# US Eastern time zone
uset = pytz.timezone("US/Eastern")
# google finance account
# for i in range(1,11):
# list of US holidays
# see: http://www.rightline.net/calendar/market-holidays.html
holidays = [datetime.date(2009,1,1),datetime.date(2009,1,19), \
datetime.date(2009,2,16),datetime.date(2009,4,10), \
datetime.date(2009,5,25), datetime.date(2009,7,3), \
datetime.date(2009,9,7), datetime.date(2009,11,26), \
datetime.date(2009,12,25)]
# US markets start and stop times
startTime = datetime.time(9,30)
stopTime = datetime.time(16,00)
# Check that it is trading time
def CheckTime(nowdatetime):
if ((nowdatetime.time() >= startTime) and \
(nowdatetime.time() <= stopTime)) and \
(nowdatetime.date().weekday() <= 4) and \
not (nowdatetime.date() in holidays):
return True
else:
return False
# this loop runs forever
while 1:
# if CheckTime(datetime.datetime.now(uset)):
# time.sleep(30)
for i in range(1,11):
email = '******' + str(i) + '@gmail.com'
password = '******'
dt = str(datetime.datetime.now(uset).date())
path = '' + dt + '/'
if not(os.path.exists(path)):
os.mkdir(path)
# log into Google Finance account and get portfolios
# record the datetime of fetch
# keep trying until there is no error
while 1:
try:
gfi = GoogleFinance(email, password)
# keep fetching data until markets close
# while CheckTime(datetime.datetime.now(uset)):
# get list of portfolios
# keep trying to success
while 1:
try:
pfl_list = gfi.portfolios.get()
except:
pass
else:
break
# loop through all portfolios
for pfl in pfl_list:
for pos in pfl.positions:
filename = path + pos.ticker_id.split(':')[1] + '_' + dt + '.csv'
if not(os.path.exists(filename)):
f = open(filename,'w')
f.write('DateTime,Price\n')
else:
f = open(filename,'a')
f.write(str(pos.updated) + ',' + str(pos.market_value/pos.shares) + '\n')
f.close()
# pause
# time.sleep(120)
except:
pass
else:
break
time.sleep(30)
if __name__ == '__main__':
script(1)
Edit (Leonidas): Werbung aus Signatur gelöscht.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Für so lange Code-Schnipsel könnte man sich auch überlegen, die in ein Paste-bin auszulagern, z.B. paste.pocoo.org, das hier sehr beliebt ist.
Generell sollte man das Markup setzen -
Generell sollte man das Markup setzen -
Code: Alles auswählen
- wurde hier ja auch schon genannt. Das Syntax Highlighting hilft doch ungemein.
Bitte schildere Dein Problem doch noch einmal ein wenig präziser. Ich glaube die wenigsten wollen sich in undokumentierten Code einarbeiten, der zudem viele Auskommentierungen enthält, die nicht gerade zur Übersichtlichkeit beitragen.
Schildere doch einfach mal kurz, was Du für Datenstrukturen hast und welche Info da wie drin verpackt ist. Dann poste ggf. einmal den entscheidenen Ausschnitt des Codes oder ein minimales Beispiel, bei dem es hapert.
So bekommst Du sicherlich schneller Hilfe :-)
Guck doch mal in Deiner Schleife, was so alles in "pfl" ist:Basti128 hat geschrieben:Wie ziehe ich jetzt die Preise meiner Positionen meiner Portfolios aus den Ordnern, in denen sie im obigen Code ja abgespeichert werden, heraus und berechne Bsp den aktuellen oder den Tagesreturn?
Code: Alles auswählen
for pfl in pfl_list:
print dir(pfl)
Code: Alles auswählen
for pos in pfl.positions:
print dir(pos)
Hey,
und was bedeutet das dir nach print im code? Ich will das eig nicht "printen", sondern eher einzeln abspeichern oder aufrufen, weil ich damit dann weiterarbeiten will indem ich mithilfe des Preises und des Returns eine Stop-Loss-Funktion berechne.
Ich denke der entscheidene Code-Schnipsel sollte dieser sein:
Hier werden die einzelnen Portfolios und Positionen abgefragt und in csv-files abgespeichert. Aber wie komm ich nun an bestimmte Daten in diesen Files heran?Wie rufe ich bspw eine bestimmte Zeile oder Zelle auf?
bzw kann ich statt die Daten in Ordnern abzuspeichern auch einfach 2 Variablen einführen und da die neusten Preise speichern? (sollte gehen, aber ich weiß nicht wie, also schon wie man die Variablen einführt und mit ihnen arbeitet, aber nicht wie man genau die Daten in die Variable "zieht".) Die Daten sind nebenbei immer Paare aus Datum und Preis.
und was bedeutet das dir nach print im code? Ich will das eig nicht "printen", sondern eher einzeln abspeichern oder aufrufen, weil ich damit dann weiterarbeiten will indem ich mithilfe des Preises und des Returns eine Stop-Loss-Funktion berechne.
Ich denke der entscheidene Code-Schnipsel sollte dieser sein:
Code: Alles auswählen
loop through all portfolios
for pfl in pfl_list:
for pos in pfl.positions:
filename = path + pos.ticker_id.split(':')[1] + '_' + dt + '.csv'
if not(os.path.exists(filename)):
f = open(filename,'w')
f.write('DateTime,Price\n')
else:
f = open(filename,'a')
f.write(str(pos.updated) + ',' + str(pos.market_value/pos.shares) + '\n')
f.close()
bzw kann ich statt die Daten in Ordnern abzuspeichern auch einfach 2 Variablen einführen und da die neusten Preise speichern? (sollte gehen, aber ich weiß nicht wie, also schon wie man die Variablen einführt und mit ihnen arbeitet, aber nicht wie man genau die Daten in die Variable "zieht".) Die Daten sind nebenbei immer Paare aus Datum und Preis.
Edit (Leonidas): Werbung aus Signatur gelöscht.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Du hättest es einfach ausprobieren könnenBasti128 hat geschrieben:Hey,
und was bedeutet das dir nach print im code?

Ich glaube das sollte nur ein Hinweis sein, wie man etwas debuggen kannIch will das eig nicht "printen", sondern eher einzeln abspeichern oder aufrufen, weil ich damit dann weiterarbeiten will indem ich mithilfe des Preises und des Returns eine Stop-Loss-Funktion berechne.

Naja, Du öffnest eine Datei wieder, und iterierst über die Zeilen. Geht mit dem CSV-Modul recht einfach.Aber wie komm ich nun an bestimmte Daten in diesen Files heran?Wie rufe ich bspw eine bestimmte Zeile oder Zelle auf?
Das sind doch zwei vollkommen lösgelöste Probleme! Ich habe das Gefühl, Du hast einfach viel zu wenig Ahnung von Python und Du beschreibst leider Dein Problem immer noch nicht gut!bzw kann ich statt die Daten in Ordnern abzuspeichern auch einfach 2 Variablen einführen und da die neusten Preise speichern?
Versuche mal diese Fragen zu beantworten:
Wie sehen die Datenstrukturen aus? Sind das Listen, Dictionaries, was anderes? Wo innerhalb der Strukuren sind Infos, die Du benötigst? Was muss gespeichert werden? Wo kommen die Daten her?
Ohne diese Infos kommen wir nicht weiter.
In dem Hauptskript sind die Daten irgendwo in den Objekten "pfl" und "pos".Basti128 hat geschrieben:Hier werden die einzelnen Portfolios und Positionen abgefragt und in csv-files abgespeichert. Aber wie komm ich nun an bestimmte Daten in diesen Files heran?Wie rufe ich bspw eine bestimmte Zeile oder Zelle auf?
Mit "dir()" kann man die Namen der Attribute und Methoden eines Objekts abfragen, siehe
Code: Alles auswählen
pydoc dir
Ich dachte, Du wolltest das direkt im Hauptskript machen.
Man kann die Daten aber auch aus der geschriebenen Datei wieder herausziehen, entweder ebenfalls im Hauptskript oder mit einem zweiten Skript. Dazu muß man natürlich anders vorgehen (siehe Hyperions Posting). Allgemein, wenn Du z.B. so eine Datei "dat.txt" hast
Code: Alles auswählen
1 2 3 4 5
5 4 3 2 1
Code: Alles auswählen
import os
fh = file("dat.txt", "r")
a = fh.readlines()
fh.close()
for i in a:
print i
b = i.split(" ")
print b[2]
Gruß
@problembär: du brauchst hier kein "readlines" 

Code: Alles auswählen
with open("dat.txt", "r") as fp:
for line in fp:
print line.split()
Das Leben ist wie ein Tennisball.