Browse Source

Comissions support

master
Denis Tereshkin 8 years ago
parent
commit
c2c42e1045
  1. 5
      src/ATrade/Broker/Protocol.hs
  2. 2
      src/ATrade/Broker/Server.hs
  3. 1
      src/ATrade/Broker/TradeSinks/TelegramTradeSink.hs
  4. 1
      src/ATrade/Broker/TradeSinks/ZMQTradeSink.hs
  5. 6
      src/ATrade/Price.hs

5
src/ATrade/Broker/Protocol.hs

@ -121,6 +121,7 @@ data TradeSinkMessage = TradeSinkHeartBeat | TradeSinkTrade { @@ -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 { @@ -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 @@ -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 @@ -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 @@ -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"

2
src/ATrade/Broker/Server.hs

@ -140,7 +140,9 @@ brokerServerThread state = finally brokerServerThread' cleanup @@ -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

1
src/ATrade/Broker/TradeSinks/TelegramTradeSink.hs

@ -65,6 +65,7 @@ sinkThread apitoken chatId killMv chan = do @@ -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
}

1
src/ATrade/Broker/TradeSinks/ZMQTradeSink.hs

@ -71,6 +71,7 @@ sinkThread ctx tradeSinkEp killMv chan = whileM_ (not <$> wasKilled) $ @@ -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
}

6
src/ATrade/Price.hs

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE OverloadedStrings #-}
module ATrade.Price (
Price(..),
@ -16,6 +17,9 @@ import Data.Ratio @@ -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 @@ -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

Loading…
Cancel
Save