Deitch_Andrew_Trading
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This is a simplified model of stock trading. In the model, agents take turns pairing up and trading stocks. Each agent has beliefs about how much the stock is worth, in addition to knowledge of the last price it sold for. A simple set of rules determines whether the agents sell stocks to one another on a given turn, and the selling price. The goal to see what kinds of endogenous conditions can cause extreme variation in the stock price. In real life, these extreme variations are sometimes called stock bubbles. Therefore, almost all fluctuation in the stock price is due to agents reacting to each other's actions, and to movements and patterns that the agents detect in the price itself. The exception to this rule is the 'news' feature, which is the only "outside" mechanism affecting the stock price. As agents trade with each other turn by turn, they constantly update their individual beliefs about the stock price.
This model attempts to examine how a stock price can change based only on the aggregate effects of individual interactions. In real markets, a bubble and the subsequent crash are usually attributed to some combination of speculation, misinformation, and cognitive bias. The implicit assumption is that when the price quickly rises by one hundred percent or more, and then falls rapidly to the original level or below, this rapid and extreme fluctuation represents a false belief about what the asset is "really" worth. Famous bubbles include the recent housing bubble, but there are examples reaching as far back as the 18th century South Sea Shipping Company stock bubble. People scoff at those caught up in the speculation, wondering how--knowing what they know about markets--anyone could honestly think the asset's value could rise so quickly and dramatically. But if people are not using outside information about the world to determine what the asset worth in comparison to other assets, how does the price change so much? Modern behavioral economists attribute much of this speculative behavior to groupthink, bandwagon effects, endowment effects, and other cognitive biases. This model asks whether these extreme price fluctuations can be replicated using endogenous factors that imitate real-life cognitive biases.
HOW IT WORKS
During set-up, each agent is given some shares, some money, a price (the price they currently believe the stock to be worth), and a news-sensitivity.
The action of the model takes place during trading turns. At the beginning of each turn, each agent creates a link with another agent how has not yet traded for that turn. Then, the agents attempt to trade with one another. One agent (randomly chosen from the pair) offers to buy one share from the other agent.
Rules for trading:
If both agents have at least one share and sufficient money to trade, then
1. The offering agent offers to buy a share for his price (my-price).
2. If the offering agent's price is higher than his partner's price, the offering agent exchanges money (equal the offering price) for a share of the trade partner's stock.
3. If the offering agent's price is lower than his partner's price, the partner counters, offering $1 more than the original offer, and exchanges his money for one share of the offering agent's stock.
4. If both agents have the same my-price, no shares are exchanged.
5. Both agents set their traded? value to true for this turn.
After each transaction, the stock-price is updated to reflect the latest sale price. Once all the pairs have finished trading, the links are broken, all agents set their traded? values to false, and a new round is begun.
When agents are not trading, they observe the stock-price's movement and use it, as well as other information, to update their my-price value. As many agents constantly update their beliefs about what the stock is worth, different fluctuation patterns in stock-price patterns emerge.
Rules for updating my-price:
1. If the endowment effect is turned on (endowment-effect? = true), agents have a certain (user-selected) probability of refusing to trade for a given turn.
2. If news is turned on (react-to-news? = true), adjust my-price up or down depending on the magnitude of the news and my news-sensitivity.
3. If the agents are trying to spot trends (apparent-trends? = true), adjust my-price upward if the stock-price has risen several times in a row and down if the stock-price has fallen several times in a row.
4. If the bandwagon effect is turned on (bandwagon-effect? = true), then some turtles will pick another turtle to set their my-price equal to.
HOW TO USE IT
The setup button creates the specified number of turtles. do-layout? and show-my-price? are optional settings that can be turned on to improve the model's animation, or turned off to increase running speed. do-layout? shows the turtles moving around the view as they pair up and trade. show-my-price? creates a label displaying each individual turtle's my-price.
The population slider specifies the number of turtles created at setup. The switches react-to-news?, apparent-trends?, endowment-effect?, and bandwagon-effect? each control a different strategy that the turtles use to update their my-price as they trade. These switches can all be turned on, or they can be turned on in any combination to observe the different effects. See the HOW IT WORKS section and the procedures tab for more information about these strategies.
Each strategy switch, other than react-to-news?, has a corresponding slider to control the strength of its effect:
- trend-spotting-prob determines the probability that a given agent will notice each trend.
- endowment-frequency determines how often an agent will refuse to trade in a each trading round
- bandwagon-stength determines how likely it is that an agent sets his my-price equal to another agent's my-price in a given trading turn.
The share-distribution plot gives a histogram plotting the number of turtles possessing a given number of shares.
THINGS TO NOTICE
There are two main ways to judge what is going on in the model. First, there is the share distribution plot. This plot shows how evenly distributed the shares are across all the people in the model. Most sets of parameters tend toward a very uneven distribution - many people with no shares and a few with most of the shares.
Second, there is the stock price plot. It is easy to judge visually when something that could be characterized as a bubble has occurred. Notice that, as in real life, it is only possible to define a give time span as a bubble after it has 'burst.'
THINGS TO TRY
See what happens to the stock-price and the share-distribution as you turn on different combinations of switches. For each effect, try moving the sliders for a strong effect or a weak effect.
For a more stable stock-price, try turning on only react-to-news? and bandwagon-effect?
To see some big fluctuations that look like bubbles, try turning on only react-to-news? and apparent-trends? and setting trend-spotting-prob around the mid-range.
EXTENDING THE MODEL
This model assumes some fixed values for the magnitudes of agents' my-price adjustments. To make the model more realistic, try having the agents react in percentages of the stock price, rather than in fixed dollar amounts.
Also, the model sometimes allows the stock price to fall below zero. This does not present a problem for analyzing price fluctuations, but for aesthetic purposes, try preventing the stock price from falling below zero.
Currently, some of the global variables can only be adjusted in the procedures tab. Sliders for money, my-price, and news-sensitivity could be added. I refrained from adding this to keep the model simpler.
NETLOGO FEATURES
To implement trend-spotting by the agents, I needed them to have a 'memory' of the stock-price movement. This is the list up-down-history. It keeps track of whether the stock-price goes up or down at each trade. The agents use this list to react to trends. To analyze the results of the model in BehaviorSpace, I also needed a history of the actual prices. This is the list price-history. After each trade, the stock-price is recorded in this list.
RELATED MODELS
This section could give the names of models in the NetLogo Models Library or elsewhere which are of related interest.
CREDITS AND REFERENCES
Thanks to Forrest and Winston for all help, both with programming problems and modeling decisions.
Comments and Questions
turtles-own [shares money my-price news-sensitivity traded?] globals [ stock-price up-down-history price-history] to setup clear-all set-default-shape turtles "Person" crt population ask turtles [ set xcor random-xcor set ycor random-ycor set shares 1 set money 10000 set my-price 50 + random 30 set news-sensitivity random-normal 1 0 ] set stock-price mean [my-price] of turtles set up-down-history n-values 10 [0] set price-history [] if show-my-price? [ ask turtles [set label my-price] ] end to go ask turtles [ set traded? false ] ;;find a partner for this round ask turtles [pair-up] ;;if layout animation is on, move toward your partner if do-layout? [ repeat 20 [layout-spring turtles links .1 .5 .1] ] ;;trade for this round ask turtles [ ;;if the endowment-effect is on, some turtles will refuse to trade each turn if endowment-effect? [ if random 100 < endowment-frequency [ set traded? true ]] trade update-my-price ask other turtles [ update-my-price ] do-plots ] ask links [die] tick end to pair-up if count link-neighbors = 0 [ create-link-with one-of other turtles with [ count link-neighbors = 0] [set color red] ] end to trade if not traded? [ ;;do the transaction let trade-partner one-of link-neighbors let offer-price my-price let counter-price [my-price] of trade-partner ;;if your offer is higher than partner's price, ;;and you have at least one share, ;;you try to sell to your partner if offer-price > counter-price [ ask trade-partner [ try-to-sell-to myself offer-price ] ] ;;if your offer is lower than partner's price, ;;your partner tries to sell to you if offer-price + 1 <= counter-price [ try-to-sell-to trade-partner (offer-price + 1) ] ;;if offer-price = counter-price, no shares exchanged ;;each turtle can only trade once per round ;;then, they must form new links with new trade-partners set traded? true ask link-neighbors [ set traded? true ] ] end ;;general selling procedure, the turtle with the ;;lower price tries to sell to his trade partner to try-to-sell-to [ buyer buying-price ] if shares > 0 [ if [money] of buyer > buying-price [ set money money + buying-price set shares shares - 1 ask buyer [ set money money - buying-price ] ask buyer [ set shares shares + 1 ] ;;create a list reflecting the movement of the stock-price if buying-price > stock-price [ set up-down-history fput 1 up-down-history ] if buying-price < stock-price [ set up-down-history fput -1 up-down-history ] if buying-price = stock-price [ set up-down-history fput 0 up-down-history ] if length up-down-history > 100 [ set up-down-history sublist up-down-history 0 99 ] ;;each time a transaction happens, the stock-price is updated set stock-price buying-price set price-history fput stock-price price-history ; do-plots ]] end to update-my-price if stock-price < 1 [ set my-price my-price + 1 ] if react-to-news? [ let good-news random 5 let bad-news random -5 let news good-news + bad-news set my-price my-price + news * news-sensitivity ] if apparent-trends? [ let last5 sublist up-down-history 0 5 let last10 sublist up-down-history 0 10 if sum last5 = 5 [ if random 100 < trend-spotting-prob [ set my-price my-price + 5 ]] if sum last5 = -5 [ if random 100 < trend-spotting-prob [ set my-price my-price - 5 ]] ;;put some downward pressure on the price if it is stagnant if mean last10 = 0 [ if random 100 < trend-spotting-prob [ set my-price my-price - 1 ]]] if bandwagon-effect? [ let neighbor-price [my-price] of one-of other turtles if random 100 < bandwagon-strength [ set my-price neighbor-price ]] end to do-plots set-current-plot "current-price" set-current-plot-pen "Price" plot stock-price set-current-plot "share-distribution" set-current-plot-pen "default" histogram [shares] of turtles end
There are 15 versions of this model.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.