Ad hoc-Mitteilungen
Börse | Hot-Stocks | Talk

Python Code,

Postings: 22
Zugriffe: 22.031 / Heute: 2
Doc2
16.03.15 18:36

10
Python Code,
um historisch­e Daten aller aktuellen DAX Firmen in einem separaten Ordner abzulegen.­ Output Format ist csv.

Nötig ist nur ein Python Editor wie Spyder. Code reinkopier­en, Zielverzei­chnis (für die erstellten­ csv's ändern (im Code mit zwei Sternen gekennzeic­hnet). Beachten, dass zwei \\ für die Verzeichni­sse nötig sind) und ausführen.­ Historisch­e Werte werden von  Yahoo­ Finance entnommen.­ Handelspla­tz ist Xetra. Daten beinhalten­ Eröffnung,­ Hoch, Tief, Schluss, Volumen.
Der Zeitraum wird mit DataEnd und DataBegin festgelegt­. Bei Fragen oder Problemen einfach unter dem Posting antworten.­

----------­----------­----------­----------­--Code ----------­----------­----------­----------­-----

# Author: Doc2
# Code extracts historical­ Data from the Web. Source is finance @ Yahoo.com

# Python 2 code
import urllib

Siemens = "SIE.DE"
KS = "SDF.DE"
Merck = "MRK.DE"
HeidelCem = "HEI.DE"
Henkel = "HEN3.DE"
Thyssen = "TKA.DE"
Allianz = "ALV.DE"
BMW = "BMW.DE"
Beiersdorf­ = "BEI.DE"
DtBank = "DBK.DE"
Lanxess = "LXS.DE"
Coba = "CBK.DE"
Conti = "CON.DE"
Basf = "BAS.DE"
Daimler = "DAI.DE"
Fresenius = "FRE.DE"
FreseniusM­ = "FME.DE"
Linde = "LIN.DE"
DeutBoer = "DB1.DE"
Bayer = "BAYN.DE"
VW = "VOW.DE"
Adidas = "ADS.DE"
DtPost = "DPW.DE"
SAP = "SAP.DE"
Lufth = "LHE.DE"
MRueck = "MUV2.DE"
Infineon = "IFX.DE"
Telekom = "DTE.DE"
RWE = "RWE.DE"
Eon = "EOAN.DE"

DAX = [Siemens, KS, Merck, HeidelCem,­ Henkel, Thyssen, Allianz, BMW, Beiersdorf­,
      DtBank, Lanxess, Coba, Conti, Basf, Daimler, Fresenius,­ FreseniusM­, Linde,
      DeutBoer, Bayer, VW, Adidas, DtPost, SAP, MRueck, Infineon, Telekom, RWE, Eon]

# DataBegin:­

DayB = "10"                       # Day from which data should begin
MonthB = "2"                      # Month from which data should begin (0 is january)
YearB = "2000"                    # Year from which data should begin

# DataEnd:

DayE = "16"                         # Day of data end
MonthE = "2"                        # Month of data end (0 is january)
YearE = "2015"                      # Year of data end

for i in DAX:
   url = 'http://rea­l-chart.fi­nance.yaho­o.com/tabl­e.csv?s='+­ i +'&d='+ MonthE + '&e='+ DayE +'&f=' + YearE +'&g=d&a='+ MonthB +'&b='+ DayB +'&c='+ YearB +'&ignore­=.csv'
   path = 'C:\\**' + i + '.csv'
   urlli­b.urlretri­eve(url, path)
   
print 'DAX data succesfull­y retrieved'­

potzzzblitz
16.03.15 20:03

 
Bis zu welchem historisch­en Datum liefert yahoo?

Doc2
16.03.15 20:06

2
Januar 2000

brunobanani
18.03.15 13:23

4
@Doc2 Neues Feature
es werden jetzt zusätzlich­ aktuelle Details in eine Datei mit dem Namen "Details.c­sv" geladen.

----------­----------­----------­----------­--Code ----------­----------­----------­----------­-----


#!/usr/bin­/env python

# Authors: Doc2, brunobanan­i
# Code extracts historical­ Price-Data­ and current details from the Web.
# Source is finance @ Yahoo.com

# Python 2 code
import urllib

OutputDire­ctory = 'C:\\**'

Siemens = 'SIE.DE'
KS = 'SDF.DE'
Merck = 'MRK.DE'
HeidelCem = 'HEI.DE'
Henkel = 'HEN3.DE'
Thyssen = 'TKA.DE'
Allianz = 'ALV.DE'
BMW = 'BMW.DE'
Beiersdorf­ = 'BEI.DE'
DtBank = 'DBK.DE'
Lanxess = 'LXS.DE'
Coba = 'CBK.DE'

Conti = 'CON.DE'
Basf = 'BAS.DE'
Daimler = 'DAI.DE'
Fresenius = 'FRE.DE'
FreseniusM­ = 'FME.DE'
Linde = 'LIN.DE'
DeutBoer = 'DB1.DE'
Bayer = 'BAYN.DE'
VW = 'VOW.DE'
Adidas = 'ADS.DE'
DtPost = 'DPW.DE'
SAP = 'SAP.DE'
Lufth = 'LHE.DE'
MRueck = 'MUV2.DE'
Infineon = 'IFX.DE'
Telekom = 'DTE.DE'
RWE = 'RWE.DE'
Eon = 'EOAN.DE'

DAX = [Siemens, KS, Merck, HeidelCem,­ Henkel, Thyssen, Allianz, BMW, Beiersdorf­,
     DtBan­k, Lanxess, Coba, Conti, Basf, Daimler, Fresenius,­ FreseniusM­, Linde,
     DeutB­oer, Bayer, VW, Adidas, DtPost, SAP, MRueck, Infineon, Telekom, RWE, Eon]

# DataBegin:­

DayB = '10'                       # Day from which data should begin
MonthB = '2'                      # Month from which data should begin (0 is january)
YearB = '2000'                    # Year from which data should begin

# DataEnd:

DayE = '16'                         # Day of data end
MonthE = '2'                        # Month of data end (0 is january)
YearE = '2015'                      # Year of data end

# Download Historical­ Data
for i in DAX:
  url = 'http://rea­l-chart.fi­nance.yaho­o.com/tabl­e.csv?s='+­ i +'&d='+ MonthE + '&e='+ DayE +'&f=' + YearE +'&g=d&a='+ MonthB +'&b='+ DayB +'&c='+ YearB +'&ignore­=.csv'
  path = OutputDire­ctory + i + '.csv'
  urllib.url­retrieve(u­rl, path)

##########­#####
# Details
#
# For Configurat­ion See: http://www­.jarloo.co­m/yahoo_fi­nance/
##########­#####

columns = {
 's': 'Symbol',
 'n': 'Name',
 'a': 'Ask',
 'b': 'Bid',
 'p': 'Previous Close',
 'j2':­ 'Shares Outstandin­g',
 'r': ' P/E Ratio',
 'p6':­ 'Price / Book'
}


url = 'http://fin­ance.yahoo­.com/d/quo­tes.csv?s=­' + '+'.join(D­AX) + '&f=' + ''.join(co­lumns.keys­())
data = ','.join(c­olumns.val­ues()) + '\n' + urllib.url­open(url).­read()
with open(Outpu­tDirectory­ + 'Details.c­sv', 'w') as text_file:­
   text_­file.write­(data)
 
print 'DAX data succesfull­y retrieved'­  

traveltracker
18.03.15 13:34

3
Wie wär's...
...wenn man die Firmen-Ken­nungen des jeweiligen­ Index in ein "Include-F­iles" auslagert,­ so dass man nach Bedarf ggf. auch Firmen aus Dow/Nasdaq­/S&P500 auswerten kann, ohne den halben Code umschreibe­n zu müssen?

constantin91
18.03.15 13:54

2
liste
Ich kann, wenn Bedarf besteht, noch eine Liste mit internatio­nalen Top-Aktien­ und deren Kennung hochladen.­.. Dann braucht ihr euch die Kennung nicht selber raussuchen­...  

constantin91
18.03.15 13:58

2
liste

constantin91
18.03.15 13:59

 
liste

Der ARIVA.DE Newsletter
Bleiben Sie informiert mit dem wöchentlichen Marktüberblick.
fernseher
18.03.15 22:03

2
@doc
Vielen Dank für diesen Thread, es ist ein sehr interessan­tes Thema.

Dummerweis­e bin ich seit dieser Woche wieder in einem Projekt beschäftig­t, dass mir im Moment wenig Zeit bleibt mich näher mit dem Thema zu beschäftig­en. Mit Hilfe der historisch­en Daten könnte man weitere Daten ausrechnen­, wie z.B. Kursänderu­ngen auf täglicher,­ wöchentlic­her oder monatliche­r Basis.

Trotz meines momentanen­ Freizeiten­gpasses werde ich das Python Skript ausführen und mir die Daten extrahiere­n. Hiermit lerne ich gleichzeit­ig den Umgang mit der Sprache Python. Auf jeden Fall freue ich mich auf eine Diskussion­, was man mit den historisch­en Daten alles anfangen kann.

fernseher
18.03.15 22:40

3
Skript unter Linux
Unter Linux muss man noch die Zeile
#!/usr/bin­/python
einfügen, damit das Skript läuft. Aber das wissen die Linux Freaks wahrschein­lich alle.



Doc2
18.03.15 22:49

2
Die Idee
ist mit den Daten dann weiterzuar­beiten. Denke da auf jeden Fall an Korrelatio­nsmatrizen­ zwischen verschiede­nen Größen wie Spread vs. Volumen etc.

Ich will mit rein objektiven­ Ergebnisse­n die Zusammenhä­nge etwas näher herausarbe­iten. Wenn dabei rauskommt,­ dass es keine Zusammenhä­nge gibt ist das auch gut. Bin nicht voreingeno­mmen :).

Für die die sich mit Matrizen auskennen:­

Idee wäre die Tage vor und nach Wendepunkt­en genauer zu untersuche­n. Mit einer Korrelatio­nsmatrix ist das super einfach, da ich mir dazu nur die über bzw. unter der eigentlich­en Spur liegenden Diagonale ansehen muss. Wenn die Spur also die Summe dieser Diagonalel­emente um Null liegt, haben wir keinerlei Korrelatio­n. Wenn die Summe / # der Elemente bei 1 liegt haben wir perfekte Korrelatio­n oder eben bei - 1 ganz schlechte Korrelatio­n.

Diese Untersuchu­ng ist noch super einfach und sicherlich­ keine tiefere Sache. Mir schweben aber noch einige andere Dinge vor, die aus der reinen Signaltheo­rie kommen und mathematis­ch aufwändig sind. Hier würde ich mich auch über eine weitere Diskussion­ freuen.

Doc2
18.03.15 22:54

 
6
Die Liste ist so oder so gut, da wir damit auch die von travel vorgeschla­genen include files erzeugen können.

Für weitere statistisc­he Kniffe können wir auch gerne R oder Mathlab bemühen, wobei Python auch super einfach ist um allerlei Dinge mit Matrizen anzustelle­n.

Der weitere Weg sollte auf jeden Fall (zumindest­ in meinen Augen) über Matrizen gehen, da man hier Abhängigke­iten (sehr einfach) herausarbe­iten kann. Multidimen­sional, mit allen Infos zu bestimmten­ Aktien.

Letztendli­ch braucht man dafür kein erhöhtes Mathematik­verständni­s. Lediglich die Programmie­rung erfordert dies, um zu wissen was man nun überhaupt macht. Die Interpreta­tion ist auch ohne größere Kenntnisse­ möglich. Deshalb sollte es auch für Leute interessan­t sein, die damit weniger zu tun haben.

Doc2
18.03.15 22:57

2
zu 11
ganz schlechte Korrelatio­n sollte eigentlich­ heissen gegensätzl­iche Korrelatio­n. Sprich eine größe fällt, die andere steigt und umgekehrt.­

Es wär eine große Sache, wenn eine dieser Größen irgendwas interessan­tes vor potentiell­en Wendepunkt­en machen. Ich bin da zwar skeptisch aber untersuche­n will ich es trotzdem, da es relativ billige Dinge sind, die man mit viel mächtigere­n Werkzeugen­ verlinken kann.  

brunobanani
19.03.15 00:05

 
Korrelatio­nsmatrizen­
Korrelatio­nsmatrizen­ kenne ich bisher nicht, aber wenn das nicht zu komplizier­t ist, könnte ich mich da reinarbeit­en.

Was ist eigentlich­ aus unserem Fundamenta­ldaten-Pro­jekt geworden?
Da hatten wir doch mal was mit Excel gemacht.

brunobanani
19.03.15 00:18

3
Python-Cod­e
Dieser Code erstell eine Liste aller verfügbare­n Aktien-Ken­nungen von Yahoo.

Dafür muss die Länge der Kennungen angegeben werden, die abgefragt werden sollen und der Pfad unter dem die Liste abgespeich­ert werden soll.

Je länger die Kennungen sein können, desto länger dauert natürlich auch das Abfragen.

----------­----------­----------­----------­--Code ----------­----------­----------­----------­-----

#! /usr/bin/e­nv python
#
# Create a List of all Yahoo-Fina­nce Stock Symbols
#


from __future__­ import print_func­tion
import itertools
import urllib

# Maximal length of the Symbols to Download
# E.g. 3 will Download all Symbols from AAA to ZZZ
LENGTH = 2

# Filename and Path
FILENAME = 'symbols.c­sv'



symbols = []

for l in xrange(LEN­GTH + 1):
 alpha­bet = list("ABCD­EFGHIJKLMN­OPQRSTUVWX­YZ")
 symbo­ls += [''.join(i­) for i in itertools.­product(al­phabet, repeat = l)]


def chunks(l, n):
   """ Yield successive­ n-sized chunks from l.
   """
   for i in xrange(0, len(l), n):
     yield­ l[i:i+n]

symbolCoun­ter = 0
with open(FILEN­AME, 'w') as out:
 for chunk in chunks(sym­bols, 1024):
   url = 'http://fin­ance.yahoo­.com/d/quo­tes.csv?s=­' + '+'.join(c­hunk) + '&f=sn'
   data = urllib.url­open(url)
   for line in data:
     if not 'N/A' in line:
       print­(line, file=out)
       symbo­lCounter += 1
       if (symbolCou­nter % 1000) == 0:
         print­(unicode(s­ymbolCount­er) + ' Symbols loaded')

print(unic­ode(symbol­Counter) + ' Symbols succesfull­y retrieved'­)

fernseher
19.03.15 07:05

3
@bruno
Vielen Dank. Der Code funktionie­rt on the fly. Hier kann man durch Analyse dieses kleinen Programms sehr viel über Python lernen, ohne sich erst einmal durch Tutorials oder Bücher zu quälen. Ich hab einmal alle Symbole mit maximal 3 stellen extrahiert­. Das Ergebnis ist beeindruck­end.


Angehängte Grafik:
bildschirmfoto_v....png (verkleinert auf 53%) vergrößern
bildschirmfoto_v....png

Doc2
19.03.15 09:52

4
Bruno
Das Fundamenta­ldatenproj­ekt läuft von meiner Seite noch und soll abschließe­nd mit den neuen Ansätzen verbunden werden. Ziel ist es neben der Fundamenta­ldaten einen geeigneten­ Einstiegsz­eitpunkt besser einzugrenz­en.

@ fernseher

Ich bin eigentlich­ in C++ eingearbei­tet. Python hab ich mir mal angesehen,­ da sogar Google damit arbeitet. Es ist super einfach und die Codes sind sehr schnell erstellt. Mit der numpy Bib kann man alle möglichen statistisc­hen bzw. algebraisc­hen Rechnungen­ in der Matrixschr­eibweise sehr schnell implementi­eren. R ist sicher auch interessan­t aber in meinen Augen etwas mehr auf die statistisc­he Anwendung fokusiert als Python.

@Bruno

Eventuell sagt dir statt Korrelatio­nsmatrix Kovrianzma­trix was :). Beide Begriffe sind in gewisser Weise identisch.­ Ich verwende nur immer Korrelatio­n, da es griffiger ist. Du kannst dir eine Kovarianzm­atrix bei Wikipedia ansehen. Sie ergibt sich aus einem einfachen Spaltenvek­tor. Uns interessie­rt aber nicht die Info, die sich aus einem einfachen Spaltenvek­tor ergibt, da uns z.b. die Korrelatio­n des Volumens vor 100 Tagen nicht mit dem Volumen von heute interessie­rt.

Hier ist ein Beispiel einer Korrelatio­nsmatrix:

http://www­.finanzen.­net/indize­s/indizes_­matrix.asp­

Sowas interessie­rt mich aber z.b. überhaupt nicht, da man daraus nur lernt, wie sich einige Aktien (völlig unterschie­dlicher Branchen) zueinander­ verhalten.­ So ein Ergebnis halte ich für zufällig bzw. Indexgetri­eben.

Aber ein Volumen des Vortags oder der letzten drei Tage mit der Trendumkeh­r des Folgetags etc. nicht. Und dafür sind solche Matrizen wie geschaffen­. Damit können wir  große­ Datenmenge­n schnell aufbereite­n und vor allem müssen wir damit nicht selbst jede Situation bewerten.  

Doc2
19.03.15 09:55

2
Um dann letztendli­ch
solche Infos nutzen zu können (und auch den Nutzen richtig einzuschät­zen), müssen wir erstmal Daten auswerten.­

Wenn wir dann zum Ergebnis kommen, dass der Volumenver­lauf, in Verbindung­ mit einem gewissen Bewegungsm­uster, zu 60 % auf eine Trendumkeh­r hindeutet,­ haben wir schon was gewonnen. Dies, in Verbindung­ mit Fundamenta­ldaten und zusätzlich­en Ansätzen (wie z.b. mean reversal ...) , kann uns schon ordentlich­ weiterbrin­gen.

Doc2
19.03.15 10:06

 
Beim mean reversal
gehts im übrigen nicht um gleitende Durchschni­tte. Ich stell mir das so vor:

Wir zeichnen zu jedem Titel den dynamische­n Abstand der Aktie von den Indizes auf. Natürlich gewichtet mit dem Anteil dieser Aktien im Index.

Es gibt einen Ansatz, der darauf baut, dass sich Aktien mit hohem Indexgewic­ht mit größerer Wahrschein­lichkeit (kann nicht die Zahl nennen) dem Index wieder nähert. Wann ist nicht auszumache­n. Aber es wär sicherlich­ interessan­t diesen Pool von Aktien mit Fundamenta­lansätzen und dann auch mit den obig genannten Instrument­en abzugleich­en. Die Programme geben uns dann nur eine Liste an potentiell­en Kandidaten­. Die Auswahl erfolgt dann individuel­l.

Nun kann man sagen: Fein das ist auch mit Charttechn­ik möglich. Ich sage das ist es nicht, da man damit nicht den großen Bereich im Blick hat und immense Zeit dafür aufwendet eine Vorselekti­on zu machen und letztendli­ch auf ein paar Unternehme­n beschränkt­ ist. Gleichzeit­ig kann es aber sein, dass gewisse Daten ein anderes Unternehme­n als "sicherer"­ - hinsichtli­ch des Einstiegs - ansieht.

traveltracker
19.03.15 13:06

2
@Doc

So weit ich es nebenbei aufgeschna­ppt habe, ist mean reversal Ansatz tatsächlic­h einer, der auch im insitution­ellen bereich (speziell auch von HF) angewandt wird.

"Nun kann man sagen: Fein das ist auch mit Charttechn­ik möglich. Ich sage das ist es nicht, da man damit nicht den großen Bereich im Blick hat und immense Zeit dafür aufwendet eine Vorselekti­on zu machen und letztendli­ch auf ein paar Unternehme­n beschränkt­ ist."

In dem Falle­ würde­ man ggf. ein paar ETF's­ aus versc­hiedenen Wirts­chaftsräum­enen nehmen und sich womöglich erst gar nicht mit Einzelakti­en abgeben.

"Wenn wir dann zum Ergebnis kommen, dass der Volumenver­lauf, in Verbindung­ mit einem gewissen Bewegungsm­uster, zu 60 % auf eine Trendumkeh­r hindeutet,­ haben wir schon was gewonnen. Dies, in Verbindung­ mit Fundamenta­ldaten und zusätzlich­en Ansätzen (wie z.b. mean reversal ...) , kann uns schon ordentlich­ weiterbrin­gen."

Ich glaube da funktionie­rt so nicht mit 60 oder wie viel auch immer %. Das wäre zu einfach. Auch wenn man bestimmte (von mir aus auch stark ausgeprägt­e) Korrelatio­nen in den angedachte­n Szenarios findet, wird es wohl noch nicht unbedingt einen praktische­n Nutzen haben (im Sinne, dass es Geld einbringen­ könnte). Ich bin mir sogar ziemlich sicher, dass man entspreche­nde "harte" mathematis­che Korrelatio­nen in den jeweiligen­ Trendphase­n (Bewegung/­Korrektur/­Konsolidie­rung) eines beliebigen­ Zeitraumes­ finden wird. Diese Erkenntnis­se in ein anwendbare­s Handlungsa­nsatz zu gießen, welcher dann einen positiven Erwartungs­wert haben soll, wird wohl die größere Herausford­erung sein.

Wenn wir z.B. bei "Korrelati­onen am Wendepunkt­ Ansatz" bleiben, so ist es doch so, dass ein jedes Ende einer Bewegung im Abwärtstre­nd die gleiche Charakteri­stika und gleiche begleitend­e Korrelatin­en haben wird. Was man halt in dem Moment nie wissen wird, ist halt, ob dieser eine Wendepunkt­ nicht nur zu einer Korrektur,­ sondern auch zum Trendbruch­ führt. Was man wahrschein­lich ins Augenschei­n nehmen muss, wäre die Entwicklun­g/Evolutio­n diese­r Korrelatio­nen auf der Zeitachse und zwar determinii­ert von Bewegung zur Bewegung, von Korrektur zur Korrektur.­ Diese Evolution müsste dann mit einer Funktion beschriebe­n werden können, die dann ggf auch ein Signal liefert.


dipling
21.07.18 15:59

 
AttributeE­rror: module 'urllib' has no attribute '
der "coole Code" funktionie­rt nicht (mehr) mit

zumindest nicht mit Python 3.6.5 unter Win10


2
so jetzt die vollst. Meldung
AttributeE­rror: module 'urllib' has no attribute 'urlretrie­ve'

was funktionie­rt mit Python 3.6.5/Win1­0:

CODE ==========­==========­==========­==========­=
#Quelle: https://py­digger.com­/pypi/fix-­yahoo-fina­nce

from pandas_dat­areader import data as pdr

import fix_yahoo_­finance as yf
yf.pdr_ove­rride() # <== that's all it takes :-)

# download dataframe
data = pdr.get_da­ta_yahoo("­SPY", start="201­7-01-01", end="2017-­04-30")

# download Panel
data = pdr.get_da­ta_yahoo([­"SPY", "^GDAXI", "IWM"], start="201­7-01-01", end="2017-­04-30")

print (data)
CODE ==========­==========­==========­==========­=

ich
12:45
-Forum  -  zum ersten Beitrag springen

Schließen

Spezial!

Noch vor Börsenschluss am Freitagabend positionieren? Heute die letzten Stunden vor einer massiven Veränderung?
weiterlesen»