|
|
|
@ -1,4 +1,5 @@ |
|
|
|
{-# LANGUAGE BangPatterns #-} |
|
|
|
{-# LANGUAGE BangPatterns #-} |
|
|
|
|
|
|
|
{-# LANGUAGE MultiWayIf #-} |
|
|
|
|
|
|
|
|
|
|
|
{-| |
|
|
|
{-| |
|
|
|
- Module : ATrade.BarAggregator |
|
|
|
- Module : ATrade.BarAggregator |
|
|
|
@ -156,13 +157,15 @@ updateTime tick = runState $ do |
|
|
|
Just series -> case bsBars series of |
|
|
|
Just series -> case bsBars series of |
|
|
|
(b:bs) -> do |
|
|
|
(b:bs) -> do |
|
|
|
let currentBn = barNumber (barTimestamp b) (tfSeconds $ bsTimeframe series) |
|
|
|
let currentBn = barNumber (barTimestamp b) (tfSeconds $ bsTimeframe series) |
|
|
|
if currentBn == barNumber (timestamp tick) (tfSeconds $ bsTimeframe series) |
|
|
|
let thisBn = barNumber (timestamp tick) (tfSeconds $ bsTimeframe series) |
|
|
|
then do |
|
|
|
if |
|
|
|
lBars %= M.insert (security tick) series { bsBars = updateBarTimestamp b tick : bs } |
|
|
|
| currentBn == thisBn -> do |
|
|
|
return Nothing |
|
|
|
lBars %= M.insert (security tick) series { bsBars = updateBarTimestamp b tick : bs } |
|
|
|
else do |
|
|
|
return Nothing |
|
|
|
lBars %= M.insert (security tick) series { bsBars = emptyBarFromTick tick : b : bs } |
|
|
|
| currentBn < thisBn -> do |
|
|
|
return $ Just b |
|
|
|
lBars %= M.insert (security tick) series { bsBars = emptyBarFromTick tick : b : bs } |
|
|
|
|
|
|
|
return $ Just b |
|
|
|
|
|
|
|
| otherwise -> return Nothing |
|
|
|
_ -> return Nothing |
|
|
|
_ -> return Nothing |
|
|
|
_ -> return Nothing |
|
|
|
_ -> return Nothing |
|
|
|
else |
|
|
|
else |
|
|
|
|