Voor een trading bot die communiceert met de Bitvavo API loop ik tegen een probleem aan, waarbij Bitvavo mijn orders niet accepteert vanwege een probleem met het amount bedrag.
Ze verwachten een float met een precision van X (bijvoorbeeld 5). Na eerder contact met hun support kreeg ik het volgende terug:
"Het ligt hier aan de precision. Als u een amount van 0.00014152 (5 getallen, de 0 uitgezonderd) zou gebruiken zou dit wel moeten werken."
Mijn laatste order had een amount van 8.16246765, en .. inderdaad, zoals verwacht gaat dit dus fout en krijg ik een fout terug vanuit Bitvavo.
Mijn vraag: Hoe zorg ik dat de getallen via PHP juist afgerond worden? De standaard functies (round() of number_format() werken niet, want die houden bij de precision geen rekening met 0-en.
Nog een stukje uit de Bitvavo API documentatie (https://docs.bitvavo.com/#tag/General/paths/~1markets/get):
pricePrecision (string)
Price precision determines how many significant digits are allowed. The rationale behind this is that for higher amounts, smaller price increments are less relevant. Examples of valid prices for precision 5 are: 100010, 11313, 7500.10, 7500.20, 500.12, 0.0012345. Examples of precision 6 are: 11313.1, 7500.11, 7500.25, 500.123, 0.00123456.
Hoe los ik dit dus op een nette manier op. Ik kan hele omslachtige manieren bedenken (omzetten naar string, punten verwijderen, alle leading zeros verwijderen en dan alles na string lengte volgens de opgegeven precision verwijderen zodat je bijvoorbeeld 5 getallen overhoudt. En dan weer de punt op de juiste(?) plek terugzetten, o.i.d.), maar volgens mij moeten er makkelijkere manieren of standaard methodes te bedenken zijn om dit robuust aan te pakken?
Iemand ervaring hiermee?
Ze verwachten een float met een precision van X (bijvoorbeeld 5). Na eerder contact met hun support kreeg ik het volgende terug:
"Het ligt hier aan de precision. Als u een amount van 0.00014152 (5 getallen, de 0 uitgezonderd) zou gebruiken zou dit wel moeten werken."
Mijn laatste order had een amount van 8.16246765, en .. inderdaad, zoals verwacht gaat dit dus fout en krijg ik een fout terug vanuit Bitvavo.
Mijn vraag: Hoe zorg ik dat de getallen via PHP juist afgerond worden? De standaard functies (round() of number_format() werken niet, want die houden bij de precision geen rekening met 0-en.
Nog een stukje uit de Bitvavo API documentatie (https://docs.bitvavo.com/#tag/General/paths/~1markets/get):
pricePrecision (string)
Price precision determines how many significant digits are allowed. The rationale behind this is that for higher amounts, smaller price increments are less relevant. Examples of valid prices for precision 5 are: 100010, 11313, 7500.10, 7500.20, 500.12, 0.0012345. Examples of precision 6 are: 11313.1, 7500.11, 7500.25, 500.123, 0.00123456.
Hoe los ik dit dus op een nette manier op. Ik kan hele omslachtige manieren bedenken (omzetten naar string, punten verwijderen, alle leading zeros verwijderen en dan alles na string lengte volgens de opgegeven precision verwijderen zodat je bijvoorbeeld 5 getallen overhoudt. En dan weer de punt op de juiste(?) plek terugzetten, o.i.d.), maar volgens mij moeten er makkelijkere manieren of standaard methodes te bedenken zijn om dit robuust aan te pakken?
Iemand ervaring hiermee?