|
|
|
@ -121,7 +121,7 @@ data TradeSinkMessage = TradeSinkHeartBeat | TradeSinkTrade { |
|
|
|
tsOperation :: Operation, |
|
|
|
tsOperation :: Operation, |
|
|
|
tsExecutionTime :: UTCTime, |
|
|
|
tsExecutionTime :: UTCTime, |
|
|
|
tsSignalId :: SignalId |
|
|
|
tsSignalId :: SignalId |
|
|
|
} |
|
|
|
} deriving (Show, Eq) |
|
|
|
|
|
|
|
|
|
|
|
getHMS :: UTCTime -> (Int, Int, Int, Int) |
|
|
|
getHMS :: UTCTime -> (Int, Int, Int, Int) |
|
|
|
getHMS (UTCTime _ diff) = (intsec `div` 3600, (intsec `mod` 3600) `div` 60, intsec `mod` 60, msec) |
|
|
|
getHMS (UTCTime _ diff) = (intsec `div` 3600, (intsec `mod` 3600) `div` 60, intsec `mod` 60, msec) |
|
|
|
@ -159,7 +159,7 @@ parseTimestamp _ = fail "Unable to parse timestamp: invalid type" |
|
|
|
|
|
|
|
|
|
|
|
instance ToJSON TradeSinkMessage where |
|
|
|
instance ToJSON TradeSinkMessage where |
|
|
|
toJSON TradeSinkHeartBeat = object ["command" .= T.pack "heartbeat" ] |
|
|
|
toJSON TradeSinkHeartBeat = object ["command" .= T.pack "heartbeat" ] |
|
|
|
toJSON TradeSinkTrade { .. } = object ["account" .= tsAccountId, |
|
|
|
toJSON TradeSinkTrade { .. } = object ["trade" .= object ["account" .= tsAccountId, |
|
|
|
"security" .= tsSecurity, |
|
|
|
"security" .= tsSecurity, |
|
|
|
"price" .= tsPrice, |
|
|
|
"price" .= tsPrice, |
|
|
|
"quantity" .= tsQuantity, |
|
|
|
"quantity" .= tsQuantity, |
|
|
|
@ -169,7 +169,7 @@ instance ToJSON TradeSinkMessage where |
|
|
|
"execution-time" .= formatTimestamp tsExecutionTime, |
|
|
|
"execution-time" .= formatTimestamp tsExecutionTime, |
|
|
|
"strategy" .= strategyId tsSignalId, |
|
|
|
"strategy" .= strategyId tsSignalId, |
|
|
|
"signal-id" .= signalName tsSignalId, |
|
|
|
"signal-id" .= signalName tsSignalId, |
|
|
|
"comment" .= comment tsSignalId] |
|
|
|
"comment" .= comment tsSignalId]] |
|
|
|
|
|
|
|
|
|
|
|
instance FromJSON TradeSinkMessage where |
|
|
|
instance FromJSON TradeSinkMessage where |
|
|
|
parseJSON = withObject "object" (\obj -> |
|
|
|
parseJSON = withObject "object" (\obj -> |
|
|
|
@ -177,7 +177,8 @@ instance FromJSON TradeSinkMessage where |
|
|
|
Nothing -> parseTrade obj |
|
|
|
Nothing -> parseTrade obj |
|
|
|
Just cmd -> return TradeSinkHeartBeat) |
|
|
|
Just cmd -> return TradeSinkHeartBeat) |
|
|
|
where |
|
|
|
where |
|
|
|
parseTrade v = do |
|
|
|
parseTrade obj = case HM.lookup "trade" obj of |
|
|
|
|
|
|
|
Just (Object v) -> do |
|
|
|
acc <- v .: "account" |
|
|
|
acc <- v .: "account" |
|
|
|
sec <- v .: "security" |
|
|
|
sec <- v .: "security" |
|
|
|
pr <- v .: "price" |
|
|
|
pr <- v .: "price" |
|
|
|
@ -199,3 +200,4 @@ instance FromJSON TradeSinkMessage where |
|
|
|
tsOperation = op, |
|
|
|
tsOperation = op, |
|
|
|
tsExecutionTime = extime, |
|
|
|
tsExecutionTime = extime, |
|
|
|
tsSignalId = SignalId strategy sid com } |
|
|
|
tsSignalId = SignalId strategy sid com } |
|
|
|
|
|
|
|
_ -> fail "Should've been trade object" |
|
|
|
|