24unix Geschrieben 9. März 2021 Teilen Geschrieben 9. März 2021 Gerade eben schrieb o0dy: Das schockt mich jetzt aber. Solange und kein wissen darüber. Lass gut sein, ja? Du hast Recht und ich meine Ruhe. Nutze doch Google. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
o0dy Geschrieben 9. März 2021 Teilen Geschrieben 9. März 2021 (bearbeitet) vor 26 Minuten schrieb 24unix: Ich werde mir jetzt keine Google Konto anlegen und den GA installieren, um das direkt zu belegen. Hatte ich erwartet dass du dich so davor drückst. Billige ausrede, und das als Entwickler 😅 vor 23 Minuten schrieb 24unix: Lass gut sein, ja? Du hast Recht Gerne. Schön dass du es endlich eingesehen hast 👍 Bearbeitet 9. März 2021 von o0dy Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
o0dy Geschrieben 9. März 2021 Teilen Geschrieben 9. März 2021 Gerade eben schrieb bjew: mensch, lasst das. solche Diskussionen passen besser in den C-Thread 😂 ich kanns nicht verschieben, du? 😅 Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
24unix Geschrieben 9. März 2021 Teilen Geschrieben 9. März 2021 (bearbeitet) Habe Lektion 3 jetzt komplett durch, konnte die Schleifen deutlich reduzieren, ob es lesbarer ist liegt im Auge des Betrachters … function updateAccountInfo($botID) { try { $this->binanceAccount = $this->binanceAPI->account(); } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); } $exchangeInfo = []; try { $exchangeInfo = $this->binanceAPI->exchangeInfo(); } catch (Exception $e) { echo $e->getMessage(); } $botBaseCurrency = $this->bot->getBaseCurrency($botID); $base = array_search($botBaseCurrency, array_column($this->binanceAccount['balances'], 'asset')); $baseCurrency = $this->binanceAccount['balances'][$base]; $coins = $this->bot->getCoins($botID); $coinValues = []; foreach ($coins as $coin) { $coinID = array_search($coin->name, array_column($this->binanceAccount['balances'], 'asset')); // get rates $prevDay = []; try { echo("search: $coin->name"); // get base currency from Bot class if ($prevDayRaw = $this->binanceAPI->prevDay($coin->name . $botBaseCurrency)) { //print_r($prevDay); $prevDay['price'] = $prevDayRaw['lastPrice']; $prevDay['price24High'] = $prevDayRaw['highPrice']; $prevDay['price24Low'] = $prevDayRaw['lowPrice']; $this->storeMessage("fetched: " . $coin->name . $botBaseCurrency); } else { $this->storeMessage("error fetching: " . $coin->name . $botBaseCurrency); } } catch (Exception $e) { echo $e->getMessage(); } $rules = []; $filters = $exchangeInfo['symbols'][$coin->name . 'USDT']['filters']; $lotSizeID = array_search('LOT_SIZE', array_column($filters, 'filterType')); $rules['minQty'] = $exchangeInfo['symbols'][$coin->name . 'USDT']['filters'][$lotSizeID]['minQty']; $rules['minQtyPrecision'] = abs(floor(log10($rules['minQty']))); $minNotionalID = array_search('MIN_NOTIONAL', array_column($filters, 'filterType')); $rules['minNotional'] = $exchangeInfo['symbols'][$coin->name . 'USDT']['filters'][$minNotionalID]['minNotional']; $priceFilterID = array_search('PRICE_FILTER', array_column($filters, 'filterType')); $rules['tickSize'] = $exchangeInfo['symbols'][$coin->name . 'USDT']['filters'][$priceFilterID]['tickSize']; $rules['tickSizePrecision'] = abs(floor(log10($rules['tickSize']))); $balance = $this->binanceAccount['balances'][$coinID]; $coinValues[] = array_merge($prevDay, $balance, $rules); try { $binanceOpenOrder[$coin->name] = $this->binanceAPI->openOrders($coin->name . $botBaseCurrency); } catch(Exception $e) { echo $e->getMessage(); } } print_r($coinValues); // get all open orders } Edit: Etwas die Optik angepasst. https://y.24unix.net/v5e93 Bearbeitet 9. März 2021 von 24unix Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cftral Geschrieben 13. März 2021 Teilen Geschrieben 13. März 2021 (bearbeitet) Danke für deine Tutorial Reihe @Jokin Aktuell probiere ich mich auch an der Binance API und komme gerade bei den Exchange Limits nicht weiter. Ich verstehe nicht genau was mit LOT_SIZE, MIN_NOTIONAL und PRICE_FILTER gemeint sind. In Klammern ein Beispiel Symbol auf das ich mich beziehe, in dem Fall ETH: - LOT_SIZE (maxQty = 100000.00000000, minQty = 0.00100000, stepSize = 0.00100000): Es müssen mindestens 0.001 Coins gehandelt werden und es dürfen maximal 100000 Coins getraded werden. Außerdem muss die Coin Anzahl in 0.001 Schritten angegeben werden (= max 3 Nachkommastellen) - MIN_NOTIONAL (minNotional = 0.00010000) Hier habe ich das so verstanden das dieser Wert auch die Mindestanzahl an Coins im Trade wiedergibt. Aber das wäre ein Widerspruch zu minQty in LOT_SIZE. Irgendwas verstehe ich hier also falsch. - PRICE_FILTER(maxPrice = 100000.00000000, minPrice = 0.00000100, tickSize = 0.00000100): Hier verstehe ich eigentlich auch nicht was damit gemeint ist, bezieht sich das jetzt auf den Preis der anderen Währung/Coins mit dem wir ETH kaufen würden? Bearbeitet 13. März 2021 von Cftral Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Cftral Geschrieben 13. März 2021 Teilen Geschrieben 13. März 2021 vor 18 Minuten schrieb bjew: sollte in der api-beschreibung beschrieben sein In der API Beschreibung habe ich folgendes gefunden: PRICE_FILTER ExchangeInfo format: { "filterType": "PRICE_FILTER", "minPrice": "0.00000100", "maxPrice": "100000.00000000", "tickSize": "0.00000100" } minPrice defines the minimum price/stopPrice allowed; disabled on minPrice == 0. maxPrice defines the maximum price/stopPrice allowed; disabled on maxPrice == 0. tickSize defines the intervals that a price/stopPrice can be increased/decreased by; disabled on tickSize == 0. => Minumum/Maximum Preis per Coin den man Verkauft/Kaufen möchte (und auf welche Nachkomastelle genau) LOT_SIZE ExchangeInfo format: { "filterType": "LOT_SIZE", "minQty": "0.00100000", "maxQty": "100000.00000000", "stepSize": "0.00100000" } The LOT_SIZE filter defines the quantity (aka "lots" in auction terms) rules for a symbol. There are 3 parts: minQty defines the minimum quantity/icebergQty allowed. maxQty defines the maximum quantity/icebergQty allowed. stepSize defines the intervals that a quantity/icebergQty can be increased/decreased by. => Minimum, Maximum Anzahl der Coins die man in einem Trade kaufen/verkaufen kann (und auf welche Nachkomastelle genau) MIN_NOTIONAL ExchangeInfo format: { "filterType": "MIN_NOTIONAL", "minNotional": "0.00100000", "applyToMarket": true, "avgPriceMins": 5 } The MIN_NOTIONAL filter defines the minimum notional value allowed for an order on a symbol. An order's notional value is the price * quantity. If the order is an Algo order (e.g. STOP_LOSS_LIMIT), then the notional value of the stopPrice * quantity will also be evaluated. If the order is an Iceberg Order, then the notional value of the price * icebergQty will also be evaluated. applyToMarket determines whether or not the MIN_NOTIONAL filter will also be applied to MARKET orders. Since MARKET orders have no price, the average price is used over the last avgPriceMins minutes. avgPriceMins is the number of minutes the average price is calculated over. 0 means the last price is used. => Gesamt Preis/Wert des Trades Denke ich habe es jetzt verstanden, danke Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
24unix Geschrieben 27. März 2021 Teilen Geschrieben 27. März 2021 vor 6 Minuten schrieb bjew: nun, was macht dein Bot? fertig, erfolgreich? Unverändert 😞 Mir kam leider was anderes dazwischen. Ich hoffe, dass es nächste Woche weiter geht, aber man muss halt Prioritäten setzen. Aber vergessen habe ich die Baustelle nicht Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
24unix Geschrieben 1. April 2021 Teilen Geschrieben 1. April 2021 Ein wenig habe ich diese Woche geschafft, aber nicht so viel. Ich habe die Trennung zwischen Frontend und Backend weiter ausgebaut, per Timer (das, was man vor systemd mit cron gemacht hat) werden nun alle 10 Minuten die relevanten Daten zu den Coins geholt und in die DB geschrieben, ich schaue morgen mal, wie viel das ist, sind ja nur ein paar Bytes pro Zeile, ich denke, auf eine 20GB Partition kann ich Jahre mitplotten. Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden