def trade_from_iconomi(raw_trade: Dict) -> Trade: timestamp = raw_trade['timestamp'] if raw_trade['type'] == 'buy_asset': trade_type = TradeType.BUY tx_asset = Asset(raw_trade['target_ticker']) tx_amount = raw_trade['target_amount'] native_asset = Asset(raw_trade['source_ticker']) native_amount = raw_trade['source_amount'] elif raw_trade['type'] == 'sell_asset': trade_type = TradeType.SELL tx_asset = Asset(raw_trade['source_ticker']) tx_amount = raw_trade['source_amount'] native_amount = raw_trade['target_amount'] native_asset = Asset(raw_trade['target_ticker']) pair = TradePair(f'{tx_asset.identifier}_{native_asset.identifier}') amount = tx_amount rate = Price(native_amount / tx_amount) fee_amount = raw_trade['fee_amount'] fee_asset = Asset(raw_trade['fee_ticker']) return Trade( timestamp=timestamp, location=Location.ICONOMI, pair=pair, trade_type=trade_type, amount=amount, rate=rate, fee=fee_amount, fee_currency=fee_asset, link=str(raw_trade['transactionId']), )
def _trade_from_independentreserve(raw_trade: Dict) -> Trade: """Convert IndependentReserve raw data to a trade https://www.independentreserve.com/products/api#GetClosedFilledOrders May raise: - DeserializationError - UnknownAsset - KeyError """ log.debug(f'Processing raw IndependentReserve trade: {raw_trade}') trade_type = TradeType.BUY if 'Bid' in raw_trade[ 'OrderType'] else TradeType.SELL base_asset = independentreserve_asset(raw_trade['PrimaryCurrencyCode']) quote_asset = independentreserve_asset(raw_trade['SecondaryCurrencyCode']) amount = FVal(raw_trade['Volume']) - FVal(raw_trade['Outstanding']) timestamp = deserialize_timestamp_from_date( date=raw_trade['CreatedTimestampUtc'], formatstr='iso8601', location='IndependentReserve', ) rate = Price(FVal(raw_trade['AvgPrice'])) fee_amount = FVal(raw_trade['FeePercent']) * amount fee_asset = base_asset return Trade( timestamp=timestamp, location=Location.INDEPENDENTRESERVE, base_asset=base_asset, quote_asset=quote_asset, trade_type=trade_type, amount=AssetAmount(amount), rate=rate, fee=Fee(fee_amount), fee_currency=fee_asset, link=str(raw_trade['OrderGuid']), )
def trade_from_bitcoinde(raw_trade: Dict) -> Trade: """Convert bitcoin.de raw data to a trade May raise: - DeserializationError - UnknownAsset - KeyError """ try: timestamp = deserialize_timestamp_from_date( raw_trade['successfully_finished_at'], 'iso8601', 'bitcoinde', ) except KeyError: # For very old trades (2013) bitcoin.de does not return 'successfully_finished_at' timestamp = deserialize_timestamp_from_date( raw_trade['trade_marked_as_paid_at'], 'iso8601', 'bitcoinde', ) trade_type = TradeType.deserialize(raw_trade['type']) tx_amount = deserialize_asset_amount(raw_trade['amount_currency_to_trade']) native_amount = deserialize_asset_amount( raw_trade['volume_currency_to_pay']) tx_asset, native_asset = bitcoinde_pair_to_world(raw_trade['trading_pair']) amount = tx_amount rate = Price(native_amount / tx_amount) fee_amount = deserialize_fee(raw_trade['fee_currency_to_pay']) fee_asset = A_EUR return Trade( timestamp=timestamp, location=Location.BITCOINDE, base_asset=tx_asset, quote_asset=native_asset, trade_type=trade_type, amount=amount, rate=rate, fee=fee_amount, fee_currency=fee_asset, link=str(raw_trade['trade_id']), )
def trade_from_iconomi(raw_trade: Dict) -> Trade: """Turn an iconomi trade entry to our own trade format May raise: - UnknownAsset - DeserializationError - KeyError """ timestamp = raw_trade['timestamp'] if raw_trade['type'] == 'buy_asset': trade_type = TradeType.BUY tx_asset = asset_from_iconomi(raw_trade['target_ticker']) tx_amount = deserialize_asset_amount(raw_trade['target_amount']) native_asset = asset_from_iconomi(raw_trade['source_ticker']) native_amount = deserialize_asset_amount(raw_trade['source_amount']) elif raw_trade['type'] == 'sell_asset': trade_type = TradeType.SELL tx_asset = asset_from_iconomi(raw_trade['source_ticker']) tx_amount = deserialize_asset_amount(raw_trade['source_amount']) native_amount = deserialize_asset_amount(raw_trade['target_amount']) native_asset = asset_from_iconomi(raw_trade['target_ticker']) amount = tx_amount rate = Price(native_amount / tx_amount) fee_amount = deserialize_fee(raw_trade['fee_amount']) fee_asset = asset_from_iconomi(raw_trade['fee_ticker']) return Trade( timestamp=timestamp, location=Location.ICONOMI, base_asset=tx_asset, quote_asset=native_asset, trade_type=trade_type, amount=amount, rate=rate, fee=fee_amount, fee_currency=fee_asset, link=str(raw_trade['transactionId']), )
def trade_from_bitcoinde(raw_trade: Dict) -> Trade: try: timestamp = deserialize_timestamp_from_date( raw_trade['successfully_finished_at'], 'iso8601', 'bitcoinde', ) except KeyError: # For very old trades (2013) bitcoin.de does not return 'successfully_finished_at' timestamp = deserialize_timestamp_from_date( raw_trade['trade_marked_as_paid_at'], 'iso8601', 'bitcoinde', ) trade_type = deserialize_trade_type(raw_trade['type']) tx_amount = AssetAmount(FVal(raw_trade['amount_currency_to_trade'])) native_amount = FVal(raw_trade['volume_currency_to_pay']) tx_asset, native_asset = bitcoinde_pair_to_world(raw_trade['trading_pair']) pair = TradePair(f'{tx_asset.identifier}_{native_asset.identifier}') amount = tx_amount rate = Price(native_amount / tx_amount) fee_amount = deserialize_fee(raw_trade['fee_currency_to_pay']) fee_asset = Asset('EUR') return Trade( timestamp=timestamp, location=Location.BITCOINDE, pair=pair, trade_type=trade_type, amount=amount, rate=rate, fee=fee_amount, fee_currency=fee_asset, link=str(raw_trade['trade_id']), )