{"data":{"markdownRemark":{"html":"<div class=\"ui segment info message\">\nThe model is based on the following paper by Professor Rama Cont:\n<a href=\"http://content.simudyne.com/$web/ramacont.pdf\" target=\"_blank\" rel=\"noopener\">Volatility Clustering in Financial Markets: Empirical Facts and Agent–Based Models</a>\n</div>\n<p>In this introductory tutorial, you will learn to make a simple agent-based model of traders trading in a stylised financial market such as a stock market.</p>\n<p>The model is comprised of traders and a common information signal observed by all traders, which we can think of as a 'news arrival' process. All traders compare this information signal to an internal trading threshold.</p>\n<p>Traders place a buy order when they believe the trading signal is positive and a sell order when they believe the signal is negative.</p>\n<p>The net volume of buy and sell orders is mapped through a function that generates a change in the asset price (e.g. stock price).</p>\n<p>Realistic price dynamics (e.g. stylised facts) emerge from the model based on simple behavioural rules and the interaction of heterogeneous agents.</p>\n<p>This model is defined by the following classes:</p>\n<ul>\n<li><strong>Model</strong> Class</li>\n<li><strong>Traders</strong> Class</li>\n<li><strong>Messages</strong> Class</li>\n<li><strong>Market</strong> Class</li>\n</ul>\n<h2 id=\"model-class\"><a href=\"#model-class\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Model Class</h2>\n<p>The AgentBasedModel Class contains useful functionality to help build agent-based models. The TradingModel Class extends AgentBasedModel<GlobalState>, so it inherits these useful features as a foundation for its own class. We implement the <code class=\"language-text\">setup()</code> and <code class=\"language-text\">step()</code> methods as part of the TradingModel class.</p>\n<ul>\n<li>The <code class=\"language-text\">setup()</code> method sets up the simulation before it is run.</li>\n<li>The <code class=\"language-text\">step()</code> method is called at each iteration or \"step\" in the agent-based model simulation. For example, a step might represent one time increment or day of trading activity.</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>Model<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TradingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  \t<span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  \t<span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"agents\"><a href=\"#agents\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Agents</h2>\n<p>We build the trading model as an agent-based-model, with two agents, Trader and Market.</p>\n<p>Each agent needs to be created as a class which extends <code class=\"language-text\">simudyne.core.abm.Agent</code>. We also need to specify the global variable available to the agent (by default <code class=\"language-text\">simudyne.core.abm.GlobalState</code>), which we will discuss extending later on.</p>\n  <p class=\"code-header\">Trader.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Trader</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></code></pre></div>\n  <p class=\"code-header\">Market.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Market</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span></code></pre></div>\n<p>We create groups of the agents, which registers the agents in the model. For this example, we create a group of 1000 Trader agents, and a group with a single Market agent. Create the groups inside the <code class=\"language-text\">setup</code> method, so they are created once, when the model is setup.</p>\n<p>The Trader agents and Market agents are all connected to each other, so they can send messages to each other. Read more about connecting agents <a href=\":version/reference/agents/topologies#getting-started-with-topologies\">here</a>.</p>\n<p>We then call super.setup() to setup the AgentSystem.</p>\n<p>We then create <code class=\"language-text\">Accumulators</code> which we will use to keep track of the Traders buys, sells and market price across the model. By default, accumulators are meant to aggregate per-step statistics and are reset at each step. To override this behavior, call <code class=\"language-text\">myAccumulator.setPersistent(true)</code> in the <code class=\"language-text\">setup()</code> method. Accumulators take two parameters. A <code class=\"language-text\">String</code> for the accumulator name which will be used to access the accumulator, and an optional <code class=\"language-text\">String</code> for the accumulator display name - this is the name that will display in the console when showing the value of the accumulator.</p>\n<p>We call <code class=\"language-text\">super.step</code> inside the step method to reset the accumulators at the beginning of every step.</p>\n<p class=\"code-header\">Trader.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>AgentBasedModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Group<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>ModelSettings<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@ModelSettings</span><span class=\"token punctuation\">(</span>macroStep <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TradingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"buys\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Number of buy orders\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"sells\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Number of sell orders\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createDoubleAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"price\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Price\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> traderGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Market<span class=\"token punctuation\">></span></span> marketGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Market<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    traderGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>marketGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    marketGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>traderGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>\n      Trader<span class=\"token punctuation\">.</span><span class=\"token function\">processInformation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      Market<span class=\"token punctuation\">.</span><span class=\"token function\">calcPriceImpact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      Trader<span class=\"token punctuation\">.</span><span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>In the step method of the model, we define the sequence of actions that takes place within a step. Firstly, the traders process the information signal - and decide whether to place buy or sell orders. Then the market calculates the price impact of the buy and sell orders. Finally the traders update their trading thresholds.</p>\n<p>Don't worry if the model doesn't compile at this point. We start with defining what methods we will need to make the model building process easier. Once we know which methods we require, we can go and create them.</p>\n<p class=\"code-header\">TradingModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>\n    Trader<span class=\"token punctuation\">.</span><span class=\"token function\">processInformation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Market<span class=\"token punctuation\">.</span><span class=\"token function\">calcPriceImpact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    Trader<span class=\"token punctuation\">.</span><span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>We now create methods in the Trader and Market classes for each of these actions in the sequence. <code class=\"language-text\">Sequences</code> are a list of <code class=\"language-text\">Actions</code>, so every method will have to return an <code class=\"language-text\">Action</code>, see <a href=\":version/reference/agents/actions-and-sequencing\">Actions and Sequencing</a>.  We create the Actions inside the Agent classes rather than in the sequence directly in order to make the sequence easy to read, more information on class organisation can be found <a href=\":version/practices/class-organisation\">here</a>.</p>\n  <p class=\"code-header\">Trader.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Trader</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">processInformation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n  <p class=\"code-header\">Market.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Market</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Market<span class=\"token punctuation\">></span></span> <span class=\"token function\">calcPriceImpact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Market<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> market <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"messaging\"><a href=\"#messaging\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Messaging</h2>\n<p>All actions are triggered by messages, agents will only complete the actions in the sequence if they have received a message. Therefore, at every action, we need to send a message to the next agent in the sequence. For more information on messaging, see <a href=\":version/reference/agents/actions-and-sequencing#messaging-semantics\">Messaging Semantics</a>.</p>\n<h3 id=\"setting-up-messages\"><a href=\"#setting-up-messages\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Setting up Messages</h3>\n<p>When we send messages, the body of the messages to send are also represented as classes. We create a shared message class to declare all message classes as static classes in one place.</p>\n<p>We start by creating message classes for two messages being sent in the first action of the sequence, <code class=\"language-text\">BuyOrderPlaced</code>, and <code class=\"language-text\">SellOrderPlaced</code>.</p>\n<p class=\"code-header\">Messages.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Messages</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BuyOrderPlaced</span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">SellOrderPlaced</span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"trader-behaviour-part-1\"><a href=\"#trader-behaviour-part-1\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Trader Behaviour (part 1)</h3>\n<p>The first method called in the sequence is <code class=\"language-text\">Trader.processInformation()</code>. We can see below that the trader compares the informationSignal to their tradingThresh. Based on the relative magnitudes of the two variables, they may place a buy or sell order - or do nothing. The traders also broadcast a <code class=\"language-text\">message</code> to let the market know that they have placed their orders. A broadcast will send a message to all agents connected to the Trader, which in this case, is the Market agent.</p>\n<p>We will discuss in <a href=\":version/reference/agents/global-state\">Globals</a> how to pass the information signal through the model. Until then, we will set the information signal to a random number for each Trader.</p>\n<p class=\"code-header\">Trader.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>Random<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Trader</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">static</span> Random random <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> tradingThresh <span class=\"token operator\">=</span> random<span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">processInformation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">double</span> informationSignal <span class=\"token operator\">=</span> random<span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0.01</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>Math<span class=\"token punctuation\">.</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>informationSignal<span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> trader<span class=\"token punctuation\">.</span>tradingThresh<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>informationSignal <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          trader<span class=\"token punctuation\">.</span><span class=\"token function\">buy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n          trader<span class=\"token punctuation\">.</span><span class=\"token function\">sell</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">buy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"buys\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>BuyOrderPlaced</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">sell</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"sells\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>SellOrderPlaced</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"market-behaviour\"><a href=\"#market-behaviour\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Market Behaviour</h3>\n<p>The next action in the sequence of events is performed by the market. The method <code class=\"language-text\">Market.calcPriceImpact()</code> is called. The market starts by checking that it has received a message from the traders confirming that orders have been placed. It then calculates the netDemand for the asset (buys - sells) and uses this value to compute a priceChange. It also updates the price of the asset.</p>\n<p>As with the information signal, the number of traders and a lambda value will be passed as a global value. For now, we get the number of traders by assuming that all connected agents to the market are traders, and getting the number of connected agents using <code class=\"language-text\">getLink()</code>. We set the value of lambda to 10 for now.</p>\n<p>The market computes the price change based on the net demand generated by the traders. The Market sets the new price using the accumulator, and sends the price change as a message to all connected traders so that as in the code snippet under the Trader Behaviour (II) section, the traders may update their trading threshold to equal the previously observed price change.</p>\n<p class=\"code-header\">Market.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Market</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>GlobalState<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Market<span class=\"token punctuation\">></span></span> <span class=\"token function\">calcPriceImpact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Market<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> market <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n\n      <span class=\"token keyword\">double</span> lambda <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">int</span> buys <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>BuyOrderPlaced<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">int</span> sells <span class=\"token operator\">=</span>\n        market<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>SellOrderPlaced<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">int</span> netDemand <span class=\"token operator\">=</span> buys <span class=\"token operator\">-</span> sells<span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>netDemand <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        market<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">int</span> nbTraders <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getLinks</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">double</span> priceChange <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>netDemand <span class=\"token operator\">/</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span><span class=\"token punctuation\">)</span> nbTraders<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> lambda<span class=\"token punctuation\">;</span>\n\n        market<span class=\"token punctuation\">.</span><span class=\"token function\">getDoubleAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"price\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>priceChange<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        market<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span>priceChange<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"trader-behaviour-part-2\"><a href=\"#trader-behaviour-part-2\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Trader Behaviour (part 2)</h3>\n<p>The final action in the sequence is where traders update their trading threshold. This introduces agent heterogeneity into the model - a key feature of agent based models and the source of the interesting pricing dynamic in this model.</p>\n<p class=\"code-header\">Trader.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">double</span> updateFrequency <span class=\"token operator\">=</span> <span class=\"token number\">0.01</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>random<span class=\"token punctuation\">.</span><span class=\"token function\">nextDouble</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> updateFrequency<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      trader<span class=\"token punctuation\">.</span>tradingThresh <span class=\"token operator\">=</span> trader<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Integer<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"globals\"><a href=\"#globals\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Globals</h2>\n<p>A Globals class that extends GlobalState is created to store values that will be accessible throughout the model.</p>\n<p>For this model, there are several values that need to be accessible throughout the model.\nWe create a globals class inside the Model class, with fields for each of the following values.</p>\n<ul>\n<li>Update frequency (used by the Traders)</li>\n<li>Information signal (used by the Traders)</li>\n<li>Number of traders (used by the Market)</li>\n<li>Lambda (used by the Market)</li>\n</ul>\n<p>The Model needs to now extend AgentBasedModel of type globals.</p>\n<p class=\"code-header\">TradingModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>AgentBasedModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\nmport simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Group<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>graph<span class=\"token punctuation\">.</span>DoubleAccumulator<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>graph<span class=\"token punctuation\">.</span>LongAccumulator<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>Random<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TradingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Globals</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> updateFrequency <span class=\"token operator\">=</span> <span class=\"token number\">0.01</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">long</span> nbTraders <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> lambda <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> volatilityInfo <span class=\"token operator\">=</span> <span class=\"token number\">0.001</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> informationSignal <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> volatilityInfo<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>We need to change the type of all our agents to the new Globals object, instead of the default GlobalState.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Trader</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Market</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">}</span></code></pre></div>\n<p>We change the Model setup to use the number of traders from the globals state when creating the Traders group.</p>\n<p class=\"code-header\">TradingModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> traderGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>nbTraders<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Market<span class=\"token punctuation\">></span></span> marketGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Market<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  traderGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>marketGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  marketGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>traderGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>We update the Trader to use the update frequency and information signal from the global state.</p>\n<p class=\"code-header\">Trader.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Trader</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">static</span> Random random <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> tradingThresh <span class=\"token operator\">=</span> random<span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">processInformation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">double</span> informationSignal <span class=\"token operator\">=</span> trader<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>informationSignal<span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>Math<span class=\"token punctuation\">.</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>informationSignal<span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> trader<span class=\"token punctuation\">.</span>tradingThresh<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>informationSignal <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n              trader<span class=\"token punctuation\">.</span><span class=\"token function\">buy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n              trader<span class=\"token punctuation\">.</span><span class=\"token function\">sell</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">double</span> updateFrequency <span class=\"token operator\">=</span> trader<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>updateFrequency<span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>random<span class=\"token punctuation\">.</span><span class=\"token function\">nextDouble</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> updateFrequency<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            trader<span class=\"token punctuation\">.</span>tradingThresh <span class=\"token operator\">=</span> trader<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Double<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n\t<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>... and update the Market to use the number of traders and value of lambda from the globals.</p>\n<p class=\"code-header\">Market.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Market<span class=\"token punctuation\">></span></span> <span class=\"token function\">calcPriceImpact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Market<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        market <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">int</span> buys <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>BuyOrderPlaced<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">int</span> sells <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>SellOrderPlaced<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">int</span> netDemand <span class=\"token operator\">=</span> buys <span class=\"token operator\">-</span> sells<span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>netDemand <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            market<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">long</span> nbTraders <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>nbTraders<span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">double</span> lambda <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>lambda<span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">double</span> priceChange <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>netDemand <span class=\"token operator\">/</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span><span class=\"token punctuation\">)</span> nbTraders<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> lambda<span class=\"token punctuation\">;</span>\n            price <span class=\"token operator\">+=</span> priceChange<span class=\"token punctuation\">;</span>\n\n            market<span class=\"token punctuation\">.</span><span class=\"token function\">getDoubleAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"price\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>price<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            market<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span>priceChange<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<p>We recalculate the value of the information signal every step.</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@Override</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>informationSignal <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span>\n\t\t<span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>volatilityInfo<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"reporting\"><a href=\"#reporting\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Reporting</h2>\n<p>The next step is adding annotations to the model to connect parts of it with the console<a href=\":version/reference/models/annotations\">(Annotations)</a>.</p>\n<p>We use the @Input annotation to mark a field as an input field that the user will be able to change at any point in time in the model, and the @Constant annotation for fields that can only be changed before the model is setup.</p>\n<p>We give our annotations user friendly names that will be used in the console</p>\n<p class=\"code-header\">TradingModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token annotation punctuation\">@ModelSettings</span><span class=\"token punctuation\">(</span>macroStep <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TradingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Globals</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Update Frequency\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> updateFrequency <span class=\"token operator\">=</span> <span class=\"token number\">0.01</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Constant</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Number of Traders\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">long</span> nbTraders <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Lambda\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> lambda <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Volatility of Information Signal\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> volatilityInfo <span class=\"token operator\">=</span> <span class=\"token number\">0.001</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> informationSignal <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> volatilityInfo<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Model outputs are annotated as @Variable. Accumulators will be automatically reported so don't need to be annotated as @Variable</p>\n<h3 id=\"visualising-output\"><a href=\"#visualising-output\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Visualising Output</h3>\n<p>The model output is displayed on the console. Here we have run the model for 800 ticks - with each tick representing one trading day. We can observe that the price walk looks like a real financial time-series. Further statistical analysis of the properties of these data would reveal that the prices generated behave like those generated in real financial markets.</p>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 32.67015706806283%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsSAAALEgHS3X78AAABXklEQVQoz4WRzUrDQBSF82huBBFciBsRQfAF3Lh24ZvoTqmiFpX6R6vtolAQREHQpWhtSyYzmf9MeryZUrQrFx9ncpKc3JybSGWgtYFzRaS6ZkLC+BIujGGcj16qHUQAPCY4QhiPjJ6zf7yk8AWKgkzrobSFznOo/hfM5wf8aAj/3YcVAlnrBqxeQ944g7w4huq2IV6ekJ4cQDTqkFcTEqVUnMwTikItBZjGKfT5EfQlvVjbh3l9RrqzhdH6IoYbSxiszCHd3YY43MNwdR6jzWUM1hbivUTR7xrj4oSVamPhaGpXBNIQz1ppiF4X/OEOvNMEb15DPPaQv7+B0+S80wK/vwVvN5FkXGEKI0TVn5SwUsEbA19VQB6zJfUFZG48UROQKT/rkSYso6BMxsCUVNMCxtYgaIXSUc1l1a8DS6lHJqJGWD4hnn/92QmrQFpMoJAiBFpWiFpVMf3of/wAgIMHfuypT00AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/reporting_1-516cc7d2220fed817744f41e477869c0-8e416.webp 173w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-0b506.webp 345w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-58be5.webp 690w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-59b8d.webp 1035w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-4a474.webp 1380w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-70b7b.webp 1910w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/reporting_1-516cc7d2220fed817744f41e477869c0-7e3fa.png 173w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-7f1d4.png 345w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-13856.png 690w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-045bb.png 1035w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-f46ab.png 1380w,\n/static/reporting_1-516cc7d2220fed817744f41e477869c0-f7bfd.png 1910w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/reporting_1-516cc7d2220fed817744f41e477869c0-13856.png\"\n          alt=\"reporting 1\"\n          title=\"\"\n          src=\"/static/reporting_1-516cc7d2220fed817744f41e477869c0-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<h3 id=\"running-multiple-runs\"><a href=\"#running-multiple-runs\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Running multiple runs</h3>\n<p>Running a simulation just once is not sufficiently robust to produce estimates of the likely path of key output variables. Instead we perform a Monte Carlo analysis - that is we run each simulation a large number of times to generate distributions of outcomes - which we can visualise as a fan chart. In the image below, I run the model out 800 ticks, 20 times. This produces a distribution of price outcomes - illustrating the uncertainty inherent in the price walk generated by the time series.</p>\n<p>\n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block; padding: 20px; max-width: 690px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 43.61479413817166%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABiElEQVQoz4WSS2/VMBCF/f8XICFYUKmIBRL/gRYBrWDDHqkFKoRabtN7r1+Z8djJTQ5jJzyEBCw+jefYGZ8ZxxAnBB+R84BSRqSUQZQgMkB0nZKAWVGt7tVzWYrulUVX2reKcwEm54JhODRR9GCIPbrtDj0xhrHqpa3vrMNOyeOE8TCB9aKqbfcWaRgxTrMaERgRaQWbOy2YmZH3W8i2g9x1yN5BnEM8O0F4/QL+7BTh7Suk7hbx/TuENyfw5y8Rzk8Rr29gvA/IZXHH2pI4C/58Af6kXH4Af/2C9O0a9ukj2OMHC8+OQFcf4Z4fwz6+B/vkIezRfYTLCxgmwqD2a3tFC7NkFLVfJrSYVU86ZwoB5D1I3daYdAz8I1+JkWDmecI8KfPcqCLp4Vok62zqJSEyXGD4kFZ4Ia55XFHN9DrIn/T6YupQ7A7UbcCbG5C2GwLBeYL3S/wX5k8h6aOwPkq/34Hr4G83a8Hqin65+wvm96QWFP1NxsOhzXTUUdQYtJ3m8D/FKt8B1DirutBKKnMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <picture>\n        <source\n          srcset=\"/static/reporting_2-24e045d8ed17d57f14981496a503b10d-8e416.webp 173w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-0b506.webp 345w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-58be5.webp 690w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-59b8d.webp 1035w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-4a474.webp 1380w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-bc809.webp 2070w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-6897e.webp 2866w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/webp\"\n        />\n        <source\n          srcset=\"/static/reporting_2-24e045d8ed17d57f14981496a503b10d-7e3fa.png 173w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-7f1d4.png 345w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-13856.png 690w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-045bb.png 1035w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-f46ab.png 1380w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-ea5f6.png 2070w,\n/static/reporting_2-24e045d8ed17d57f14981496a503b10d-44756.png 2866w\"\n          sizes=\"(max-width: 690px) 100vw, 690px\"\n          type=\"image/png\"\n        />\n        <img\n          class=\"gatsby-resp-image-image\"\n          style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n          src=\"/static/reporting_2-24e045d8ed17d57f14981496a503b10d-13856.png\"\n          alt=\"reporting 2\"\n          title=\"\"\n          src=\"/static/reporting_2-24e045d8ed17d57f14981496a503b10d-13856.png\"\n        />\n      </picture>\n      </span>\n  </span>\n  </p>\n<h3 id=\"final-code-java\"><a href=\"#final-code-java\" aria-hidden=\"true\" class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Final code Java</h3>\n<p>Below you can see the final code to reproduce.</p>\n<p class=\"code-header\"> TradingModel.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>AgentBasedModel<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>GlobalState<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Group<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Constant<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Input<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>ModelSettings<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>Random<span class=\"token punctuation\">;</span>\n\n<span class=\"token annotation punctuation\">@ModelSettings</span><span class=\"token punctuation\">(</span>macroStep <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TradingModel</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">AgentBasedModel</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Globals</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">GlobalState</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Update Frequency\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> updateFrequency <span class=\"token operator\">=</span> <span class=\"token number\">0.01</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Constant</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Number of Traders\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">long</span> nbTraders <span class=\"token operator\">=</span> <span class=\"token number\">1000</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Lambda\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> lambda <span class=\"token operator\">=</span> <span class=\"token number\">10</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token annotation punctuation\">@Input</span><span class=\"token punctuation\">(</span>name <span class=\"token operator\">=</span> <span class=\"token string\">\"Volatility of Information Signal\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> volatilityInfo <span class=\"token operator\">=</span> <span class=\"token number\">0.001</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">double</span> informationSignal <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> volatilityInfo<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"buys\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Number of buy orders\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"sells\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Number of sell orders\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">createDoubleAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"price\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Price\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> traderGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>nbTraders<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    Group<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Market<span class=\"token punctuation\">></span></span> marketGroup <span class=\"token operator\">=</span> <span class=\"token function\">generateGroup</span><span class=\"token punctuation\">(</span>Market<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    traderGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>marketGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    marketGroup<span class=\"token punctuation\">.</span><span class=\"token function\">fullyConnected</span><span class=\"token punctuation\">(</span>traderGroup<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Override</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">super</span><span class=\"token punctuation\">.</span><span class=\"token function\">step</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>informationSignal <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span>\n      <span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>volatilityInfo<span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">run</span><span class=\"token punctuation\">(</span>Trader<span class=\"token punctuation\">.</span><span class=\"token function\">processInformation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> Market<span class=\"token punctuation\">.</span><span class=\"token function\">calcPriceImpact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n      Trader<span class=\"token punctuation\">.</span><span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p class=\"code-header\">Trader.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>annotations<span class=\"token punctuation\">.</span>Variable<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> java<span class=\"token punctuation\">.</span>util<span class=\"token punctuation\">.</span>Random<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Trader</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">static</span> Random random <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token annotation punctuation\">@Variable</span> <span class=\"token keyword\">double</span> tradingThresh <span class=\"token operator\">=</span> random<span class=\"token punctuation\">.</span><span class=\"token function\">nextGaussian</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">processInformation</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">double</span> informationSignal <span class=\"token operator\">=</span> trader<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>informationSignal<span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>Math<span class=\"token punctuation\">.</span><span class=\"token function\">abs</span><span class=\"token punctuation\">(</span>informationSignal<span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> trader<span class=\"token punctuation\">.</span>tradingThresh<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>informationSignal <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n              trader<span class=\"token punctuation\">.</span><span class=\"token function\">buy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n              trader<span class=\"token punctuation\">.</span><span class=\"token function\">sell</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Trader<span class=\"token punctuation\">></span></span> <span class=\"token function\">updateThreshold</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Trader<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        trader <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">double</span> updateFrequency <span class=\"token operator\">=</span> trader<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>updateFrequency<span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>random<span class=\"token punctuation\">.</span><span class=\"token function\">nextDouble</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;=</span> updateFrequency<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            trader<span class=\"token punctuation\">.</span>tradingThresh <span class=\"token operator\">=</span> trader<span class=\"token punctuation\">.</span><span class=\"token function\">getMessageOfType</span><span class=\"token punctuation\">(</span>Double<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">getBody</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">buy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"buys\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>BuyOrderPlaced</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">void</span> <span class=\"token function\">sell</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">getLongAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"sells\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">new</span> <span class=\"token class-name\">Messages<span class=\"token punctuation\">.</span>SellOrderPlaced</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p class=\"code-header\">Market.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Action<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> simudyne<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">.</span>abm<span class=\"token punctuation\">.</span>Agent<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Market</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">Agent</span><span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>TradingModel<span class=\"token punctuation\">.</span>Globals<span class=\"token punctuation\">></span></span> <span class=\"token punctuation\">{</span>\n\n  <span class=\"token keyword\">private</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">double</span> price <span class=\"token operator\">=</span> <span class=\"token number\">4.0</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> Action<span class=\"token generics function\"><span class=\"token punctuation\">&lt;</span>Market<span class=\"token punctuation\">></span></span> <span class=\"token function\">calcPriceImpact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> Action<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>\n        Market<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n        market <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n          <span class=\"token keyword\">int</span> buys <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>BuyOrderPlaced<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token keyword\">int</span> sells <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getMessagesOfType</span><span class=\"token punctuation\">(</span>Messages<span class=\"token punctuation\">.</span>SellOrderPlaced<span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">int</span> netDemand <span class=\"token operator\">=</span> buys <span class=\"token operator\">-</span> sells<span class=\"token punctuation\">;</span>\n\n          <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>netDemand <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            market<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">long</span> nbTraders <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>nbTraders<span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">double</span> lambda <span class=\"token operator\">=</span> market<span class=\"token punctuation\">.</span><span class=\"token function\">getGlobals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>lambda<span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">double</span> priceChange <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>netDemand <span class=\"token operator\">/</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">double</span><span class=\"token punctuation\">)</span> nbTraders<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> lambda<span class=\"token punctuation\">;</span>\n            price <span class=\"token operator\">+=</span> priceChange<span class=\"token punctuation\">;</span>\n\n            market<span class=\"token punctuation\">.</span><span class=\"token function\">getDoubleAccumulator</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"price\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span>price<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            market<span class=\"token punctuation\">.</span><span class=\"token function\">broadcastMessage</span><span class=\"token punctuation\">(</span>priceChange<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n          <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p class=\"code-header\">Messages.java</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Messages</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">BuyOrderPlaced</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">SellOrderPlaced</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","headings":[{"value":"Model Class","depth":2},{"value":"Agents","depth":2},{"value":"Messaging","depth":2},{"value":"Setting up Messages","depth":3},{"value":"Trader Behaviour (part 1)","depth":3},{"value":"Market Behaviour","depth":3},{"value":"Trader Behaviour (part 2)","depth":3},{"value":"Globals","depth":2},{"value":"Reporting","depth":2},{"value":"Visualising Output","depth":3},{"value":"Running multiple runs","depth":3},{"value":"Final code Java","depth":3}],"frontmatter":{"title":"Trader Model","toc":null,"experimental":null}},"site":{"siteMetadata":{"title":"Simudyne Docs","latestVersion":"2.6"}}},"pageContext":{"absolutePath":"/home/vsts/work/1/s/content/2.0/docs/tutorials/trader.md","versioned":true,"version":"2.0","kind":"docs","pagePath":"/tutorials/trader","chronology":{"prev":{"name":"Tutorials","path":"/tutorials"},"next":{"name":"Mortgage Model","path":"/tutorials/mortgage"}},"lastUpdated":"2026-04-21T13:56:54.825Z"}}