You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.8 KiB
59 lines
1.8 KiB
|
5 years ago
|
|
||
|
|
module ATrade.Driver.Junction
|
||
|
|
(
|
||
|
|
junctionMain
|
||
|
|
) where
|
||
|
|
|
||
|
|
import ATrade.Driver.Junction.Types (StrategyDescriptor (..),
|
||
|
|
StrategyInstance (..),
|
||
|
|
StrategyInstanceDescriptor (..))
|
||
|
|
import Data.Aeson (decode)
|
||
|
|
import qualified Data.ByteString as B
|
||
|
|
import qualified Data.ByteString.Lazy as BL
|
||
|
|
import Data.IORef
|
||
|
|
import qualified Data.Map.Strict as M
|
||
|
|
import qualified Data.Text as T
|
||
|
|
|
||
|
|
load :: T.Text -> IO B.ByteString
|
||
|
|
load = undefined
|
||
|
|
|
||
|
|
junctionMain :: M.Map T.Text StrategyDescriptor -> IO ()
|
||
|
|
junctionMain descriptors = do
|
||
|
|
parseOptions
|
||
|
|
instanceDescriptors <- undefined
|
||
|
|
strategies <- mkStrategies instanceDescriptors
|
||
|
|
|
||
|
|
start strategies
|
||
|
|
|
||
|
|
where
|
||
|
|
parseOptions = undefined
|
||
|
|
|
||
|
|
mkStrategies :: [StrategyInstanceDescriptor] -> IO [StrategyInstance]
|
||
|
|
mkStrategies = mapM mkStrategy
|
||
|
|
|
||
|
|
mkStrategy :: StrategyInstanceDescriptor -> IO StrategyInstance
|
||
|
|
mkStrategy desc = do
|
||
|
|
sState <- load (stateKey desc)
|
||
|
|
sCfg <- load (configKey desc)
|
||
|
|
case M.lookup (strategyId desc) descriptors of
|
||
|
|
Just (StrategyDescriptor _sName sCallback _sDefState) ->
|
||
|
|
case (decode $ BL.fromStrict sCfg, decode $ BL.fromStrict sState) of
|
||
|
|
(Just pCfg, Just pState) -> do
|
||
|
|
cfgRef <- newIORef pCfg
|
||
|
|
stateRef <- newIORef pState
|
||
|
|
return $ StrategyInstance
|
||
|
|
{
|
||
|
|
strategyInstanceId = strategyName desc,
|
||
|
|
strategyEventCallback = sCallback,
|
||
|
|
strategyState = stateRef,
|
||
|
|
strategyConfig = cfgRef
|
||
|
|
}
|
||
|
|
_ -> undefined
|
||
|
|
_ -> undefined
|
||
|
|
|
||
|
|
start = undefined
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|