Browse Source

junction: save timers

junction
Denis Tereshkin 4 years ago
parent
commit
e3adb5bafc
  1. 7
      src/ATrade/Driver/Junction.hs
  2. 5
      src/ATrade/Driver/Junction/RobotDriverThread.hs
  3. 4
      src/ATrade/Driver/Junction/Types.hs

7
src/ATrade/Driver/Junction.hs

@ -32,7 +32,8 @@ import ATrade.Driver.Junction.Types (StrategyDescriptor @@ -32,7 +32,8 @@ import ATrade.Driver.Junction.Types (StrategyDescriptor
StrategyInstance (strategyInstanceId),
StrategyInstanceDescriptor (..),
confStrategy,
strategyState)
strategyState,
strategyTimers)
import ATrade.Quotes.QHP (mkQHPHandle)
import ATrade.RoboCom.ConfigStorage (ConfigStorage (loadConfig))
import ATrade.RoboCom.Persistence (MonadPersistence (loadState, saveState))
@ -171,6 +172,8 @@ junctionMain descriptors = do @@ -171,6 +172,8 @@ junctionMain descriptors = do
saveRobotState handle = onStrategyInstance handle $ \inst -> do
currentState <- liftIO $ readIORef (strategyState inst)
saveState currentState (strategyInstanceId inst)
currentTimers <- liftIO $ readIORef (strategyTimers inst)
saveState currentTimers (strategyInstanceId inst <> ":timers")
startRobots cfg bro barsMap = forM_ (instances cfg) $ \inst ->
case M.lookup (strategyBaseName inst) descriptors of
@ -180,7 +183,7 @@ junctionMain descriptors = do @@ -180,7 +183,7 @@ junctionMain descriptors = do
rState <- loadState (stateKey inst) >>= liftIO . newIORef
rTimers <- loadState (stateKey inst <> ":timers") >>= liftIO . newIORef
let robotEnv = RobotEnv rState rConf rTimers bro barsMap
robot <- createRobotDriverThread inst desc (flip runReaderT robotEnv . unRobotM) bigConf rConf rState
robot <- createRobotDriverThread inst desc (flip runReaderT robotEnv . unRobotM) bigConf rConf rState rTimers
robotsMap' <- asks peRobots
liftIO $ atomicModifyIORef' robotsMap' (\s -> (M.insert (strategyId inst) robot s, ()))
Nothing -> error "Unknown strategy"

5
src/ATrade/Driver/Junction/RobotDriverThread.hs

@ -96,12 +96,13 @@ createRobotDriverThread :: (MonadIO m1, @@ -96,12 +96,13 @@ createRobotDriverThread :: (MonadIO m1,
-> BigConfig c
-> IORef c
-> IORef s
-> IORef [UTCTime]
-> m1 RobotDriverHandle
createRobotDriverThread instDesc strDesc runner bigConf rConf rState = do
createRobotDriverThread instDesc strDesc runner bigConf rConf rState rTimers = do
eventQueue <- liftIO $ newBoundedChan 2000
let inst = StrategyInstance (strategyId instDesc) (eventCallback strDesc) rState rConf
let inst = StrategyInstance (strategyId instDesc) (eventCallback strDesc) rState rConf rTimers
quoteQueue <- liftIO $ newBoundedChan 2000
forM_ (confTickers bigConf) (\x -> addSubscription (QuoteSubscription (tickerId x) (timeframe x)) quoteQueue)

4
src/ATrade/Driver/Junction/Types.hs

@ -20,6 +20,7 @@ import Data.Aeson (FromJSON (..), ToJSON (..)) @@ -20,6 +20,7 @@ import Data.Aeson (FromJSON (..), ToJSON (..))
import Data.Default (Default)
import Data.IORef (IORef)
import qualified Data.Text as T
import Data.Time (UTCTime)
import Dhall (FromDhall)
import GHC.Generics (Generic)
@ -68,7 +69,8 @@ data StrategyInstance c s = @@ -68,7 +69,8 @@ data StrategyInstance c s =
strategyInstanceId :: T.Text,
strategyEventCallback :: EventCallback c s,
strategyState :: IORef s,
strategyConfig :: IORef c
strategyConfig :: IORef c,
strategyTimers :: IORef [UTCTime]
}
data StrategyInstanceE = forall c s. (FromDhall c, Default s, FromJSON s, ToJSON s) => StrategyInstanceE (StrategyInstance c s)

Loading…
Cancel
Save