Skip to content

Instantly share code, notes, and snippets.

@miracle2k
Last active May 31, 2021 18:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save miracle2k/eda22abfb8c0d80d83f4957f3e074da9 to your computer and use it in GitHub Desktop.
Save miracle2k/eda22abfb8c0d80d83f4957f3e074da9 to your computer and use it in GitHub Desktop.
Fetch fees and precisions for all currencies from kucoin
import ccxt
import json
import time
import re
import decimal
import math
kucoin = ccxt.kucoin({
"apiKey": "",
"secret": ""
})
kucoin.load_markets()
kucoin.fetch_currencies()
min_amounts_by_base = {}
precision_by_base = {}
def handle_precision_error(market, error):
match = re.match(r'The precision of amount\((.*)\) is incorrect. The precision of (.+) is (\d+)', error['msg'])
if not match:
return False
amount = int(match.groups()[2])
currency = match.groups()[0]
precision_by_base[market['base']] = amount
print('Precision for %s (%s) is %s' % (market['symbol'], currency, amount))
return True
def handle_amount_error(market, error):
match = re.match('Min amount each order:([0-9.E-]+)', error['msg'])
if not match:
return False
amount = float(match.groups()[0])
min_amounts_by_base[market['base']] = amount
print('Min amount for %s is %s' % (market['symbol'], amount))
return True
print('Kucoin has %s markets' % len(kucoin.markets))
for market in kucoin.markets.values():
if market['base'] in min_amounts_by_base:
continue
done = False
right_precision_loaded = False
num_failures = 0
while not done:
# Which precision to use for the order?
#
# Try with the default first
default_precision = kucoin.currencies[market['base']].get('precision', 10)
precision = precision_by_base.get(market['base'], default_precision)
lot = math.pow(10, -precision)
print('Trying to create an order @ %s with lot size %s' % (market['symbol'], lot))
try:
order = kucoin.create_limit_buy_order(market['symbol'], lot, 1)
except ccxt.InvalidOrder as e:
msg = e.args[0]
if msg.startswith('kucoin '):
msg = msg[7:]
data = json.loads(msg)
# kucoin complains about the precision? Catch information, then retry.
if handle_precision_error(market, data):
if right_precision_loaded:
raise RuntimeError((
"kucoin gave us a precision error for the second time in a row, despite us trying "
"again with the proper precision. Market: {}, Precision: {}").format(market['symbol'], precision))
right_precision_loaded = True
continue
if not handle_amount_error(market, data):
raise RuntimeError('Unexpected error message received from kucoin, could not parse it:' % data)
done = True
except Exception as e:
print(e)
num_failures += 1
if num_failures > 4:
done = True
else:
raise RuntimeError('A kucoin order was submitted successfully. This is unexpected: %s' % order)
time.sleep(1)
print()
print()
print(json.dumps(min_amounts_by_base))
print()
print()
print(json.dumps(precision_by_base))
{"BTC": 1e-05, "ETH": 1e-05, "BCH": 1e-05, "GAS": 0.1, "NEO": 0.01, "KCS": 1.0, "TMT": 1.0, "TFD": 1.0, "LALA": 1.0, "CS": 1.0, "DOCK": 1.0, "ETN": 1.0, "IHT": 1.0, "KICK": 1.0, "WAN": 1.0, "ACT": 1.0, "APH": 1.0, "BAX": 1.0, "DATX": 1.0, "DEB": 1.0, "ELEC": 1.0, "GO": 1.0, "HSR": 1.0, "IOTX": 1.0, "LOOM": 1.0, "LYM": 1.0, "MOBI": 1.0, "OMX": 1.0, "ONT": 1.0, "OPEN": 1.0, "QKC": 1.0, "SHL": 1.0, "SOUL": 1.0, "SPHTX": 1.0, "SRN": 1.0, "TKY": 1.0, "TOMO": 1.0, "TRAC": 1.0, "COV": 1.0, "DADI": 1.0, "ELF": 1.0, "LTC": 1.0, "MAN": 1.0, "PRL": 1.0, "STK": 1.0, "ZIL": 1.0, "ZPT": 1.0, "BPT": 1.0, "CAPP": 1.0, "POLY": 1.0, "TNC": 1.0, "XRB": 0.1, "AXP": 1.0, "COFI": 1.0, "CXO": 1.0, "DRGN": 1.0, "DTA": 1.0, "ING": 1.0, "MTN": 1.0, "OCN": 10.0, "PARETO": 1.0, "SNC": 1.0, "TEL": 10.0, "WAX": 1.0, "ADB": 1.0, "BOS": 1.0, "HAT": 1.0, "HKN": 1.0, "HPB": 1.0, "IOST": 1.0, "ARY": 1.0, "DBC": 1.0, "KEY": 1.0, "GAT": 1.0, "RPX": 1.0, "ACAT": 1.0, "CV": 10.0, "QLC": 1.0, "R": 1.0, "TIO": 1.0, "ITC": 1.0, "AGI": 10.0, "EXY": 1.0, "MWAT": 1.0, "DENT": 1.0, "J8T": 1.0, "LOCI": 1.0, "CAT": 1.0, "ARN": 1.0, "CAN": 1.0, "EOS": 0.1, "ETC": 0.1, "JNT": 1.0, "PLAY": 1.0, "CHP": 1.0, "DASH": 0.01, "DNA": 1.0, "EBTC": 1.0, "FOTA": 1.0, "PURA": 0.1, "UTK": 1.0, "CAG": 1.0, "GLA": 1.0, "HAV": 1.0, "SPF": 1.0, "TIME": 1.0, "ABT": 1.0, "BNTY": 1.0, "ELIX": 1.0, "ENJ": 1.0, "AIX": 1.0, "VEN": 1.0, "AION": 1.0, "DAT": 1.0, "QTUM": 0.1, "WTC": 0.1, "DGB": 1.0, "SNOV": 1.0, "BRD": 1.0, "AMB": 1.0, "BTM": 1.0, "MANA": 1.0, "RHOC": 1.0, "XLR": 1.0, "XAS": 0.1, "CHSB": 1.0, "UKG": 1.0, "POLL": 1.0, "FLIXX": 0.1, "INS": 1.0, "OMG": 0.1, "TFL": 1.0, "WPR": 1.0, "LEND": 1.0, "KNC": 0.001, "BCD": 0.001, "LA": 1.0, "ONION": 1.0, "POWR": 0.1, "SNM": 1.0, "BTG": 0.001, "PBL": 1.0, "MOD": 0.1, "PPT": 0.1, "BCPT": 1.0, "GVT": 0.1, "HST": 0.1, "SNT": 0.1, "SUB": 0.1, "NEBL": 0.1, "CVC": 0.1, "MTH": 1.0, "NULS": 0.1, "PAY": 0.1, "RDN": 1.0, "REQ": 1.0, "QSP": 0.1}
{"BTC": 8.0, "ETH": 7.0, "BCH": 8.0, "GAS": 4.0, "NEO": 6.0, "KCS": 4.0, "TMT": 4.0, "TFD": 4.0, "LALA": 4.0, "CS": 4.0, "DOCK": 4.0, "ETN": 2.0, "IHT": 4.0, "KICK": 4.0, "WAN": 4.0, "ACT": 4.0, "APH": 4.0, "BAX": 4.0, "DATX": 4.0, "DEB": 4.0, "ELEC": 4.0, "GO": 4.0, "HSR": 4.0, "IOTX": 4.0, "LOOM": 4.0, "LYM": 4.0, "MOBI": 4.0, "OMX": 4.0, "ONT": 4.0, "OPEN": 4.0, "QKC": 4.0, "SHL": 4.0, "SOUL": 4.0, "SPHTX": 4.0, "SRN": 4.0, "TKY": 4.0, "TOMO": 4.0, "TRAC": 4.0, "COV": 4.0, "DADI": 4.0, "ELF": 4.0, "LTC": 6.0, "MAN": 4.0, "PRL": 4.0, "STK": 4.0, "ZIL": 4.0, "ZPT": 4.0, "BPT": 4.0, "CAPP": 2.0, "POLY": 4.0, "TNC": 4.0, "XRB": 6.0, "AXP": 4.0, "COFI": 4.0, "CXO": 4.0, "DRGN": 4.0, "DTA": 4.0, "ING": 4.0, "MTN": 4.0, "OCN": 2.0, "PARETO": 4.0, "SNC": 4.0, "TEL": 2.0, "WAX": 4.0, "ADB": 4.0, "BOS": 4.0, "HAT": 4.0, "HKN": 4.0, "HPB": 4.0, "IOST": 4.0, "ARY": 4.0, "DBC": 4.0, "KEY": 4.0, "GAT": 4.0, "RPX": 4.0, "ACAT": 4.0, "CV": 2.0, "QLC": 4.0, "R": 6.0, "TIO": 4.0, "ITC": 4.0, "AGI": 4.0, "EXY": 4.0, "MWAT": 4.0, "DENT": 4.0, "J8T": 4.0, "LOCI": 4.0, "CAT": 4.0, "ARN": 4.0, "CAN": 4.0, "EOS": 4.0, "ETC": 6.0, "JNT": 4.0, "PLAY": 4.0, "CHP": 4.0, "DASH": 8.0, "DNA": 4.0, "EBTC": 4.0, "FOTA": 4.0, "PURA": 6.0, "UTK": 4.0, "CAG": 6.0, "GLA": 4.0, "HAV": 8.0, "SPF": 4.0, "TIME": 6.0, "ABT": 4.0, "BNTY": 4.0, "ELIX": 4.0, "ENJ": 4.0, "AIX": 4.0, "VEN": 4.0, "AION": 6.0, "DAT": 4.0, "QTUM": 4.0, "WTC": 4.0, "DGB": 4.0, "SNOV": 4.0, "BRD": 4.0, "AMB": 4.0, "BTM": 4.0, "MANA": 4.0, "RHOC": 6.0, "XLR": 4.0, "XAS": 6.0, "CHSB": 4.0, "UKG": 6.0, "POLL": 4.0, "FLIXX": 4.0, "INS": 4.0, "OMG": 4.0, "TFL": 4.0, "WPR": 4.0, "LEND": 4.0, "KNC": 4.0, "BCD": 8.0, "LA": 4.0, "ONION": 4.0, "POWR": 6.0, "SNM": 4.0, "BTG": 8.0, "PBL": 4.0, "MOD": 6.0, "PPT": 6.0, "BCPT": 6.0, "GVT": 6.0, "HST": 6.0, "SNT": 4.0, "SUB": 2.0, "NEBL": 6.0, "CVC": 4.0, "MTH": 4.0, "NULS": 6.0, "PAY": 4.0, "RDN": 6.0, "REQ": 4.0, "QSP": 6.0}
@tagliola
Copy link

tagliola commented Dec 9, 2018

I tried using the minimum order values, but found out they are not currency based, they are pair based. I tried to capture them for most pairs and you'll see some different values for a single currency (f.e. EOS):

{"ABT-BTC":1.0,"ABT-ETH":1.0,"ACAT-BTC":1.0,"ACAT-ETH":1.0,"ACT-BTC":1.0,"ACT-ETH":1.0,"ADB-BTC":1.0,"ADB-ETH":1.0,"AGI-BTC":10.0,"AGI-ETH":10.0,"AION-BTC":1.0,"AION-ETH":1.0,"AIX-BTC":1.0,"AIX-ETH":1.0,"AMB-BTC":1.0,"AMB-ETH":1.0,"AOA-BTC":1.0,"AOA-ETH":1.0,"AOA-USDT":1.0,"APH-BTC":1.0,"APH-ETH":1.0,"ARN-BTC":1.0,"ARN-ETH":1.0,"ARY-BTC":1.0,"ARY-ETH":1.0,"AXPR-BTC":1.0,"AXPR-ETH":1.0,"BAX-BTC":1.0,"BAX-ETH":1.0,"BCHABC-BTC":0.001,"BCHABC-ETH":0.001,"BCHSV-BTC":0.001,"BCHSV-ETH":0.001,"BCHSV-USDT":0.000010,"BNTY-BTC":1.0,"BNTY-ETH":1.0,"BOS-BTC":1.0,"BOS-ETH":1.0,"BPT-BTC":1.0,"BPT-ETH":1.0,"BRD-BTC":1.0,"BRD-ETH":1.0,"BTC-PAX":0.000010,"BTC-TUSD":0.000010,"BTC-USDC":0.000010,"BTC-USDT":0.000010,"BTG-BTC":0.001,"BTG-ETH":0.001,"BTM-BTC":1.0,"BTM-ETH":1.0,"BU-BTC":1.0,"BU-ETH":1.0,"CAG-BTC":1.0,"CAG-ETH":1.0,"CAN-BTC":1.0,"CAN-ETH":1.0,"CAPP-BTC":1.0,"CAPP-ETH":1.0,"CAT-BTC":1.0,"CAT-ETH":1.0,"CBC-BTC":1.0,"CBC-ETH":1.0,"CHP-BTC":1.0,"CHP-ETH":1.0,"CHSB-BTC":1.0,"CHSB-ETH":1.0,"COFI-BTC":1.0,"COFI-ETH":1.0,"COSM-BTC":1.0,"COSM-ETH":1.0,"COV-BTC":1.0,"COV-ETH":1.0,"CPC-BTC":1.0,"CPC-ETH":1.0,"CRPT-BTC":0.1,"CRPT-ETH":0.1,"CS-BTC":1.0,"CS-ETH":1.0,"CS-KCS":1.0,"CVC-ETH":1.0,"CXO-BTC":1.0,"CXO-ETH":1.0,"DADI-BTC":1.0,"DADI-ETH":1.0,"DAG-BTC":1.0,"DAG-ETH":1.0,"DASH-BTC":0.01,"DASH-ETH":0.01,"DAT-BTC":1.0,"DAT-ETH":1.0,"DATX-BTC":1.0,"DATX-ETH":1.0,"DBC-BTC":1.0,"DBC-ETH":1.0,"DBC-NEO":1.0,"DCC-BTC":1.0,"DCC-ETH":1.0,"DCC-USDT":1.0,"DCR-BTC":0.1,"DCR-ETH":0.1,"DEB-BTC":1.0,"DEB-ETH":1.0,"DENT-BTC":1.0,"DENT-ETH":1.0,"DGB-BTC":1.0,"DGB-ETH":1.0,"DOCK-BTC":1.0,"DOCK-ETH":1.0,"DRGN-BTC":1.0,"DRGN-ETH":1.0,"DRGN-NEO":1.0,"DTA-BTC":1.0,"DTA-ETH":1.0,"EBTC-BTC":1.0,"EBTC-ETH":1.0,"EDN-BTC":0.1,"EDN-ETH":0.1,"EDR-BTC":1.0,"EDR-ETH":1.0,"EGT-BTC":1.0,"EGT-ETH":1.0,"ELA-BTC":1.0,"ELA-ETH":1.0,"ELEC-BTC":1.0,"ELEC-ETH":1.0,"ELF-BTC":1.0,"ELF-ETH":1.0,"ELIX-BTC":1.0,"ELIX-ETH":1.0,"ENJ-BTC":1.0,"ENJ-ETH":1.0,"EOS-BTC":0.1,"EOS-ETH":0.1,"EOS-KCS":0.1,"EOS-NEO":0.1,"EOS-USDT":1.0,"ETC-BTC":0.1,"ETC-ETH":0.1,"ETC-USDT":1.0,"ETH-BTC":0.000010,"ETH-PAX":0.000010,"ETH-TUSD":0.000010,"ETH-USDC":0.000010,"ETH-USDT":0.000010,"ETN-BTC":1.0,"ETN-ETH":1.0,"EXY-BTC":1.0,"EXY-ETH":1.0,"FLIXX-BTC":0.1,"FLIXX-ETH":0.1,"FOTA-BTC":1.0,"FOTA-ETH":1.0,"FTM-BTC":1.0,"FTM-ETH":1.0,"GAS-BTC":0.1,"GAS-NEO":0.1,"GAT-BTC":1.0,"GAT-ETH":1.0,"GGC-BTC":1.0,"GGC-USDT":1.0,"GMB-BTC":1.0,"GMB-ETH":1.0,"GO-BTC":1.0,"GO-ETH":1.0,"GO-USDT":1.0,"GVT-BTC":0.1,"GVT-ETH":0.1,"HAV-BTC":1.0,"HAV-ETH":1.0,"HAV-USDT":1.0,"HKN-BTC":1.0,"HKN-ETH":1.0,"HPB-BTC":1.0,"HPB-ETH":1.0,"HST-BTC":0.1,"HST-ETH":0.1,"IHT-BTC":1.0,"IHT-ETH":1.0,"ING-BTC":1.0,"ING-ETH":1.0,"INS-BTC":1.0,"INS-ETH":1.0,"IOG-BTC":0.1,"IOG-ETH":0.1,"IOST-BTC":1.0,"IOST-ETH":1.0,"IOTX-BTC":1.0,"IOTX-ETH":1.0,"ITC-BTC":1.0,"ITC-ETH":1.0,"ITC-USDT":1.0,"J8T-BTC":1.0,"J8T-ETH":1.0,"JNT-BTC":1.0,"JNT-ETH":1.0,"KCS-BTC":1.0,"KCS-ETH":1.0,"KCS-USDT":1.0,"KEY-BTC":1.0,"KEY-ETH":1.0,"KICK-BTC":1.0,"KICK-ETH":1.0,"KNC-BTC":0.001,"KNC-ETH":0.001,"LA-BTC":1.0,"LA-ETH":1.0,"LALA-BTC":1.0,"LALA-ETH":1.0,"LEND-BTC":1.0,"LEND-ETH":1.0,"LOC-BTC":1.0,"LOC-ETH":0.1,"LOCI-BTC":1.0,"LOCI-ETH":1.0,"LOOM-BTC":1.0,"LOOM-ETH":1.0,"LTC-BTC":0.01,"LTC-ETH":0.05,"LTC-KCS":1.0,"LTC-USDT":0.001,"LYM-BTC":1.0,"LYM-ETH":1.0,"LYM-USDT":1.0,"MAN-BTC":1.0,"MAN-ETH":1.0,"MANA-BTC":1.0,"MANA-ETH":1.0,"MOBI-BTC":1.0,"MOBI-ETH":1.0,"MOD-BTC":0.1,"MOD-ETH":0.1,"MTC-BTC":0.1,"MTC-ETH":0.1,"MTN-BTC":1.0,"MTN-ETH":1.0,"MVP-BTC":1.0,"MVP-ETH":1.0,"MWAT-BTC":1.0,"MWAT-ETH":1.0,"NANO-BTC":0.1,"NANO-ETH":0.1,"NANO-USDT":1.0,"NEBL-BTC":0.1,"NEBL-ETH":0.1,"NEO-BTC":0.1,"NEO-ETH":0.1,"NEO-KCS":0.01,"NEO-USDT":0.001,"NULS-BTC":0.1,"NULS-ETH":0.1,"NUSD-BTC":1.0,"NUSD-ETH":1.0,"NUSD-USDT":1.0,"OCN-BTC":10.0,"OCN-ETH":10.0,"OLT-BTC":1.0,"OLT-ETH":1.0,"OMG-BTC":0.1,"OMG-ETH":0.1,"OMX-BTC":1.0,"OMX-ETH":1.0,"ONION-BTC":1.0,"ONION-ETH":1.0,"ONT-BTC":1.0,"ONT-ETH":1.0,"ONT-USDT":1.0,"OPQ-BTC":1.0,"OPQ-ETH":1.0,"PAL-BTC":1.0,"PAL-ETH":1.0,"PARETO-BTC":1.0,"PARETO-ETH":1.0,"PAY-BTC":0.1,"PAY-ETH":1.0,"PHX-BTC":1.0,"PHX-ETH":1.0,"PLAY-BTC":1.0,"PLAY-ETH":1.0,"POLL-BTC":1.0,"POLL-ETH":1.0,"POLY-BTC":1.0,"POLY-ETH":1.0,"POWR-BTC":0.1,"POWR-ETH":0.1,"PPT-BTC":0.1,"PPT-ETH":0.1,"PURA-BTC":0.1,"PURA-ETH":0.1,"QKC-BTC":1.0,"QKC-ETH":1.0,"QLC-BTC":1.0,"QLC-ETH":1.0,"QSP-BTC":0.1,"QSP-ETH":0.1,"R-BTC":1.0,"R-ETH":1.0,"REQ-BTC":1.0,"REQ-ETH":1.0,"RHOC-BTC":1.0,"RHOC-ETH":1.0,"SNC-BTC":1.0,"SNC-ETH":1.0,"SNM-BTC":1.0,"SNM-ETH":1.0,"SNOV-BTC":1.0,"SNOV-ETH":1.0,"SNT-ETH":1.0,"SNX-BTC":1.0,"SNX-ETH":1.0,"SNX-USDT":1.0,"SOUL-BTC":1.0,"SOUL-ETH":1.0,"SPF-BTC":1.0,"SPF-ETH":1.0,"SPHTX-BTC":1.0,"SPHTX-ETH":1.0,"SRN-BTC":1.0,"SRN-ETH":1.0,"STK-BTC":1.0,"STK-ETH":1.0,"SUB-BTC":0.1,"SUB-ETH":0.1,"SUSD-BTC":1.0,"SUSD-ETH":1.0,"SUSD-USDT":1.0,"TFD-BTC":1.0,"TFD-ETH":1.0,"TFL-BTC":1.0,"TFL-ETH":1.0,"TIME-BTC":1.0,"TIME-ETH":1.0,"TKY-BTC":1.0,"TKY-ETH":1.0,"TKY-NEO":1.0,"TKY-USDT":1.0,"TMT-BTC":1.0,"TMT-ETH":1.0,"TNC-BTC":1.0,"TNC-ETH":1.0,"TNC-NEO":1.0,"TOMO-BTC":1.0,"TOMO-ETH":1.0,"TRAC-BTC":1.0,"TRAC-ETH":1.0,"TRX-BTC":1.0,"TRX-ETH":1.0,"TRX-USDT":1.0,"UKG-BTC":1.0,"UKG-ETH":1.0,"USDT-TUSD":1.0,"USDT-USDC":0.1,"USE-BTC":1.0,"USE-ETH":1.0,"UT-BTC":1.0,"UT-ETH":0.1,"UTK-BTC":1.0,"UTK-ETH":1.0,"VET-BTC":1.0,"VET-ETH":1.0,"VET-USDT":1.0,"VNX-BTC":1.0,"VNX-ETH":1.0,"WAN-BTC":1.0,"WAN-ETH":1.0,"WAX-BTC":1.0,"WAX-ETH":1.0,"WPR-BTC":1.0,"WPR-ETH":1.0,"XAS-BTC":0.1,"XAS-ETH":0.1,"XLM-BTC":1.0,"XLM-ETH":1.0,"XLM-USDT":1.0,"XLR-BTC":1.0,"XLR-ETH":1.0,"XRP-BTC":1.0,"XRP-ETH":1.0,"XRP-KCS":1.0,"XRP-NEO":1.0,"XRP-TUSD":1.0,"XRP-USDC":1.0,"XRP-USDT":1.0,"ZIL-BTC":1.0,"ZIL-ETH":1.0,"ZINC-BTC":1.0,"ZINC-ETH":1.0,"ZPT-BTC":1.0,"ZPT-ETH":1.0,"ZRX-BTC":1.0,"ZRX-ETH":1.0}

HTH

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment