831525b402
Introduce new indicators for Simple Moving Average (SMA) and Weighted Moving Average (WMA), along with their Hull Moving Average (HMA) derivative. Also refactors series implementation to use `RefCell` for interior mutability and adds `SeriesMember` trait for better dynamic series access. Updates `soa_series.myc` example to reflect new series creation and push syntax.
31 lines
800 B
Plaintext
31 lines
800 B
Plaintext
(do
|
|
;; Simple Moving Average O(1)
|
|
(def SMA (fn [len]
|
|
(do
|
|
(def s (Series len))
|
|
(def sum 0.0)
|
|
(fn [val]
|
|
(do
|
|
(if (>= (count s) len)
|
|
(set sum (- sum (get_item s (- len 1))))
|
|
(nop))
|
|
(push s val)
|
|
(set sum (+ sum val))
|
|
(/ sum (count s)))))))
|
|
|
|
;; Weighted Moving Average
|
|
(def WMA (fn [len]
|
|
(do
|
|
(def s (Series len))
|
|
(def weight_sum (/ (* len (+ len 1)) 2))
|
|
(fn [val]
|
|
(do
|
|
(push s val)
|
|
(def current_sum 0.0)
|
|
(def i 0)
|
|
(while (< i (count s))
|
|
(do
|
|
(set current_sum (+ current_sum (* (get_item s i) (- len i))))
|
|
(set i (+ i 1))))
|
|
(/ current_sum weight_sum)))))))
|