From a026e8ac604cc279e48ceaaf24aa00e102029d88 Mon Sep 17 00:00:00 2001 From: Denis Tereshkin Date: Wed, 19 Sep 2018 22:44:31 +0700 Subject: [PATCH] Formatting --- src/ATrade/BarAggregator.hs | 2 +- src/ATrade/Driver/Backtest.hs | 2 +- src/ATrade/Driver/Real/BrokerClientThread.hs | 40 +++++---- src/ATrade/Driver/Real/QuoteSourceThread.hs | 29 +++--- src/ATrade/Driver/Real/Types.hs | 34 +++---- src/ATrade/Forums/Smartlab.hs | 54 +++++------ src/ATrade/Quotes/HAP.hs | 60 ++++++------- src/ATrade/Quotes/QHP.hs | 46 +++++----- src/ATrade/Quotes/QTIS.hs | 22 ++--- src/ATrade/RoboCom/Indicators.hs | 11 ++- src/ATrade/RoboCom/Monad.hs | 51 ++++++----- src/ATrade/RoboCom/Positions.hs | 94 ++++++++++---------- src/ATrade/RoboCom/Types.hs | 32 +++---- src/ATrade/RoboCom/Utils.hs | 20 ++--- test/Test/RoboCom/Indicators.hs | 18 ++-- test/Test/RoboCom/Utils.hs | 20 ++--- 16 files changed, 268 insertions(+), 267 deletions(-) diff --git a/src/ATrade/BarAggregator.hs b/src/ATrade/BarAggregator.hs index 4fddcef..e1cad38 100644 --- a/src/ATrade/BarAggregator.hs +++ b/src/ATrade/BarAggregator.hs @@ -112,7 +112,7 @@ handleTick tick = runState $ do updateBarTimestamp !bar newtick = bar { barTimestamp = newTimestamp } where newTimestamp = timestamp newtick - + emptyBarFrom !bar newtick = newBar where newTimestamp = timestamp newtick diff --git a/src/ATrade/Driver/Backtest.hs b/src/ATrade/Driver/Backtest.hs index 87aad9b..bf9901e 100644 --- a/src/ATrade/Driver/Backtest.hs +++ b/src/ATrade/Driver/Backtest.hs @@ -2,8 +2,8 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE RankNTypes #-} module ATrade.Driver.Backtest ( backtestMain diff --git a/src/ATrade/Driver/Real/BrokerClientThread.hs b/src/ATrade/Driver/Real/BrokerClientThread.hs index 1159314..ee994da 100644 --- a/src/ATrade/Driver/Real/BrokerClientThread.hs +++ b/src/ATrade/Driver/Real/BrokerClientThread.hs @@ -5,26 +5,28 @@ module ATrade.Driver.Real.BrokerClientThread ( BrokerCommand(..) ) where -import ATrade.Broker.Client -import ATrade.Broker.Protocol -import ATrade.RoboCom.Monad hiding (submitOrder, cancelOrder) -import ATrade.RoboCom.Types -import ATrade.Types +import ATrade.Broker.Client +import ATrade.Broker.Protocol +import ATrade.RoboCom.Monad hiding (cancelOrder, + submitOrder) +import ATrade.RoboCom.Types +import ATrade.Types -import Control.Concurrent.BoundedChan -import Control.Concurrent hiding (writeChan, readChan, writeList2Chan, yield) -import Control.Exception -import Control.Monad.Loops -import Control.Monad +import Control.Concurrent hiding (readChan, writeChan, + writeList2Chan, yield) +import Control.Concurrent.BoundedChan +import Control.Exception +import Control.Monad +import Control.Monad.Loops -import Data.IORef -import qualified Data.Text as T -import Data.Text.Encoding -import Data.Time.Clock -import Data.Maybe +import Data.IORef +import Data.Maybe +import qualified Data.Text as T +import Data.Text.Encoding +import Data.Time.Clock -import System.Log.Logger -import System.ZMQ4 hiding (Event) +import System.Log.Logger +import System.ZMQ4 hiding (Event) data BrokerCommand = BrokerSubmitOrder Order | BrokerCancelOrder Integer | BrokerRequestNotifications @@ -56,7 +58,7 @@ startBrokerClientThread instId ctx brEp ordersChan eventChan shutdownVar = forkI debugM "Strategy" "Order cancelled" BrokerRequestNotifications -> do t <- getCurrentTime - nt <- readIORef lastNotificationTime + nt <- readIORef lastNotificationTime when (t `diffUTCTime` nt > 1) $ do maybeNs <- getNotifications bs case maybeNs of @@ -78,4 +80,4 @@ sendNotification :: BoundedChan Event -> Notification -> IO () sendNotification eventChan notification = writeChan eventChan $ case notification of OrderNotification oid state -> OrderUpdate oid state - TradeNotification trade -> NewTrade trade + TradeNotification trade -> NewTrade trade diff --git a/src/ATrade/Driver/Real/QuoteSourceThread.hs b/src/ATrade/Driver/Real/QuoteSourceThread.hs index 541cf97..669a7de 100644 --- a/src/ATrade/Driver/Real/QuoteSourceThread.hs +++ b/src/ATrade/Driver/Real/QuoteSourceThread.hs @@ -5,23 +5,24 @@ module ATrade.Driver.Real.QuoteSourceThread startQuoteSourceThread ) where -import ATrade.BarAggregator -import ATrade.QuoteSource.Client -import ATrade.RoboCom.Monad -import ATrade.RoboCom.Types -import ATrade.Types -import ATrade.Driver.Real.Types +import ATrade.BarAggregator +import ATrade.Driver.Real.Types +import ATrade.QuoteSource.Client +import ATrade.RoboCom.Monad +import ATrade.RoboCom.Types +import ATrade.Types -import Data.IORef -import qualified Data.Text as T +import Data.IORef +import qualified Data.Text as T -import Control.Concurrent.BoundedChan -import Control.Concurrent hiding (writeChan, readChan, writeList2Chan, yield) -import Control.Exception -import Control.Monad +import Control.Concurrent hiding (readChan, writeChan, + writeList2Chan, yield) +import Control.Concurrent.BoundedChan +import Control.Exception +import Control.Monad -import System.Log.Logger -import System.ZMQ4 hiding (Event) +import System.Log.Logger +import System.ZMQ4 hiding (Event) startQuoteSourceThread :: Context -> T.Text -> Strategy c s -> BoundedChan Event -> IORef BarAggregator -> (Tick -> Bool) -> IO ThreadId startQuoteSourceThread ctx qsEp strategy eventChan agg tickFilter = forkIO $ do diff --git a/src/ATrade/Driver/Real/Types.hs b/src/ATrade/Driver/Real/Types.hs index c18baac..0728fa8 100644 --- a/src/ATrade/Driver/Real/Types.hs +++ b/src/ATrade/Driver/Real/Types.hs @@ -6,34 +6,34 @@ module ATrade.Driver.Real.Types ( InitializationCallback ) where -import ATrade.RoboCom.Monad -import ATrade.RoboCom.Types +import ATrade.RoboCom.Monad +import ATrade.RoboCom.Types -import Data.Time.Clock -import qualified Data.Text as T +import qualified Data.Text as T +import Data.Time.Clock -- | Top-level strategy configuration and state data Strategy c s = BarStrategy { - downloadDelta :: DiffTime, -- ^ How much history to download at strategy start - eventCallback :: EventCallback c s, -- ^ Strategy event callback - currentState :: s, -- ^ Current strategy state. Updated after each 'EventCallback' call - strategyParams :: c, -- ^ Strategy params - strategyTimers :: [UTCTime], + downloadDelta :: DiffTime, -- ^ How much history to download at strategy start + eventCallback :: EventCallback c s, -- ^ Strategy event callback + currentState :: s, -- ^ Current strategy state. Updated after each 'EventCallback' call + strategyParams :: c, -- ^ Strategy params + strategyTimers :: [UTCTime], strategyInstanceParams :: StrategyInstanceParams -- ^ Instance params } -- | Strategy instance params store few params which are common for all strategies data StrategyInstanceParams = StrategyInstanceParams { - strategyInstanceId :: T.Text, -- ^ Strategy instance identifier. Should be unique among all strategies (very desirable) - strategyAccount :: T.Text, -- ^ Account string to use for this strategy instance. Broker-dependent - strategyVolume :: Int, -- ^ Volume to use for this instance (in lots/contracts) - tickers :: [Ticker], -- ^ List of tickers which is used by this strategy - strategyQuotesourceEp :: T.Text, -- ^ QuoteSource server endpoint - strategyBrokerEp :: T.Text, -- ^ Broker server endpoint + strategyInstanceId :: T.Text, -- ^ Strategy instance identifier. Should be unique among all strategies (very desirable) + strategyAccount :: T.Text, -- ^ Account string to use for this strategy instance. Broker-dependent + strategyVolume :: Int, -- ^ Volume to use for this instance (in lots/contracts) + tickers :: [Ticker], -- ^ List of tickers which is used by this strategy + strategyQuotesourceEp :: T.Text, -- ^ QuoteSource server endpoint + strategyBrokerEp :: T.Text, -- ^ Broker server endpoint strategyHistoryProviderType :: T.Text, - strategyHistoryProvider :: T.Text, - strategyQTISEp :: Maybe T.Text + strategyHistoryProvider :: T.Text, + strategyQTISEp :: Maybe T.Text } type InitializationCallback c = c -> StrategyInstanceParams -> IO c diff --git a/src/ATrade/Forums/Smartlab.hs b/src/ATrade/Forums/Smartlab.hs index a9145a5..ba79a14 100644 --- a/src/ATrade/Forums/Smartlab.hs +++ b/src/ATrade/Forums/Smartlab.hs @@ -8,32 +8,32 @@ module ATrade.Forums.Smartlab ( ) where import qualified Data.ByteString.Lazy as BL -import qualified Data.Text as T -import Data.Text.Encoding -import qualified Data.List as L -import Data.Time.Calendar -import Data.Time.Clock -import Data.Maybe -import Network.HTTP.Simple -import Safe -import Text.HTML.TagSoup -import Text.Parsec -import Text.Parsec.Text -import Text.StringLike - -import Debug.Trace +import qualified Data.List as L +import Data.Maybe +import qualified Data.Text as T +import Data.Text.Encoding +import Data.Time.Calendar +import Data.Time.Clock +import Network.HTTP.Simple +import Safe +import Text.HTML.TagSoup +import Text.Parsec +import Text.Parsec.Text +import Text.StringLike + +import Debug.Trace data NewsItem = NewsItem { - niUrl :: !T.Text, - niHeader :: !T.Text, - niText :: !T.Text, - niAuthor :: !T.Text, + niUrl :: !T.Text, + niHeader :: !T.Text, + niText :: !T.Text, + niAuthor :: !T.Text, niPubTime :: !UTCTime } deriving (Show, Eq) data IndexItem = IndexItem { - iiUrl :: !T.Text, - iiTitle :: !T.Text, + iiUrl :: !T.Text, + iiTitle :: !T.Text, iiPubTime :: !UTCTime } deriving (Show, Eq) @@ -49,14 +49,14 @@ extractBetween tagName = takeWhile (~/= closeTag) . dropWhile (~/= openTag) matchClass :: T.Text -> T.Text -> Tag T.Text -> Bool matchClass _ className (TagOpen _ attrs) = case L.lookup (T.pack "class") attrs of Just klass -> className `L.elem` T.words klass - Nothing -> False + Nothing -> False matchClass _ _ _ = False parseTimestamp :: T.Text -> Maybe UTCTime parseTimestamp text = case parse timestampParser "" text of - Left _ -> Nothing - Right val -> Just val + Left _ -> Nothing + Right val -> Just val where timestampParser :: Parser UTCTime timestampParser = do @@ -113,7 +113,7 @@ getItem indexItem = do dropWhile (not . matchClass (T.pack "li") (T.pack "date")) $ tags tags = parseTags rawHtml - + getIndex :: T.Text -> Int -> IO ([IndexItem], Bool) getIndex rootUrl pageNumber = do @@ -121,7 +121,7 @@ getIndex rootUrl pageNumber = do resp <- httpLBS rq return $ if getResponseStatusCode resp == 200 then parseIndex . decodeUtf8 . BL.toStrict . getResponseBody $ resp - else ([], False) + else ([], False) where parseIndex :: T.Text -> ([IndexItem], Bool) parseIndex x = (mapMaybe parseIndexEntry $ partitions (matchClass (T.pack "div") (T.pack "topic")) $ parseTags x, hasNextPage $ parseTags x) @@ -138,7 +138,7 @@ getIndex rootUrl pageNumber = do iiTitle = text, iiPubTime = ts } _ -> Nothing - + makeUrl root pagenumber | pagenumber == 0 || pagenumber == 1 = root @@ -149,5 +149,5 @@ getIndex rootUrl pageNumber = do else paginationLinksCount > 1 where paginationLinksCount = length . filter (~== "") . extractBetween "p" . dropWhile (~/= "