From f27c198634bad2463aa55e55cc6db98118cadc8a Mon Sep 17 00:00:00 2001 From: Per Magnus Petersen Date: Fri, 13 Mar 2026 13:09:24 +0100 Subject: [PATCH] Limit minute poller to last 5 candles after initial fetch Reduces unnecessary upserts on each 15-second poll cycle by only processing the 5 most recent candles from Kraken's response. Co-Authored-By: Claude Opus 4.6 --- src/clj/pmagnus/btcdata/kraken/ohlc_minute.clj | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/clj/pmagnus/btcdata/kraken/ohlc_minute.clj b/src/clj/pmagnus/btcdata/kraken/ohlc_minute.clj index 6004a75..8c858bf 100644 --- a/src/clj/pmagnus/btcdata/kraken/ohlc_minute.clj +++ b/src/clj/pmagnus/btcdata/kraken/ohlc_minute.clj @@ -55,13 +55,14 @@ (defn- poll! "Fetch OHLC data including the last in-progress candle, upsert all. + On initial fetch saves everything; subsequent fetches only take last 5. Returns the count of saved candles." - [client query-fn since-atom] + [client query-fn since-atom initial?] (let [result (fetch-ohlc client @since-atom) last-ts (:last result) pair-key (first (remove #{:last} (keys result))) raw (get result pair-key) - candles (map parse-candle raw)] + candles (map parse-candle (if initial? raw (take-last 5 raw)))] (when (seq candles) (save-candles! query-fn candles) (when last-ts @@ -74,14 +75,14 @@ [client query-fn since-atom running?] (future (try - (poll! client query-fn since-atom) + (poll! client query-fn since-atom true) (catch Exception e (log/error e "Kraken minute initial poll failed"))) (while @running? (Thread/sleep 15000) (when @running? (try - (poll! client query-fn since-atom) + (poll! client query-fn since-atom false) (catch Exception e (log/error e "Kraken minute poll failed")))))))