Last active
May 31, 2021 18:30
-
-
Save miracle2k/eda22abfb8c0d80d83f4957f3e074da9 to your computer and use it in GitHub Desktop.
Fetch fees and precisions for all currencies from kucoin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"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} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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