This is a simple stock market-ish game for users of tilde.town. Every user gets some starting cash and a company. Players then buy and sell shares in each other’s companies. That’s it.
This is just a fun sandbox game. There is no winning, losing, or ending. Players might set their own goals such as making the most money, or getting the value of their own company to rise. It’s just going to be fun.
There is, however, a meta-objective. As the game proceeds, lots of data will be generated over time. It will be a lot of fun to create reports and visualizations of this data. It will also be fun to write a narrative around the events of the game. Similar to what is going on in Blaseball.
All players begin the game by naming their company. They receive 100 shares in that company. They also start with $1000, though maybe we can create a more fun currency than dollars in the fiction (tilde tokens?).
Players will then put in orders. They may make as many orders as they wish. A player may make at most one order per company that exists in the market. A player may also make no orders at all.
Each order will consist of a company id, whether a player wishes to buy or sell shares, the quantity of shares a player wishes to buy or sell, and the price at which the player is willing to buy or sell a single share at. The sum of all a player’s buy orders quantity*price may not exceed the players current cash on hand. The sum of all shares in a player’s sell orders may not exceed the shares they have on hand.
The market will execute orders according to a set schedule that is TBD. Daily? Hourly? Whatever the time is, the schedule will be public. Players will always know the exact time at which orders will be executed.
When the market executes orders, it will gather all the orders submitted by all players. It will check to see if any players have an invalid combination of orders. If so, all orders from that player will be ignored.
Next, for each company it will check to see if that company has at least one executable order. For an order to be executable there has to be at least one buy order and one sell order, and the price of the buy order has to be equal to or greater than the price on the sell order. If a company has no executable orders, it will not trade, and all orders for that company’s shares will be discarded.
For each company with at least one executable order, the market will resolve and shares will be exchanged. Every buy order for a company will be arranged by price from highest to lowest. Tiebreaking rules are TBD. Buyers then proceed to buy the cheapest available share at the seller’s price. Shares and cash exchange hands one share at a time until there are no more executable orders for the company.
There is no short selling, options trading, leverage, etc. Keep it simple.
If necessary we can implement a market maker of some kind to increase traded volumes and get shares moving when the market is stagnant. It would also help to find accurate market prices for shares that are for sale, but aren’t moving.
If shareholders who own a combined 51% or more of a company agree, they may perform one of the following actions. When actions are taken, they are publicly announced immediately. They will then be executed immediately after the next standard share execution period.
A stock split will split all shares in a company in half. All players who own shares in the company will have the number of shares they own doubled. The market price for the company will be divided in half.
Dividends won’t work until there is a system devised for companies to produce revenues and profits on their own. If such a system exists, then we can have companies pay out dividends. The shareholder majority can vote for an amount to pay per share, and how frequently to pay (measured in market executions). As long as the company has enough money in its coffers to pay the dividend, it will pay out. Otherwise, the dividend will be cancelled.
Whenever shares in a company are traded, the price at which a share was last exchange becomes the new market price for that share. This will also necessarily be the highest price paid for a share in that company during the last market execution. The market price for all shares will always be public.
The total quantity of shares successfully traded for each company during each execution is the volume. This information will also be public.
The market cap of each company is equal to the number of shares multiplied by the market price. Since each company starts with 100 shares, it will usually be equal to the market price * 100. However, if stock splits occur, the market cap will not be so straightforward.
After all orders are executed, each player will receive a report of which of their orders executed, and which did not. It will also report on any change in the market price of the shares the player has in their posession.
The central market data will be stored in a simple SQL database. SQLite will probably work. The market app itself will run on a cron, update the database, and generate all necessary reports on market activity.
Orders will be placed by each user by creating a special CSV file in their home directories. The market can then search all home directories for valid order files, collect them, and execute them on schedule.
After the market executes orders, it can generate a static HTML reporting document. These documents can be made publicly available for anyone to peruse at their leisure.
When orders are executed, tilde.town emails can be sent to each active user giving them a report specific to their own holdings and activity.
A client app isn’t strictly necessary, but it will make playing much easier. It could take the form of a terminal-based/curses app similar to botany which allows players to check their holdings, market data, reports, and make orders.