def trade_pretty_printer(exchange_name, trade, markdown=False) -> str: """ Trade pretty printer :param exchange_name: the exchange name :param trade: the trade object :param markdown: if printer use markdown :return: the trade pretty printed """ try: from octobot_trading.enums import TraderOrderType _, _, code = get_markers(markdown) trade_type = trade.trade_type if trade_type == TraderOrderType.UNKNOWN: trade_type = trade.side trade_executed_time_str = ( timestamp_util.convert_timestamp_to_datetime( trade.executed_time, time_format=ORDER_TIME_FORMAT ) if trade.executed_time else "" ) return ( f"{code}{trade_type.name.replace('_', ' ')}{code}: {code}" f"{get_min_string_from_number(trade.executed_quantity)} {trade.currency}{code} at {code}" f"{get_min_string_from_number(trade.executed_price)} {trade.market}{code} " f"{exchange_name.capitalize()} " f"{trade_executed_time_str} " ) except ImportError: LOGGER.error( "open_order_pretty_printer requires OctoBot-Trading package installed" ) return ""
def _format_trades(trade_history): trade_time_key = "time" trade_price_key = "price" trade_description_key = "trade_description" trade_order_side_key = "order_side" trades = { trade_time_key: [], trade_price_key: [], trade_description_key: [], trade_order_side_key: [] } for trade in trade_history: trades[trade_time_key].append(convert_timestamp_to_datetime(trade.filled_time, time_format="%y-%m-%d %H:%M:%S")) trades[trade_price_key].append(trade.price) trades[trade_description_key].append(f"{trade.order_type.name}: {trade.quantity}") trades[trade_order_side_key].append(trade.side.value) return trades
def format_trades(dict_trade_history): trade_time_key = "time" trade_price_key = "price" trade_description_key = "trade_description" trade_order_side_key = "order_side" trades = { trade_time_key: [], trade_price_key: [], trade_description_key: [], trade_order_side_key: [] } for dict_trade in dict_trade_history: status = dict_trade.get( trading_enums.ExchangeConstantsOrderColumns.STATUS.value, trading_enums.OrderStatus.UNKNOWN.value) trade_side = trading_enums.TradeOrderSide( dict_trade[trading_enums.ExchangeConstantsOrderColumns.SIDE.value]) trade_type = trading_api.parse_trade_type(dict_trade) if trade_type == trading_enums.TraderOrderType.UNKNOWN: trade_type = trade_side if status is not trading_enums.OrderStatus.CANCELED.value or DISPLAY_CANCELLED_TRADES: trade_time = dict_trade[ trading_enums.ExchangeConstantsOrderColumns.TIMESTAMP.value] if trade_time > trading_constants.MINIMUM_VAL_TRADE_TIME: trades[trade_time_key].append( timestamp_util.convert_timestamp_to_datetime( trade_time, time_format="%y-%m-%d %H:%M:%S")) trades[trade_price_key].append( float( dict_trade[trading_enums.ExchangeConstantsOrderColumns. PRICE.value])) trades[trade_description_key].append( f"{trade_type.name.replace('_', ' ')}: " f"{dict_trade[trading_enums.ExchangeConstantsOrderColumns.AMOUNT.value]}" ) trades[trade_order_side_key].append(trade_side.value) return trades
def test_datetime_to_timestamp(): assert datetime_to_timestamp(convert_timestamp_to_datetime(322548600, time_format="%d/%m/%y %H:%M"), date_time_format="%d/%m/%y %H:%M") == 322548600