Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
'amount_str': '0.01414016', // Quantity string
'price_str': '12700.00', // Price string
'timestamp': '1562650233', // Event time
'price': Decimal('12700.0'), // Price
'type': 1,
'id': 93215787
},
'event': 'trade',
'channel': 'live_trades_btcusd'
}
"""
data = msg['data']
chan = msg['channel']
pair = pair_exchange_to_std(chan.split('_')[-1])
side = BUY if data['type'] == 0 else SELL
amount = Decimal(data['amount'])
price = Decimal(data['price'])
ts = int(data['microtimestamp'])
order_id = data['id']
await self.callback(TRADES, feed=self.id,
pair=pair,
side=side,
amount=amount,
price=price,
timestamp=timestamp_normalize(self.id, ts),
receipt_timestamp=timestamp,
order_id=order_id)
'cp': 64000.0, // Change of price
'pcp': 6823000.0, // Previous closing price
'sid': 1584257228000000, // Sequential ID
'st': 'SNAPSHOT', // 'SNAPSHOT' or 'REALTIME'
'td': '2020-03-15', // Trade date utc
'ttm': '07:27:08', // Trade time utc
'c': 'FALL', // Change - 'FALL' / 'RISE' / 'EVEN'
}
"""
price = Decimal(msg['tp'])
amount = Decimal(msg['tv'])
await self.callback(TRADES, feed=self.id,
order_id=msg['sid'],
pair=pair_exchange_to_std(msg['cd']),
side=BUY if msg['ab'] == 'BID' else SELL,
amount=amount,
price=price,
timestamp=timestamp_normalize(self.id, msg['ttms']),
receipt_timestamp=timestamp)
async def _trade(self, msg: dict, timestamp: float):
"""
{
'ch': 'market.btcusd.trade.detail',
'ts': 1549773923965,
'tick': {
'id': 100065340982,
'ts': 1549757127140,
'data': [{'id': '10006534098224147003732', 'amount': Decimal('0.0777'), 'price': Decimal('3669.69'), 'direction': 'buy', 'ts': 1549757127140}]}}
"""
for trade in msg['tick']['data']:
await self.callback(TRADES,
feed=self.id,
pair=pair_exchange_to_std(msg['ch'].split('.')[1]),
order_id=trade['id'],
side=BUY if trade['direction'] == 'buy' else SELL,
amount=Decimal(trade['amount']),
price=Decimal(trade['price']),
timestamp=timestamp_normalize(self.id, trade['ts']),
receipt_timestamp=timestamp)
payload = {'currencyPair': pair_std_to_exchange(symbol, self.ID)}
if start:
payload['start'] = API._timestamp(start).timestamp()
if end:
payload['end'] = API._timestamp(end).timestamp()
payload['limit'] = 10000
data = self._post("returnTradeHistory", payload)
ret = []
for trade in data:
ret.append({
'price': Decimal(trade['rate']),
'amount': Decimal(trade['amount']),
'timestamp': pd.Timestamp(trade['date']).timestamp(),
'side': BUY if trade['type'] == 'buy' else SELL,
'fee_currency': symbol.split('-')[1],
'fee_amount': Decimal(trade['fee']),
'trade_id': trade['tradeID'],
'order_id': trade['orderNumber']
})
return ret
async def _trade(self, msg: dict, pair: str, timestamp: float):
"""
example message:
[1,[["3417.20000","0.21222200","1549223326.971661","b","l",""]]]
channel id, price, amount, timestamp, size, limit/market order, misc
"""
for trade in msg[1]:
price, amount, server_timestamp, side, _, _ = trade
await self.callback(TRADES, feed=self.id,
pair=pair,
side=BUY if side == 'b' else SELL,
amount=Decimal(amount),
price=Decimal(price),
order_id=None,
timestamp=float(server_timestamp),
receipt_timestamp=timestamp)
for trade in msg["params"]["data"]:
await self.callback(TRADES,
feed=self.id,
pair=trade["instrument_name"],
order_id=trade['trade_id'],
side=BUY if trade['direction'] == 'buy' else SELL,
amount=Decimal(trade['amount']),
price=Decimal(trade['price']),
timestamp=timestamp_normalize(self.id, trade['timestamp']),
receipt_timestamp=timestamp,
)
if 'liquidation' in trade:
await self.callback(LIQUIDATIONS,
feed=self.id,
pair=trade["instrument_name"],
side=BUY if trade['direction'] == 'buy' else SELL,
leaves_qty=Decimal(trade['amount']),
price=Decimal(trade['price']),
order_id=trade['trade_id'],
receipt_timestamp=timestamp
)
async def _trades(self, msg: dict, timestamp: float):
pair = pair_exchange_to_std(msg['symbol'])
for update in msg['data']:
price = Decimal(update['price'])
quantity = Decimal(update['quantity'])
side = BUY if update['side'] == 'buy' else SELL
order_id = update['id']
timestamp = timestamp_normalize(self.id, update['timestamp'])
await self.callback(TRADES, feed=self.id,
pair=pair,
side=side,
amount=quantity,
price=price,
order_id=order_id,
timestamp=timestamp,
receipt_timestamp=timestamp)
async def _trades(self, msg: dict, timestamp: float):
pair = pair_exchange_to_std(msg['symbol'])
for update in msg['data']:
price = Decimal(update['price'])
quantity = Decimal(update['quantity'])
side = BUY if update['side'] == 'buy' else SELL
order_id = update['id']
timestamp = timestamp_normalize(self.id, update['timestamp'])
await self.callback(TRADES, feed=self.id,
pair=pair,
side=side,
amount=quantity,
price=price,
order_id=order_id,
timestamp=timestamp,
receipt_timestamp=timestamp)
async def _trade(self, msg: dict, timestamp: float):
"""
example message:
{"channel": "trades", "market": "BTC-PERP", "type": "update", "data": [{"id": null, "price": 10738.75,
"size": 0.3616, "side": "buy", "liquidation": false, "time": "2019-08-03T12:20:19.170586+00:00"}]}
"""
for trade in msg['data']:
await self.callback(TRADES, feed=self.id,
pair=pair_exchange_to_std(msg['market']),
side=BUY if trade['side'] == 'buy' else SELL,
amount=Decimal(trade['size']),
price=Decimal(trade['price']),
order_id=None,
timestamp=float(timestamp_normalize(self.id, trade['time'])),
receipt_timestamp=timestamp)
if bool(trade['liquidation']):
await self.callback(LIQUIDATIONS,
feed=self.id,
pair=pair_exchange_to_std(msg['market']),
side=BUY if trade['side'] == 'buy' else SELL,
leaves_qty=Decimal(trade['size']),
price=Decimal(trade['price']),
order_id=None,
receipt_timestamp=timestamp
)
def _trade_normalization(self, trade: dict, symbol: str) -> dict:
return {
'timestamp': API._timestamp(trade['time']).timestamp(),
'pair': symbol,
'id': trade['id'],
'feed': self.ID,
'side': SELL if trade['side'] == 'sell' else BUY,
'amount': trade['size'],
'price': trade['price']
}