[PHP] Script Konzept

Quiny89

abgemeldet
18 Oktober 2007
123
17
Moin

Also ich versuche eine Art "Börsen-script" zu coden. Das heißt es gibt "Aktien" und es gibt ein "Orderbuch" in dem Orderbuch sind alle Kauf/Verkaufsaufträger eingetragen. (MYSQL Tabelle) Es nach abgabe des gebots wird in der DB gespeichert: id|user|aktie|kauf/verkauf|preis|menge

bis hierhin alles kein ding. Nun frage ich mich aber wie es am Sinnvollsten wäre die gebote zu "matchen" also einen kauf bzw verkauf zustande kommen zu lassen. Soll ich 2 arrays nehemn und in eins die verkauf und in ein anderes die kaufaufträge einlesen und die beiden dann vergleichen oder wäre das auch in sql möglich? [überhänge usw sollen hier nocheinmal weggelassen werden] also

wenn in der DB 4 datensätze stehen zb

id|user|aktie|kauf/verkauf|preis|menge
1 | 22 | 1 | verkauf | 22 | 300
2 | 25 | 2 | verkauf | 22 | 300
3 | 27 | 1 | kauf | 22 | 300
4 | 14 | 6 | verkauf | 22 | 300


dann sollen die rot makierten "matchen" also ein verkauf zustande kommen. Hat dafür jemand eine gute idee soetwas zu realisieren? bevor es hier wieder protest regnet ich möchte keine fertige lösung sodern einen evt einen Ansatz oder eine gute Idee!
 
Ich würde einfach jeden Datensatz durchgehen und immer eine If-Abfrage starten, ob denn die Menge die man kaufen will kleiner oder gleich der Menge ist die verkauft wird; genauso auch bei der Anzahl.
 
ach was ich vergessen habe. das ganze soll nicht nur beim eintragen in die db geprüft werden sonder auch später noch da ja immer neue angebote hinzu kommen. also da würde ich dann eventuell einen cronjob nehmen. Da hakt dann auch der vorschlag von patrick da ich eher einen Algorytmus suche der jeden datensatz mit jedem anderen datensatz vergleicht. [sorry das ist blöd zu erklären ich knobel schon so lange daran rum das ich selbst nicht mehr einen richtigen masterplan habe =)]
 
bei der börse kannst du einen tag, monat oder sofort handeln. bedeutet, du besitzt in der regel noch einen orderzusatz der dir aufschluss darüber gibt, wielange und in welcher form dein order gültig ist.

kommt eine neue order, verkauf oder kauf, brauchst du eigentlich nur ein sql drüber laufen lassen was dir eine sortierte antwort liefert. da immer das erste trifft (zeitlich) braucht man nur wenig komplexität. nutze also order by ASC time für die selbe aktie/usw..

wenn etwas zurück kommt, kannst du direkt weiter rechnen. kommt nix zurück, muss man halt warten.
 
das mit den zusätzen weis ich natürlich aber ich wollte es ersteinmal einfach halten! also er sollte sofort ausführen und nur zum genannten preis (drunter auch)
 
Mmmh...
Ich glaube, ich würde Käufe und Verkäufe auf zwei Tabellen verteilen und mit einem möglichst detaillierten JOIN im CronJob dann mögliche matches heraussuchen.
Im Bedarfsfall dann im PHP-Code das Beste Ergebnis herausrechnen und "zuschlagen".
 
Du brauchst doch bei einem Eintrag in der Db (ob nun Kauf oder Verkauf ist in dem Fall egal) ein genaues Gegenstück suchen. Nehmen wir an ich will 300 Aktien zu max 22 Losen kaufen, demnach suchst du vor dem Eintrag in die Db existiert eine menge 300 mit Lose <= 22 wenn ja wird der Eintrag gar nicht erst angelegt und sondern nur das Angebot gelöscht. Und andersrum genauso. Evtl musst Du noch nen order by time einbauen und limit 0, 1 damit du nur den ersten bedienst der die anfrage gestellt hatte wenn Du zB mehrere Verkäufe mit 300 Aktien hast. Oder mit order by time, price.

Mehr brauchst Du doch nicht *oder liege ich falsch :think:*, aber das hat glaube ich einer meiner Vorredner schon gepostet.
 
Nur mal so als Ansatz, bzw fast als Frage:
Ist es nicht so, das der Preis an der Börse über Angebot und Nachfrage ermittelt wird?
Ich dachte, dass diese Preis-Ermittlung über die größte Transaktionsmenge führt, also das alle Transaktionen zu einem Preis stattfinden, bei dem die größte Anzahl von Aktien gehandelt werden.
Der Verkäufer legt einen Min-Preis fest und der Käufer einen Max-Preis. Dann werden alle Angebote und Nachfragen betrachtet und der Preis bei dem die größte Anzahl an Aktien den Besitzer wechseln, wird festgesetzt und die Transaktionen durchgeführt.

Sehe ich das falsch?
 
der einzelne wert selbst, bewirkt hier wenig. es ist viel mehr die gesamte menge die am tag transferiert wird. es hängt also auch zusätzlich in der realität von der gesamten stückmenge einer aktie ab. würde die aktie 100 kosten und einer macht nen schlechten deal und verkauft sie für 80, der rest aber für 100 würde das nur auffallen, wenn die stückmenge der 80er größer als die gesamte stückmenge der 100er ist.. so als beispiel ;)
 
ich bin von meiner denkweise falsch an die sache ran gegangen! Das mit dem "crawler" der per cronjob durch die DB geht und die ANgebote vergleicht wäre ja blödsinn da es ja reicht wenn ich beim eintrag in die db checke obs passende angebote gibt.

Nur mal so als Ansatz, bzw fast als Frage:
Ist es nicht so, das der Preis an der Börse über Angebot und Nachfrage ermittelt wird?
Ich dachte, dass diese Preis-Ermittlung über die größte Transaktionsmenge führt, also das alle Transaktionen zu einem Preis stattfinden, bei dem die größte Anzahl von Aktien gehandelt werden.
Der Verkäufer legt einen Min-Preis fest und der Käufer einen Max-Preis. Dann werden alle Angebote und Nachfragen betrachtet und der Preis bei dem die größte Anzahl an Aktien den Besitzer wechseln, wird festgesetzt und die Transaktionen durchgeführt.

Sehe ich das falsch?

Ja das ist so.... das wiederum macht die sache ungemein komplizierter. um das zu realisieren muss ich doch alle möglichkeiten in php durchgehn um zu sehn wo am meisten umsatz gemacht wird?

also in etwa so
Kurs Mgl. Käufe Mgl. Verkäufe Mgl. Umsatz
27 240 400 240
28 200 480 400

(sorry für den späten post!)

nochmal ein link wer interesse hat:
Preisbildung-an-der-WP-Boerse

Fortlaufender Handel
Es stoßen nur einzelne Marktteilnehmer aufeinander
Preis der vereinbart wird gilt nur für dieses einzelne Geschäft nur für die beiden Marktteilnehmer

Meistausführungsprinzip
· Festgelegter Preis Kurs
· Zu diesem Kurs muss der Größtmögliche Umsatz zustande kommen
· Zu diesem Kurs müssen alle nicht limitierten Aufträge ausgeführt werden ( bestens/ billigsten)
Bestens – Verkauf
Billigsten Kauf
· Alle über dem Kurs limitierten Kaufaufträge müssen ausgeführt werden
· Alle unter dem Kurs limitierten Verkaufsaufträge müssen ausgeführt werden
· Zum Kurs limitierten Kauf / Verkaufsaufträge müssen wenigstens teilweise ausgeführt sein

macht ersteres in diesem fall nicht mehr sinn?
 
Zuletzt bearbeitet: