|
|
|
|
@ -223,10 +223,6 @@ robotMain dataDownloadDelta defaultState initCallback callback = do
@@ -223,10 +223,6 @@ robotMain dataDownloadDelta defaultState initCallback callback = do
|
|
|
|
|
strategyAccount = T.pack . accountId $ params, |
|
|
|
|
strategyVolume = volumeFactor params, |
|
|
|
|
tickers = tickerList, |
|
|
|
|
strategyQuotesourceEp = T.pack . quotesourceEp $ params, |
|
|
|
|
strategyBrokerEp = T.pack . brokerEp $ params, |
|
|
|
|
strategyHistoryProviderType = T.pack $ fromMaybe "finam" $ historyProviderType params, |
|
|
|
|
strategyHistoryProvider = T.pack $ fromMaybe "" $ historyProvider params, |
|
|
|
|
strategyQTISEp = T.pack <$> qtisSocket params} |
|
|
|
|
|
|
|
|
|
updatedConfig <- case initCallback of |
|
|
|
|
@ -261,11 +257,19 @@ robotMain dataDownloadDelta defaultState initCallback callback = do
@@ -261,11 +257,19 @@ robotMain dataDownloadDelta defaultState initCallback callback = do
|
|
|
|
|
|
|
|
|
|
debugM "main" "Starting strategy driver" |
|
|
|
|
withContext (\ctx -> do |
|
|
|
|
|
|
|
|
|
let qsEp = T.pack $ quotesourceEp params |
|
|
|
|
let brEp = T.pack $ brokerEp params |
|
|
|
|
agg <- newIORef $ mkAggregatorFromBars M.empty [(hmsToDiffTime 3 50 0, hmsToDiffTime 21 10 0)] |
|
|
|
|
bracket (startQuoteSourceThread ctx qsEp strategy eventChan agg tickFilter (sourceBarTimeframe params)) killThread $ \_ -> do |
|
|
|
|
debugM "Strategy" "QuoteSource thread forked" |
|
|
|
|
bracket (startBrokerClientThread (strategyInstanceId . strategyInstanceParams $ strategy) ctx brEp brokerChan eventChan shutdownMv) killThread $ \_ -> do |
|
|
|
|
debugM "Strategy" "Broker thread forked" |
|
|
|
|
|
|
|
|
|
now <- getCurrentTime >>= newIORef |
|
|
|
|
|
|
|
|
|
let env = Env { |
|
|
|
|
envHistorySource = mkQHPHandle ctx (strategyHistoryProvider . strategyInstanceParams $ strategy), |
|
|
|
|
envHistorySource = mkQHPHandle ctx (T.pack . fromMaybe "" . historyProvider $ params), |
|
|
|
|
envStrategyInstanceParams = instanceParams, |
|
|
|
|
envStrategyEnvironment = straEnv, |
|
|
|
|
envConfigRef = configRef, |
|
|
|
|
@ -276,7 +280,7 @@ robotMain dataDownloadDelta defaultState initCallback callback = do
@@ -276,7 +280,7 @@ robotMain dataDownloadDelta defaultState initCallback callback = do
|
|
|
|
|
envAggregator = agg, |
|
|
|
|
envLastTimestamp = now |
|
|
|
|
} |
|
|
|
|
runReaderT (barStrategyDriver ctx (sourceBarTimeframe params) tickFilter strategy shutdownMv) env `finally` killThread stateSavingThread) |
|
|
|
|
runReaderT (barStrategyDriver strategy shutdownMv) env `finally` killThread stateSavingThread) |
|
|
|
|
where |
|
|
|
|
tickFilter :: Tick -> Bool |
|
|
|
|
tickFilter tick = |
|
|
|
|
@ -378,8 +382,8 @@ mkBarStrategy instanceParams dd params initialState cb = BarStrategy {
@@ -378,8 +382,8 @@ mkBarStrategy instanceParams dd params initialState cb = BarStrategy {
|
|
|
|
|
|
|
|
|
|
-- | Main function which handles incoming events (ticks/orders), passes them to strategy callback |
|
|
|
|
-- and executes returned strategy actions |
|
|
|
|
barStrategyDriver :: (MonadHistory (App hs c s)) => Context -> Maybe Int -> (Tick -> Bool) -> Strategy c s -> MVar () -> App hs c s () |
|
|
|
|
barStrategyDriver ctx mbSourceTimeframe tickFilter strategy shutdownVar = do |
|
|
|
|
barStrategyDriver :: (MonadHistory (App hs c s)) => Strategy c s -> MVar () -> App hs c s () |
|
|
|
|
barStrategyDriver strategy shutdownVar = do |
|
|
|
|
now <- liftIO getCurrentTime |
|
|
|
|
history <- M.fromList <$> mapM (loadTickerHistory now) (tickers . strategyInstanceParams $ strategy) |
|
|
|
|
eventChan <- asks envEventChan |
|
|
|
|
@ -387,11 +391,6 @@ barStrategyDriver ctx mbSourceTimeframe tickFilter strategy shutdownVar = do
@@ -387,11 +391,6 @@ barStrategyDriver ctx mbSourceTimeframe tickFilter strategy shutdownVar = do
|
|
|
|
|
agg <- asks envAggregator |
|
|
|
|
liftIO $ atomicModifyIORef' agg (\s -> (replaceHistory s history, ())) |
|
|
|
|
|
|
|
|
|
bracket (lift $ startQuoteSourceThread ctx qsEp strategy eventChan agg tickFilter mbSourceTimeframe) (lift . killThread) (\_ -> do |
|
|
|
|
lift $ debugM "Strategy" "QuoteSource thread forked" |
|
|
|
|
bracket (lift $ startBrokerClientThread (strategyInstanceId . strategyInstanceParams $ strategy) ctx brEp brokerChan eventChan shutdownVar) (lift . killThread) (\_ -> do |
|
|
|
|
lift $ debugM "Strategy" "Broker thread forked" |
|
|
|
|
|
|
|
|
|
wakeupTid <- lift . forkIO $ forever $ do |
|
|
|
|
maybeShutdown <- tryTakeMVar shutdownVar |
|
|
|
|
if isJust maybeShutdown |
|
|
|
|
@ -403,13 +402,9 @@ barStrategyDriver ctx mbSourceTimeframe tickFilter strategy shutdownVar = do
@@ -403,13 +402,9 @@ barStrategyDriver ctx mbSourceTimeframe tickFilter strategy shutdownVar = do
|
|
|
|
|
|
|
|
|
|
readAndHandleEvents agg strategy |
|
|
|
|
lift $ debugM "Strategy" "Stopping strategy driver" |
|
|
|
|
lift $ killThread wakeupTid)) |
|
|
|
|
|
|
|
|
|
lift $ debugM "Strategy" "Strategy done" |
|
|
|
|
lift $ killThread wakeupTid |
|
|
|
|
|
|
|
|
|
where |
|
|
|
|
qsEp = strategyQuotesourceEp . strategyInstanceParams $ strategy |
|
|
|
|
brEp = strategyBrokerEp . strategyInstanceParams $ strategy |
|
|
|
|
|
|
|
|
|
loadTickerHistory now t = do |
|
|
|
|
history <- getHistory (code t) (BarTimeframe (fromInteger . timeframeSeconds $ t)) |
|
|
|
|
|