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

Implementing our equation


So far, our moving-average function only gives us a partitioned list of prices (or ticks). Now, we only need to visit a sliced list at each increment and calculate each increment's price average. The reduce function provides a way of accumulating (or folding over) each item in a list and producing a result based on those values. We'll take our partitioned list and have reduce apply an accumulator function on each sublist. The form looks roughly like this:

(reduce (fn [accumulated-result-so-far each-item-list] 
          ;; ** single line comments come after semi-colons
          ;; do stuff, return accumulated result 
          ;; for each item iteration 
         )
    initial-list-of-accumulated-values
    initial-list-of-input-values)

Our accumulator function only has to maintain a few temporary values that our equation needs. In this case, it's the sum of each-item-list (or lazy sequence). For this, we want to contain or bind intermediate values in a temporary...