Exploring The Language 2 - netrium/Netrium GitHub Wiki

The role of Time

Return to Making Decisions

Time is a critical element to Netrium. When executing a contract via simulate, a key parameter is the contract acquisition time. Take the following example:

import Common

contract =
   forward
       (fixedFee generalFee 100)
       (Market gas thm nbp)
       1000
       0.67 gbp cash
       [ (date 2010 12 31), (date 2011 1 1) ]
       [ (date 2010 12 31), (date 2011 1 1) ]

In the above example, the following happen: at the moment of contract acquisition, the acquirer pays a 100 GBP fee. Then, at 00:00:00 on 31 December 2010, 670 GBP are paid and 1000 Therms of UK NBP Gas are received. The same for 00:00:00 on 1 January 2011.

The Syntax Tree for this contract looks like this: (direct link):

Impact of Time

Note how the syntax tree shows the 31 December 2010 events as well as the 1 January 2011 events.

The Decision Tree clearly shows the impact of time - in this case, the contract was acquired at 00:00:00 on 01 January 2011. Netrium will simply discard any contract events which have happened in the past, as is the case with real world financial contracts. The Decision Tree looks like this: (direct link).

Impact of Time

Partial Executions

In order to integrate the contracts into an executing system with live contracts, it is usually required to be able to partially execute a contract. The simulation process allows us to to this by adding a second <Time> element to the <SimulationInputs>

<?xml version="1.0"?>
<SimulationInputs>
    <Time>2012-03-24 09:25:01 UTC</Time> <!-- start -->
    <Time>2012-04-24 09:25:01 UTC</Time> <!-- forced end -->
    <Choices/> 
</SimulationInputs>

Dates and Calendars

Haskell's standard Date handling libraries are normally relatively complex to work with. Netrium includes a suite of methods to ease working with dates and calendars. These have been extracted and outsourced into a more general project, available on Hackage.

Features:

  • Find the first, next, previous day of type (weekend, business day, working day etc.)
  • Find the business day or working day n days earlier or later
  • Count the number of business or working days etc in a calendar.
  • Easily construct a date or date time
  • Add or subtract Days, Months, Quarters & Years
  • and more.

Next

Observing External Data

⚠️ **GitHub.com Fallback** ⚠️