|
|
|
@ -13,6 +13,7 @@ import ATrade.RoboCom.Types |
|
|
|
import ATrade.Types |
|
|
|
import ATrade.Types |
|
|
|
|
|
|
|
|
|
|
|
import Data.IORef |
|
|
|
import Data.IORef |
|
|
|
|
|
|
|
import Data.Maybe |
|
|
|
import qualified Data.Text as T |
|
|
|
import qualified Data.Text as T |
|
|
|
|
|
|
|
|
|
|
|
import Control.Concurrent hiding (readChan, writeChan, |
|
|
|
import Control.Concurrent hiding (readChan, writeChan, |
|
|
|
@ -36,21 +37,20 @@ startQuoteSourceThread ctx qsEp strategy eventChan agg tickFilter maybeSourceTim |
|
|
|
case qdata of |
|
|
|
case qdata of |
|
|
|
QDTick tick -> when (goodTick tick) $ do |
|
|
|
QDTick tick -> when (goodTick tick) $ do |
|
|
|
writeChan eventChan (NewTick tick) |
|
|
|
writeChan eventChan (NewTick tick) |
|
|
|
aggValue <- readIORef agg |
|
|
|
when (isNothing maybeSourceTimeframe) $ do |
|
|
|
case handleTick tick aggValue of |
|
|
|
aggValue <- readIORef agg |
|
|
|
(Just bar, !newAggValue) -> writeChan eventChan (NewBar bar) >> writeIORef agg newAggValue |
|
|
|
case handleTick tick aggValue of |
|
|
|
(Nothing, !newAggValue) -> writeIORef agg newAggValue |
|
|
|
(Just bar, !newAggValue) -> writeChan eventChan (NewBar bar) >> writeIORef agg newAggValue |
|
|
|
|
|
|
|
(Nothing, !newAggValue) -> writeIORef agg newAggValue |
|
|
|
QDBar (_, bar) -> do |
|
|
|
QDBar (_, bar) -> do |
|
|
|
aggValue <- readIORef agg |
|
|
|
aggValue <- readIORef agg |
|
|
|
case handleBar bar aggValue of |
|
|
|
when (isJust maybeSourceTimeframe) $ do |
|
|
|
(Just bar', !newAggValue) -> writeChan eventChan (NewBar bar') >> writeIORef agg newAggValue |
|
|
|
case handleBar bar aggValue of |
|
|
|
(Nothing, !newAggValue) -> writeIORef agg newAggValue) |
|
|
|
(Just bar', !newAggValue) -> writeChan eventChan (NewBar bar') >> writeIORef agg newAggValue |
|
|
|
|
|
|
|
(Nothing, !newAggValue) -> writeIORef agg newAggValue) |
|
|
|
where |
|
|
|
where |
|
|
|
goodTick tick = tickFilter tick && |
|
|
|
goodTick tick = tickFilter tick && |
|
|
|
(datatype tick /= LastTradePrice || (datatype tick == LastTradePrice && volume tick > 0)) |
|
|
|
(datatype tick /= LastTradePrice || (datatype tick == LastTradePrice && volume tick > 0)) |
|
|
|
|
|
|
|
|
|
|
|
tickersList' = fmap code . (tickers . strategyInstanceParams) $ strategy |
|
|
|
tickersList = fmap code . (tickers . strategyInstanceParams) $ strategy |
|
|
|
tickersList = case maybeSourceTimeframe of |
|
|
|
|
|
|
|
Just tf -> fmap (\x -> T.append x (T.pack $ ":" ++ show tf ++ ";")) tickersList' |
|
|
|
|
|
|
|
_ -> tickersList' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|