Book Image

Clojure for Finance

By : Timothy Washington
Book Image

Clojure for Finance

By: Timothy Washington

Overview of this book

<p>Clojure is a dynamic programming language with an emphasis on functional programming. Clojure is well suited to financial modeling as it is a functional programming language. Such languages help developers work with high-level mathematical abstractions without having to implement low-level code that handles the arithmetic operations.</p> <p>Starting with the importance of representing data and calculations effectively, this book will take you all the way to being competent in financial analytics and building financial applications.</p> <p>First, we introduce the notions of computation and finance, which will help you understand Clojure's utility to solve real-world problems in many domains, especially finance. Next, we will show you how to develop the simple-moving-average function by using the more advanced partition Clojure data transformation function. This function, along with others, will be used to calculate and manipulate data.</p> <p>You will then learn to implement slightly more complicated equations, how to traverse data, and deal with branching and conditional dispatch. Then, the concept of side-effecting and its various approaches are introduced, along with the strategy of how to use data as the interface to other systems. Finally, you will discover how to build algorithms while manipulating and composing functions.</p>
Table of Contents (16 chapters)
Clojure for Finance
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Our first refactor – the price list


Our exponential moving average calculation is calculated on every tick increment over our time series. Again, we'll employ the reduce function to fold up the previous 20 ticks, into an average value. In order to do this, though, we'll need to dig into the source data for the SMA.

If you recall from Chapter 2, First Principles and a Useful Way to Think, our prices were a list of maps that looked like the following piece of code. We put the price in a map to communicate the fact that it was the last or most recent price being calculated:

{:last 16.68101235523256}

Our final time series was a list of maps that looked like the following:

{:last-trade-price {:last 5.466160487301605},
 :last-trade-time #inst "2015-09-24T04:13:13.868-00:00"}

This means that our price lists aren't just carrying around prices. They're carrying around price and time values. Now we'll add our calculated average to the stuff carried around. You'll often find the need to carry around essential...