Ver Fonte

[finance] Better chart axis, numerical time range support

Innokentii Enikeev há 3 anos atrás
pai
commit
5861e647e8
1 ficheiros alterados com 7 adições e 6 exclusões
  1. 7 6
      plugins/finance.lisp

+ 7 - 6
plugins/finance.lisp

@@ -108,11 +108,12 @@
 
 (defvar *chart-points* 800 "Data points in chart")
 (defun make-chart (series symbols)
-  (let* ((r (multiple-value-list (range series :key #'car)))
-         (fmt (if (<= (- (second r) (first r))
-                      (* 60 60 36))
-                  '((:hour 2) ":" (:min 2))
-                  '((:day 2) "." (:month 2) " " (:hour 2) ":" (:min 2)))))
+  (let* ((r (apply #'- (reverse (multiple-value-list (range series :key #'car)))))
+         (fmt (cond
+                ((<= r (* 60 60 36)) '((:hour 2) ":" (:min 2)))
+                ((<= r (* 60 60 24 7)) '((:day 2) "." (:month 2) " " (:hour 2) ":" (:min 2)))
+                ((<= r (* 60 60 24 365)) '((:day 2) "." (:month 2)))
+                (t '((:day 2) "." (:month 2) "." (:year 2))))))
     (adw-charting:with-line-chart ((+ 90 *chart-points*)
                                    (floor (* 3 *chart-points*) 4))
       (loop for symbol in symbols
@@ -366,7 +367,7 @@
          (day-range (some #'(lambda (a) (aget a +chart-ranges+)) args))
          (number (some #'(lambda (a) (parse-integer a :junk-allowed t)) args))
          (avg (* 60 (cond
-                      (day-range (round day-range *chart-points*))
+                      (day-range (round (* day-range (or number 1)) *chart-points*))
                       (number)
                       (:otherwise 1))))
          (after-ts (local-time:timestamp- (local-time:now)