|
Moin moin,
ich bin gerade dabei ein Browsergame zu entwickeln, dass . eine Börse enthält. Diese soll natürlich voll automatisch ablaufen und eingehende Kauf- und Verkaufsaufträge abwickeln. Das dafür verwendete Prinzip soll das Meistausführungsprinzip sein.
Dieses basiert darauf, dass immer der Aktienkurs gewählt wird, der am meisten Umsatz macht. Wie in der angehängten Grafik zu erkennen ist, würde dort der Aktienkurs ausgewählt, da dort der größtmögliche Umsatz gemacht wird.
Meine Frage ist nun, wie man dieses Prinzip in eine mathematische Formel bekommt, mit der man Kauf- und Verkaufsaufträge so abwickelt, dass der größtmögliche Umsatz gemacht wird.
Da ich mit php und MySQL arbeite, werden die Daten für die Aufträge in einer Datenbank gespeichert. Dort stehen Stückzahl, Limit (Preis) und "Bid" bzw "Ask" als Kennzeichen für einen Verkauf bzw. Kauf drin.
Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
|
|
Gefällt mir die Idee mit dem Spiel...
...bekomme ich eine Version, wenn ich Dir helfe?
Als erstes habe ich mal eine Frage: wie ich sehe, betrachtest Du den Stückumsatz und willst den optimieren. Leider weiss ich von Aktiengeschäften lediglich, dass mein Vater damit mein wohlverdientes Erbe versenkt hat... Ist das Optimum nicht das Produkt von Stück und Preis? Müsste nicht Kurs mal Stückzahl betrachtet werden, um den maximalen Umsatz in Geld zu erreichen?
Will sagen: es ist doch besser einige Stücke zu nem satten Preis umzuschlagen, als tausende Stück zum Pfennigsbetrag?
Und wie sind die Begriffe billigst und bestens logisch umzusetzen? bedeutet billigst kaufen, einfach kaufen egal zu welchem Kurs? Kann ja kaum sein, oder? Und wenn ich eine billigst-Kauforder mache, gebe ich dann an, wieviele Stücke ich haben will, oder wieviel Geld ich dafür zur Verfügung stelle?
Bis bald....
|
|
Da es ein Browsergame ist, kann ich dir schlecht eine "Version" geben. Ich kann dir aber Bescheid geben, wenn es fertig ist, was allerdings noch lange dauern wird. ;-)
Der "Umsatz" wird hier nicht auf den Umsatz von Geld, sondern von Aktien bezogen. Wenn man das allerdings mal nachrechnet, kommt beim größten Aktienumsatz auch der größte Umsatz an Geld heraus.
"billigst" wird als Zusatz geschrieben, wenn der Käufer kein Limit (Preis) angibt. Es bedeutet, dass die Aktien zu jedem Preis gekauft werden. "bestens" wird als Zusatz bei Verkäufern angegeben. Bei dem Zusatz wird ebenfalls zu jedem Preis verkauft.
Was man noch wissen sollte ist, dass ein Käufer, der seinen Kaufauftrag mit . € limitiert hat, auch zu einem Kurs von oder die Aktien kaufen wird. Das gleiche gilt logischerweise für Verkäufe: Bei einem Limit von € wird auch zu verkauft.
Man gibt bei jedem Kauf- sowie Verkaufsauftrag das Limit, die Stückzahl und bis wann der Auftrag gültig sein soll an.
Achja, noch ein kleiner Zusatz zum Spiel: Das Browsergame soll das Börsianertum Kapitalismus keinesfalls verherrlichen, sondern das Gegenteil bezwecken. Die wenigsten wissen, was da wirklich abgeht und durch das Spiel, kann man wunderbar lernen, was wie wo wann passiert und wenn man selbst in Derivate investiert, einen Hedgefonds aufbaut, Mitarbeiter durch den Druck von Aktionären entlässt und in eine virtuelle Finanzkrise rutscht erkennt man vielleicht, wie krank unser System ist. ;-)
|
|
Vermutlich ist es am einfachsten, den Rechner einfach die vorgeschlagenen Kurse (Angebot/Nachfragelimits) nehmen zu lassen und den Umsatz auszurechnen. Danach vergleichen, welcher Kurs den meisten Umsatz macht. Das sind einfache Routinen und leicht zu programmieren. Ich gehe mal davon aus, dass unbegrenzt viele Mitspieler an Bord sind und somit wird eine mathematische Formulierung recht unhandlich, da diese ja den Fall unendlich viele Tabelleneinträge immer rechnen müsste, auch wenn nur drei Einträge da sind. Ich würde also nur rechnen lassen, wenn in der Angebot/Nachfragetabelle auch Einträge vorhanden sind.
Du musst ohnehin einige logische Abfragen machen: Was passiert, wenn für eine Aktie weder Kaufgesuch noch Angebot vorliegt?
Oder was passiert, wenn ein Verkäufer angibt, er verkauft bestens und ein Bieter sagt er kauft billigst. Welchen Kurs nehmen wir dann - beide wären ja bereit, zu jedem Kurs das Geschäft machen zu wollen...
Oder es liegen Kaufaufträge vor, aber keine Anbieter: Setzt der Rechner dann den Kurs von sich aus höher, um in der nächsten Runde aufgrund des gestiegenen Kurses doch noch jemanden zum Verkauf zu motivieren?
Oder das Gleiche umgekehrt... um welchen Betrag/Prozentsatz oder sonstwas wird der Kurs automatisch verändert, um die Aktie für die jeweils fehlende Partei attraktiver zu machen?
|
|
Die Funktion "doTransactions" wird wahrscheinlich alle Minuten oder öfter ausgeführt. Kommt drauf an, wie viele Spieler registriert sind und wie viel der Server aushält. Wenn keine Kauf- Verkaufsaufträge vorhanden sind, wird auch nichts gerechnet - logisch.
Wenn für eine Aktie weder Kaufgesuch noch Angebot vorliegt, passiert gar nichts. Wenn ein Verkäufer bestens und ein Käufer billigst angibt, wird zu dem Kurs gekauft/verkauft, der gerade besteht. Der Kurs beschreibt nur den Preis, zu dem der letzte Handel stattgefunden hat. Also verändert sich der Kurs nicht, wenn viele Kauf aber keine Verkaufsangebote vorliegen.
Dass das einfach zu programmieren ist, sei dahingestellt. Ich hab mir schon ein wenig Gedanken dazu gemacht und gemerkt, dass die Gedanken/Programmierungen ziemlich durcheinander waren. Mein Einfall war dann, das alles in einer mathematischen Formel nieder zuschreiben, was das Umsetzen erheblich vereinfacht. Deshalb der Beitrag in diesem Forum.
|
|
Du musst einen Plan machen, was das Program machen soll und aus welchen Modulen es besteht.
Du kannst nicht einfach lostippen - das funktioniert nie richtig und wird auch sehr wartungsunfreundlich. Das ganze Projekt steht und fällt mit der Planung, die Du als Vorarbeit leistest. Wenn die Abläufe als Flussdiagramm und in Worten klar sind, kann man beginnen, die Module zu schreiben. Erfahrungsgemäss werden solche Projekte nie wirklich fertig - man testet und verbessert und testet und verbessert. Wenn da noch -zig Leute im Netz mitspielen, wird es sicher auch tausende von Verbesserungsvorschlägen geben und nichtzuletzt Leute, die Dein Spiel knacken, weil sie irgendwas rausgefunden habe, an das Du nicht bedacht hast und deshalb nur noch gewinnen - also musst Du wieder was am Programm ändern.
Das kann unmöglich "eine" Formel leisten, das wäre auch viel zu unflexibel und unübersichtlich. Bevor man ein Haus baut, macht man ja auch einige Gedanken darüber, wie es werden soll und bestellt nicht einfach den Beton und bittet den Mischerfahrer den Brei so in die Grube zu schütten, dass das Klo bitte in der linken Ecke entstehen soll...
|