Back to Ccxt

the following calculation depends on contract specifications

wiki/examples/py/bitmex-order-value.md

4.5.521.4 KB
Original Source
python
# -*- coding: utf-8 -*-

import os
import sys


import ccxt  # noqa: E402


exchange = ccxt.bitmex()

markets = exchange.load_markets()
symbol = 'XBTU20'
market = exchange.market(symbol)

units = {
   'XBT':  { 'decimals': 4, 'multiplier': 1, 'name': 'bitcoin' },
   'mXBT': { 'decimals': 3, 'multiplier': 1000, 'name': 'milli-bitcoin'  },
   'μXBT': { 'decimals': 1, 'multiplier': 1000000, 'name': 'micro-bitcoin' },
   'XBt':  { 'decimals': 0, 'multiplier': 100000000, 'name': 'satoshi' },
}

# the following calculation depends on contract specifications
# one XBTU20 contract = 1 USD in Bitcoin

num_contracts = 1

while True:
   try:
       ticker = exchange.fetch_ticker(symbol)
       last_price = ticker['last']
       value = num_contracts / last_price
       print('---------------------------------------------------------------')
       print(exchange.iso8601(exchange.milliseconds()))
       for unit in units:
           multiplier = units[unit]['multiplier']
           decimals = units[unit]['decimals']
           name = units[unit]['name']
           rounded_value = exchange.decimal_to_precision(value * multiplier, ccxt.ROUND, decimals)  # alternatively, use ccxt.TRUNCATE here
           print(num_contracts, symbol, 'contracts =', rounded_value, unit, '(' + name + ')')
   except Exception as e:
       pass