Sell book works!
This commit is contained in:
1 parent
0d126be10c
commit
1fa719ffe3
6 files changed
+239
-9
No files matched your search
+25
-5
@@ -1,10 +1,17 @@
|
||||
(ns book.core
|
||||
(:import [book.PersistentSortedList])
|
||||
(:require [book.order]
|
||||
[clojure.spec.alpha :as s]
|
||||
[clojure.edn :as edn])
|
||||
(:gen-class))
|
||||
|
||||
|
||||
(defn sorted-list [& keys]
|
||||
(book.PersistentSortedList/create (seq keys)))
|
||||
|
||||
(defn sorted-list-by [comparator & keys]
|
||||
(book.PersistentSortedList/create comparator (seq keys)))
|
||||
|
||||
|
||||
;; Let say a book is two collections. The first called
|
||||
;; sell-book contains all the sell orders. The second
|
||||
@@ -12,7 +19,14 @@
|
||||
|
||||
(defn create-book [& args]
|
||||
(let [cmp #(< (:price %1) (:price %2))]
|
||||
(apply sorted-set-by cmp args)))
|
||||
(apply sorted-list-by cmp args)))
|
||||
|
||||
|
||||
(defn sorted-set-rest [s]
|
||||
(print "=>" s)
|
||||
(if (empty? s)
|
||||
s
|
||||
(disj s (first s))))
|
||||
|
||||
|
||||
(def book {:sell (create-book) :buy (create-book)})
|
||||
@@ -65,12 +79,18 @@
|
||||
(rest new-book))))
|
||||
|
||||
|
||||
(defn leftover-order [order trades]
|
||||
(let [traded-quantity (reduce + (map :book.order/quantity trades))
|
||||
leftover-quantity (- (:quantity order) traded-quantity)]
|
||||
(when (pos? leftover-quantity)
|
||||
(assoc order :quantity leftover-quantity))))
|
||||
|
||||
|
||||
(defn match-buy-order-in-sell-book [sell-book order]
|
||||
(let [trades-1 [(create-trade order (first sell-book))]
|
||||
trades (create-sell-trades order sell-book)
|
||||
new-book (compute-new-sell-book-after-trades sell-book trades)]
|
||||
[trades new-book]))
|
||||
(let [trades (create-sell-trades order sell-book)
|
||||
new-book (compute-new-sell-book-after-trades sell-book trades)
|
||||
new-buy-order (leftover-order order trades)]
|
||||
[trades new-book new-buy-order]))
|
||||
|
||||
|
||||
(defn place-buy-order [book order]
|
||||
|
||||
Reference in new issue
Block a user