From 4b7112a8d742b59885daea13caf51f1ad6463557 Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Wed, 10 Jul 2019 15:33:31 +0700 Subject: [PATCH] BarAggregator: ignore earlier ticks --- src/ATrade/BarAggregator.hs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/ATrade/BarAggregator.hs b/src/ATrade/BarAggregator.hs index 672a97e..d0fb70f 100644 --- a/src/ATrade/BarAggregator.hs +++ b/src/ATrade/BarAggregator.hs @@ -1,4 +1,5 @@ {-# LANGUAGE BangPatterns #-} +{-# LANGUAGE MultiWayIf #-} {-| - Module : ATrade.BarAggregator @@ -156,13 +157,15 @@ updateTime tick = runState $ do Just series -> case bsBars series of (b:bs) -> do let currentBn = barNumber (barTimestamp b) (tfSeconds $ bsTimeframe series) - if currentBn == barNumber (timestamp tick) (tfSeconds $ bsTimeframe series) - then do - lBars %= M.insert (security tick) series { bsBars = updateBarTimestamp b tick : bs } - return Nothing - else do - lBars %= M.insert (security tick) series { bsBars = emptyBarFromTick tick : b : bs } - return $ Just b + let thisBn = barNumber (timestamp tick) (tfSeconds $ bsTimeframe series) + if + | currentBn == thisBn -> do + lBars %= M.insert (security tick) series { bsBars = updateBarTimestamp b tick : bs } + return Nothing + | currentBn < thisBn -> do + lBars %= M.insert (security tick) series { bsBars = emptyBarFromTick tick : b : bs } + return $ Just b + | otherwise -> return Nothing _ -> return Nothing _ -> return Nothing else