Börsenprogramm_Candlestickmuster heraussuchen

Du hast eine Idee für ein Projekt?
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Börsenprogramm_Candlestickmuster heraussuchen

Beitragvon Torsten2005 » Sonntag 11. Dezember 2005, 18:45

Hallo, ich sag gleich , es ist mein erstes größeres Programm ;
Also was soll das Programm können :
[der Quelltext kommt am Ende]

-Kurse von aktien runterladen --> gelöst ,-aktuell 2tagealte kurse(rückwirkend ca. 9 monate)
-aktelle Kursdaten des Tages aus börsenseite herausfiltern --> fast gelöst
-aus den Daten Candlestick muster heraussuchen , wie z.b hammer , morgenstern , tower usw. --> für hammer gelöst und dann ausgabe der Tage

Das soll erstmal das Grundgerüst sein , natürlich kann man das später noch erweitern !

Probleme:
Allerdings tun sich da jetzt einige problem auf , weil ich bis jetzt auf Klassen , methoden verzichtet habe , weil ich noch nicht so ganz damit klar komme .
- Daten erweitern : damit meine ich , die csv-datei umfasst daten vom 28.2.2005 bis 7.12.05 , für den 9.12 bekomm ich es von der aktuellen seite, am montag den 12.12 bekomme ich die daten für den 8.12 am dienstag für den 9.12 usw. , die daten vom 28. 2 sind dann aber weg weil csv. datei überschrieben?????

- also aktuelle Daten der csv-datei hinzufügen ??
- wichtigste Frage: welche Klassen , sind hier am sinnvollsten , ?

Naja villeicht ist hier noch ein charttechnisch innteressierter
kurz zum Programm : Ordner müssen individuell verändert werden ,; beim start öffnet sich ein fenster mit 2 botton ; K--> Kurse holen ; W--> Muster heraussuchen , bisher nur Hammer ;
Quelltext

Code: Alles auswählen

 
#! /usr/bin/env python
# -*- coding: cp1252 -*-
from time import *
from Tkinter import *
import urllib
from re import *

heute=strftime('%d')+'-'+strftime('%b')+'-'+strftime('%y')
Wochentag=strftime('%w')           #Sonntag ist 0 ; sammstag 6
int(strftime('%d'))-1
if strftime('%w')=='6':            #Wochentagsänderung wenn So oder Sa zu Freitag
    heute=str(int(strftime('%d'))-1)+'-'+strftime('%b')+'-'+strftime('%y')
if strftime('%w')=='0':
    heute=str(int(strftime('%d'))-2)+'-'+strftime('%b')+'-'+strftime('%y')

Symbol="DCX"
Monatvon="01"
Tagvon="10"
Jahrvon="2005"
Monatbis="11"
Tagbis="09"
Jahrbis="2005"

#aktuelle daten lesen
url=("http://de.finance.yahoo.com/q?s=%s.DE" %(Symbol))
a=urllib.urlopen(url).readlines()
for i in a:
  if '</td></tr></table><br><table width="585" id="yfncsumtab" cellpadding="0"' in i:   # Zeile mit den Daten; i ist ein string
    Eroeffnungskurs=str(findall('Er\xf6ffnungskurs\S+\s\S+\d+',i))
    heute_open=str(findall('>\d+,\d+',Eroeffnungskurs)).replace('>','')   #open
    heute_Tagesspanne=str(findall('Tagesspanne\S+\s\S+\d+\s-\s\d*,\d*',i))
    heute_Tagesspanne1=str(findall('>\d+,\d+',heute_Tagesspanne))   
    heute_tief=findall('\d+,\d+',heute_Tagesspanne1)                     #tiefkurs
    heute_Tagesspanne2=str(findall('-\s\d+,\d+',heute_Tagesspanne))
    heute_hoch=heute_Tagesspanne2.replace('- ','')                       #hochkurs
    Schlusskurs=str(findall('Letzter\s*Kurs\S+\s\S+\d+',i))
    heute_letzter=str(findall('>\d+,\d+',Schlusskurs)).replace('>','')   #letzterKurs

def but1(): 
#Datei erzeugen und alte daten(2tage alt) als CSV datei runterladen
 anfrage = urllib.urlopen('http://ichart.yahoo.com/table.csv?a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&s=%s.DE&y=0&g=d&ignore=.csv' \
                          %(Monatvon,Tagvon,Jahrvon,Monatbis,Tagbis,Jahrbis,Symbol))
 datei=file('C:/Dokumente und Einstellungen/Torsten/Desktop/Boersenprogramm_Python/Daten/%s.csv' %Symbol, 'w+')  #hier kommen die Daten hin
 datei.write(anfrage.read())
 datei.close()
 anfrage.close()
   
def but2():
#Daten bearbeiten--> Datum (Format T.M.jahr) , O ,H, T,S ,V ,rest;
 daten=file('C:/Dokumente und Einstellungen/Torsten/Desktop/Boersenprogramm_Python/Daten/%s.csv' %Symbol, 'r')   
 kurse=daten.read()              #beispiel: 7-Dec-05,43.17,43.45,42.57,42.99,4392391,42.99         
 zeilen=kurse.splitlines()
 d_dcx ={}                         #Dictionary
 zeilen.remove('Date,Open,High,Low,Close,Volume,Adj. Close*')
 for z in zeilen:
    spalte=z.split(',')
    datum=spalte[0]
    open=spalte[1]
    hoch=spalte[2]
    tief=spalte[3]
    schluss=spalte[4]
    volumen=spalte[5]
#float(((float(open)-float(tief))/(float(schluss)-float(open))))
    if (float(schluss)-float(open))!=0:                  # and(float(hoch)-float(schluss))
     if  float(((float(open)-float(tief))/(float(schluss)-float(open)))) >3\
        and float(((float(hoch)-float(tief))/(float(hoch)-float(schluss)+0.0000001)))> 7.0:
            #Hammer 
      hammer=1
     else: hammer=0
    d_dcx[datum]=[open,hoch,tief,schluss,volumen,hammer]
    #print d_dcx[datum][hammer]
    #if (d_dcx[datum][hammer])==0:
    # print d_dcx[datum]
 for e in d_dcx.keys():
  #print e
  if (d_dcx[e][5])==1:            #wenn hammer
        print e
 
 

 d_dcx[heute]=[heute_open,heute_hoch,heute_tief,heute_letzter,1]   
 #neuedatei=file('C:/Dokumente und Einstellungen/Torsten/Desktop/Boersenprogramm_Python/Daten/%s_.txt' %Symbol, 'w+')
 #Oberflächengestalltung     
fenster1 = Tk()

titel = Label(master=fenster1, text='Börsenprogramm',fg='blue',font=(sb,15,'bold','underline'),bd=10)
titel.pack()
fenster1.button=Button(master=fenster1, text='Kurse',command= but1,fg='red',font=(st,10),bd=5,height=1)
fenster1.button.pack(side=LEFT)

fenster1.button=Button(master=fenster1 , text='W',command=but2,fg='red',font=(st,10),bd=5)
fenster1.button.pack(side=LEFT)


fenster1.mainloop()                                 
Zuletzt geändert von Torsten2005 am Sonntag 4. Juni 2006, 11:32, insgesamt 1-mal geändert.
BlackJack

Beitragvon BlackJack » Sonntag 11. Dezember 2005, 22:37

Für CSV Daten ist das `csv` Modul geeignet.

Ansonsten kann man CSV Daten mit den gleichen "Spalten" ja einfach an die Datei anhängen, solange keine Kopfzeile mit Spaltennamen am Anfang steht. Sonst muss man die überspringen.

Eine Textdatei kann man mit ``open(name, 'a')`` öffnen, dann werden geschriebene Zeilen an die schon vorhandene Datei angehängt.
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon Torsten2005 » Dienstag 13. Dezember 2005, 15:10

mm ok , ich werd es wahrscheinlich mit einer Datenbank machen .

Ein anderes problem:
ich muss das dictionary oder die datenbank nacht datum sortieren !??
also der schlüssel ist das datum , z.b so 5-Dec-05 ; die werte sind dann
open,hoch,tief,schluss,volumen, muster1 usw.....;

Und ich muss die daten nach datum sortieren , weil ich z.b auf ein datum zugreife und dann auf den vortag oder den tag danach , usw.

Also muss ich doch die datenbank in eine liste umwandeln und dann sortieren ??

ein kleines beispiel wäre nicht schlecht , porbleme machtr mir das Datumformat und és gibt ja nur datum für Mo- FR , nicht für sa , so !!

Gruß
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Beitragvon Mr_Snede » Dienstag 13. Dezember 2005, 18:15

Forumssuche mit dem Suchbegriff:
datum

unter den ersten 10 Einträgen:
http://www.python-forum.de/viewtopic.ph ... ight=datum

cu Sebastian
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon Torsten2005 » Mittwoch 14. Dezember 2005, 16:50

mm danke hat mir überhauot nicht weiter geholfen , :cry:

ich habe eine datenbank/dictionary mit den datum als schlüssel und ich brauch die reihenfolge das datums , ich hab da nix vergleichbares gefunden!
mir ist klar , ich kann die keys in listen dann sortieren , aber wie sag ich das es sich um datum handelt vom format 5-Dec-05 ???????

Gruß
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 14. Dezember 2005, 17:06

Pack es doch in eine SQLite DB...

Oder ändere das Datum von z.B. 01.12.2005 nach 20051201... Dann kannst du es mit sort() behandeln...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon Torsten2005 » Mittwoch 14. Dezember 2005, 22:00

jens hat geschrieben:Pack es doch in eine SQLite DB...

Oder ändere das Datum von z.B. 01.12.2005 nach 20051201... Dann kannst du es mit sort() behandeln...


-guter vorschlag , thx
habs so gemacht:

Code: Alles auswählen

def datumformat(sp): #Format von 5-Dec-05 nach 20051205
   k=sp.split('-')       #liste
   for i in k:
      m=''
      d=''
      if strptime(k[1],'%b')[1]<10:  m='0'                 
      if strptime(k[0],'%d')[2]<10:  d='0'
      sp=str(strptime(k[2],'%y')[0])+m+str(strptime(k[1],'%b')[1])+d+str(strptime(k[0],'%d')[2])
      return sp

datum=datumformat(datum) 
liste1=[e for e in d_dcx.keys() if (d_dcx[e][5])==1]        #wenn hammer
liste1.sort()
print liste1
liste2=[e for e in d_dcx.keys() if (d_dcx[e][6])==1]       #wenn roter hammer
liste2.sort()
print liste2

Torsten2005
User
Beiträge: 34
Registriert: Mittwoch 2. November 2005, 15:37
Wohnort: Berlin
Kontaktdaten:

classen

Beitragvon Torsten2005 » Sonntag 4. Juni 2006, 11:50

geändert:

so , hab versucht alles in Klassen zu machen , komm irgendwie nicht weiter, die Oberflächen-klasse ist soweit stimmig ,
die datenklasse , da stimmen die variablen nicht, die wird ja auch noch nicht angesprochen .

hat jemand vielleicht ne Idee welche klassen hier sinnvoll wären .
Sollte man nur eine nehmen? Oder wann muss man mehr als nur eine Klasse nehmen?

ich poste mal neuen code und bild von der oberfläche.

Code: Alles auswählen

from time import *
import urllib
from re import *
import csv
import pickle
from Tkinter import *

class Daten:
   pass
   def kurse_altholen(self):
      anfrage = urllib.urlopen('http://ichart.yahoo.com/table.csv?a=%s&b=%s&c=%s&d=%s&e=%s&f=%s&s=%s.DE&y=0&g=d&ignore=.csv' \
                          %(Monatvon,Tagvon,Jahrvon,Monatbis,Tagbis,Jahrbis,Aktie))
      datei=file('/Boersenprogramm/Daten/%s1.csv' %d, 'w+')                      #hier kommen die Daten hin
      datei.write(anfrage.read())
      datei.close()
      anfrage.close()
   def kurse_neuholen(self):
      url=("http://de.finance.yahoo.com/q?s=%s.DE" %d)   # F--> Frankfurt  ; DE--> Xetra
      a=urllib.urlopen(url).readlines()
      for i in a:
         if '</td></tr></table><br><table width="585" id="yfncsumtab" cellpadding="0"' in i:   # Zeile mit den Daten; i ist ein string
            Eroeffnungskurs=str(findall('Er\xf6ffnungskurs\S+\s\S+\d+',i))
            heute_open=str(findall('>\d+,\d+',Eroeffnungskurs)).replace('>','')          #open
            heute_open=heute_open.replace('[','') ;  heute_open=heute_open.replace(']','')
            heute_open=heute_open.replace("'",'') ;  heute_open=heute_open.replace(",",'.')
            heute_Tagesspanne=str(findall('Tagesspanne\S+\s\S+\d+\s-\s\d*,\d*',i))
            heute_Tagesspanne1=str(findall('>\d+,\d+',heute_Tagesspanne))   
            heute_tief=str(findall('\d+,\d+',heute_Tagesspanne1))                     #tiefkurs
            heute_tief=heute_tief.replace('[','') ; heute_tief=heute_tief.replace(']','')
            heute_tief=heute_tief.replace("'",'') ;  heute_tief=heute_tief.replace(",",'.')
            heute_Tagesspanne2=str(findall('-\s\d+,\d+',heute_Tagesspanne))
            heute_hoch=heute_Tagesspanne2.replace('- ','')                       #hochkurs
            heute_hoch=heute_hoch.replace('[','') ; heute_hoch=heute_hoch.replace(']','')
            heute_hoch=heute_hoch.replace("'",'') ; heute_hoch=heute_hoch.replace(",",'.')
            Schlusskurs=str(findall('Letzter\s*Kurs\S+\s\S+\d+',i))
            heute_letzter=str(findall('>\d+,\d+',Schlusskurs)).replace('>','')   #letzterKurs
            heute_letzter=heute_letzter.replace('[','') ;  heute_letzter=heute_letzter.replace(']','')
            heute_letzter=heute_letzter.replace("'",'') ;  heute_letzter=heute_letzter.replace(",",'.')
            hammer=0
            hammerrot=0
      print heute_letzter
   def muster_suchen(self):
      if float(heute_open)-float(heute_letzter)!=0.0:        #Hammer  weiß         
         if  ((float(heute_hoch)-float(heute_tief))/(float(heute_letzter)-float(heute_open))) >2.4 \
            and ((float(heute_hoch)-float(heute_tief))/(float(heute_hoch)-float(heute_letzter)+0.0000001))> 6.0:   
               hammer=1
           if  ((float(heute_open)-float(heute_tief))/(float(heute_open)-float(heute_letzter)+0.0000001)) >3 \
            and ((float(heute_hoch)-float(heute_tief))/(float(heute_hoch)-float(heute_open)+0.0000001))> 6.0:      #Hammer  rot
               hammerrot=1
   
   def altkurse_dic(self):
      aktie=csv.reader(open('/Boersenprogramm/Daten/dcx.csv', "rb"))
      for row in aktie:
         self.dic[row[0]]=[row[1],row[2],row[3],row[4],row[5]]
   
   
   def neukurse_dic(self):
      pass
   
   def dic_speichern(self):
      datei=file('/Boersenprogramm/Daten/dcx_neu.csv','w')
      pickle.dump(dic,datei) #Dictionaery in der neuen Datei gespeichert
      datei.close
   
   def dic_laden(self):
      datei=file('/Boersenprogramm/Daten/dcx_neu.csv','r')
      daten = pickle.load(datei) #Dictionaery von der neuen Datei geladen
      datei.close()


class Oberflaeche:
   
   def __init__(self):
      
      #Widget instanzieren
      self.fenster = Tk()
      self.fenster.title('Musterfinden')
      self.variable_radiobutton=IntVar()
      self.frame5=Frame(master=self.fenster,width=1500)
      self.frame1=Frame(master=self.frame5,width=120) # für Radiobuttons Auswahl
      self.frame2=Frame(master=self.frame5) # für 2 Buttons Kurse laden 8alt und neu       #hier Zeile 20
      self.frame3=Frame(master=self.frame5) # für Buttons Muster suchen  (m1  - m10)
      self.frame4=Frame(master=self.fenster) # für Textfeld als Ausgabe und Listbox der Aktien des Index
      
      self.dax=Radiobutton(master=self.frame1,text='Dax', value= 1, variable=self.variable_radiobutton, command=self.ausgabe_dax)
      self.mdax=Radiobutton(master=self.frame1,text='MDax', value= 2, variable=self.variable_radiobutton,command=self.ausgabe_mdax).grid(column=1, row=0)
      self.tecdax=Radiobutton(master=self.frame1,text='TecDax',value= 3, variable=self.variable_radiobutton,command=self.ausgabe_tecdax).grid(column=2, row=0)
      self.stoxx=Radiobutton(master=self.frame1,text='Stoxx50',value= 4, variable=self.variable_radiobutton,command=self.ausgabe_stoxx).grid(column=3, row=0)
      #self.dax.select()
      self.dax.grid(column=0, row=0)
      
      self.k1_Button=Button(master=self.frame2, text='K_alt',width=10,command=self.K1).grid(column=0, row=0)
      self.k2_Button=Button(master=self.frame2, text='K_neu',width=10,command=self.K2).grid(column=1, row=0)
      
      self.m1Button=Button(master=self.frame3, text='M1',command=self.m1).grid(column=0, row=0)
      self.m2Button=Button(master=self.frame3, text='M2',command=self.m2).grid(column=1, row=0)
      self.m3Button=Button(master=self.frame3, text='M3',command=self.m3).grid(column=2, row=0)
      self.m4Button=Button(master=self.frame3, text='M4',command=self.m4).grid(column=3, row=0)
      self.m5Button=Button(master=self.frame3, text='M5',command=self.m5).grid(column=4, row=0)
            
      self.scrollbar1=Scrollbar(master=self.frame4)
      self.scrollbar2=Scrollbar(master=self.frame4)
      
      self.listbox=Listbox(master=self.frame4,selectmode=SINGLE,width=30,height=46,yscrollcommand=self.scrollbar2.set)
      self.ausgabe=Text(master=self.frame4 , font=('Arial',10),width=90,height=40,yscrollcommand=self.scrollbar1.set)
      self.scrollbar1.config(command=self.ausgabe.yview)
      self.scrollbar2.config(command=self.listbox.yview)
      
      self.layout()                                           #für die Übersicht eine extra Methode pack
      #self.auswertung_radiobutton()
      #self.ausgabe_dax()
      self.fenster.mainloop()
      
   def layout(self):
      self.frame1.pack(side=LEFT,anchor=W)
      self.frame2.pack(side=LEFT,padx=20,anchor=CENTER)
      self.frame3.pack(side=RIGHT,padx=20,anchor=E)
      self.frame5.pack(side=TOP,pady=35)
      self.frame4.pack(anchor=CENTER)
                  
      self.listbox.pack(side=LEFT)
      self.scrollbar2.pack(side=LEFT,fill =Y,anchor=W)
      self.ausgabe.pack(side=LEFT)
      self.scrollbar1.pack(side=RIGHT,fill =Y)
      
   def ausgabe_dax(self):
      self.loeschen_listbox()
      self.liste_dax=['ADS','FME','ALV','HEN3','ALT','HVM','BAS','IFX','BMW','LIN','BAY','MAN','CBK','MEO','MUV2','DCX','RWE','DBK','SAP','DPW','DB1','SIE','LHA','TKA','DTE','TUI','EOA','VOW']
      for item in self.liste_dax:
         self.listbox.insert(END, item)
   def ausgabe_mdax(self):
      self.loeschen_listbox()
      self.liste_mdax=['ARL', 'IWK', 'AMB2', 'SDF', 'BZL', 'KAR', 'BEI', 'KRN', 'BZL', 'LEO', 'GBF', 'MDN', 'CLS', 'MRK', 'MGT', 'DGX', 'MLP', 'DEP', 'MPC', 'DOU', 'NDA', 'DEQ', 'PSM', 'DPB', 'PUM', 'EAD', 'RHM3', 'FIE', 'RHK3', 'FRA', 'SZG', 'FRE3', 'SRZ', 'HNR1', 'SGL', 'HDD', 'SAZ', 'HEI', 'SZU', 'HOT', 'TNH', 'BOS3', 'HRX', 'VOS', 'IKB', 'IVG', 'WIN']   
      for item in self.liste_mdax:
         self.listbox.insert(END, item)
   
   def ausgabe_tecdax(self):
      self.loeschen_listbox()
      self.liste_tecdax=['AIX', 'AUS', 'BBZ', 'BC8', 'DRW3', 'ELG', 'EPC', 'EVT', 'FRN', 'FEW', 'IDS', 'IDS', 'JEN', 'KBC', 'MNSN', 'MOB', 'MOR', 'PFV', 'QGENF', 'QSC', 'RSI', 'SNG', 'SOW', 'SWV', 'TOI', 'TLI', 'UTDI', 'WE2']
      for item in self.liste_tecdax:
         self.listbox.insert(END, item)
   
   def ausgabe_stoxx(self):
      self.loeschen_listbox()
      self.liste_stoxx=['ALV', 'BAS', 'BAY', 'DCX', 'DBK', 'EOA', 'DTE', 'MUV2', 'RWE', 'SAP', 'SIE', 'CS', 'CGE', 'BNP', 'CA', 'ACA', 'FTE', 'OR', 'MC', 'LG', 'SGO', 'GLE', 'SZE', 'FP', 'EX', 'BN', 'AI', 'AXAF', 'CGEP', 'BNPP', 'CARR', 'CAGR', 'FTE', 'OREP', 'LVMH', 'LAFP', 'SGOB', 'SOGN', 'LYOE', 'TOTF', 'EAUG', 'DANO', 'AI']
      for item in self.liste_stoxx:
         self.listbox.insert(END, item)
         
   def loeschen_listbox(self): #Listbox wird gelöscht
      self.listbox.delete(0,END)
      
   ##############################################   
   #Radiobutton haben die Kontrollvariable "self.variable_radiobutton "   
   
   def K1(self):
      pass
   def K2(self):
      pass
   def m1(self):
      pass
   def m2(self):
      pass
   def m3(self):
      pass
   def m4(self):
      pass
   def m5(self):
      pass
   
#Hauptprogramm
b=Oberflaeche()

Bild

kurze Programmbeschreibung:
-Radiobuttons wählen die Liste aus , die in der Listbox ausgegeben wird ,und später mit K1 runtergeladen wird.
-K2 ist dann nochmal da um aktuelle Daten runterzuladen ;
Die buttons M1 bis M5 (später erweitert) durchsuchen dann die daten (der entsprechenden Liste) nach Muster und geben diese dann ins Textfeld aus ;

-Klingt eigentlich recht simpel , aber wie gesagt ist mein erstes Programm

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]