diff --git a/src/ATrade/Broker/Protocol.hs b/src/ATrade/Broker/Protocol.hs index 5039232..98a9ef6 100644 --- a/src/ATrade/Broker/Protocol.hs +++ b/src/ATrade/Broker/Protocol.hs @@ -121,6 +121,7 @@ data TradeSinkMessage = TradeSinkHeartBeat | TradeSinkTrade { tsCurrency :: T.Text, tsOperation :: Operation, tsExecutionTime :: UTCTime, + tsCommission :: Double, tsSignalId :: SignalId } deriving (Show, Eq) @@ -133,6 +134,7 @@ mkTradeMessage trade = TradeSinkTrade { tsCurrency = tradeVolumeCurrency trade, tsOperation = tradeOperation trade, tsExecutionTime = tradeTimestamp trade, + tsCommission = toDouble $ tradeCommission trade, tsSignalId = tradeSignalId trade } where @@ -182,6 +184,7 @@ instance ToJSON TradeSinkMessage where "volume-currency" .= tsCurrency, "operation" .= tsOperation, "execution-time" .= formatTimestamp tsExecutionTime, + "commission" .= tsCommission, "strategy" .= strategyId tsSignalId, "signal-id" .= signalName tsSignalId, "comment" .= comment tsSignalId]] @@ -201,6 +204,7 @@ instance FromJSON TradeSinkMessage where vol <- v .: "volume" cur <- v .: "volume-currency" op <- v .: "operation" + commission <- v .:? "commission" .!= 0 extime <- v .: "execution-time" >>= parseTimestamp strategy <- v .: "strategy" sid <- v .: "signal-id" @@ -214,5 +218,6 @@ instance FromJSON TradeSinkMessage where tsCurrency = cur, tsOperation = op, tsExecutionTime = extime, + tsCommission = commission, tsSignalId = SignalId strategy sid com } _ -> fail "Should've been trade object" diff --git a/src/ATrade/Broker/Server.hs b/src/ATrade/Broker/Server.hs index 18ca453..19bf277 100644 --- a/src/ATrade/Broker/Server.hs +++ b/src/ATrade/Broker/Server.hs @@ -140,7 +140,9 @@ brokerServerThread state = finally brokerServerThread' cleanup lastPackMap <- lastPacket <$> readIORef state case shouldResend sqnum peerId lastPackMap of Just response -> do + debugM "Broker.Server" $ "Resending packet for peerId: " ++ show peerId sendMessage sock peerId response -- Resend + atomicMapIORef state (\s -> s { lastPacket = M.delete peerId (lastPacket s)}) Nothing -> do -- Handle incoming request, send response response <- handleMessage peerId request diff --git a/src/ATrade/Broker/TradeSinks/TelegramTradeSink.hs b/src/ATrade/Broker/TradeSinks/TelegramTradeSink.hs index 5c60139..13e8029 100644 --- a/src/ATrade/Broker/TradeSinks/TelegramTradeSink.hs +++ b/src/ATrade/Broker/TradeSinks/TelegramTradeSink.hs @@ -65,6 +65,7 @@ sinkThread apitoken chatId killMv chan = do tsCurrency = tradeVolumeCurrency trade, tsOperation = tradeOperation trade, tsExecutionTime = tradeTimestamp trade, + tsCommission = toDouble (tradeCommission trade), tsSignalId = tradeSignalId trade } diff --git a/src/ATrade/Broker/TradeSinks/ZMQTradeSink.hs b/src/ATrade/Broker/TradeSinks/ZMQTradeSink.hs index c0edc1d..11a6946 100644 --- a/src/ATrade/Broker/TradeSinks/ZMQTradeSink.hs +++ b/src/ATrade/Broker/TradeSinks/ZMQTradeSink.hs @@ -71,6 +71,7 @@ sinkThread ctx tradeSinkEp killMv chan = whileM_ (not <$> wasKilled) $ tsCurrency = tradeVolumeCurrency trade, tsOperation = tradeOperation trade, tsExecutionTime = tradeTimestamp trade, + tsCommission = toDouble (tradeCommission trade), tsSignalId = tradeSignalId trade } diff --git a/src/ATrade/Price.hs b/src/ATrade/Price.hs index cceae45..c324e5b 100644 --- a/src/ATrade/Price.hs +++ b/src/ATrade/Price.hs @@ -1,4 +1,5 @@ {-# LANGUAGE MultiWayIf #-} +{-# LANGUAGE OverloadedStrings #-} module ATrade.Price ( Price(..), @@ -16,6 +17,9 @@ import Data.Ratio import Data.Aeson import Data.Scientific +import qualified Data.Text as T +import Text.Printf + data Price = Price { priceQuants :: !Int64 } deriving (Eq, Ord) @@ -76,5 +80,5 @@ instance Fractional Price where a / b = fromDouble $ toDouble a / toDouble b instance Show Price where - show = show . toDouble + show = printf "%.8f" . toDouble