Refactor SMA implementation to lib/sma.myc

Move the SMA implementation from examples/err.myc and examples/sma.myc
to a new dedicated file in lib/. This change also cleans up unused code
and improves the SMA logic.
This commit is contained in:
Michael Schimmel
2026-03-06 17:22:42 +01:00
parent 8fa2ca4cb5
commit d4ca9c4620
3 changed files with 26 additions and 52 deletions
-34
View File
@@ -1,34 +0,0 @@
(do
(def SMA
(fn [length]
(do
(def history (series :float))
(def sum 0.0)
(fn [val]
(do
(def hist_len (len history))
(if (>= hist_len length)
(assign sum (- sum (history (- hist_len 1))))
...)
(push history val)
(assign sum (+ sum val))
(/ sum (len history))
)))))
(def sma10 (SMA 10))
(sma10 1)
(sma10 2)
(sma10 3)
(sma10 4)
(sma10 5)
(sma10 6)
(sma10 7)
(sma10 8)
(sma10 9)
(sma10 10)
(sma10 11)
)
+6 -18
View File
@@ -1,24 +1,12 @@
;; Output: 5.5
(do (do
(def SMA
(fn [length]
(do
(def history (series :float))
(push history 0)
(fn [val]
(do
(def sum (+ val (history 0)))
(push history sum)
(/ sum length)
))
)))
(def sma20 (SMA 20)) (def sma20 (SMA 20))
(def n 100) (def n 1000)
(while (> n 0) (while (> n 0)
(do (do
(print "val=" n " sma20=" (sma20 n)) (print "val=" n " sma20=" (sma20 n))
(assign n (- n 1)) (assign n (- n 1))
)) ))
) )
+20
View File
@@ -0,0 +1,20 @@
(do
(def SMA
(fn [length]
(do
(def history (series :float))
(def sum 0.0)
(fn [val]
(do
(def hist_len (len history))
(if (>= hist_len length)
(assign sum (- sum (history (- length 1)))))
(push history val)
(assign sum (+ sum val))
(if (>= hist_len length)
(/ sum length))
)))))
)