Jump to content

Herr Coiner

Mitglieder
  • Gesamte Inhalte

    103
  • Benutzer seit

  • Letzter Besuch

Alle erstellten Inhalte von Herr Coiner

  1. @Jokin Noch was... // Abschnitt index.php 12.2.1.2.1: // prüfen ob ich überhaupt genug Coins zur Verfügung habe if ($__balanceBot_coins[$key]['free'] > $amount) Müssen wir wirklich mehr freie Coins haben als wir verkaufen wollen? Es sollte doch auch klappen, wenn wir gerade genügend haben: if ($__balanceBot_coins[$key]['free'] >= $amount)
  2. Danke, kein Problem. Das ist der Vorteil von Open Source: Mehr Augen sehen auch mehr. So geht die W'keit für Fehler zielstrebig gegen 0 .
  3. @Jokin Frage: Woher kommt hier $market? Im ganzen Code wird diese Variable anscheinend nirgends angelegt bzw. befüllt. Ich nehme mal an, dass PHP automatisch Variablennamen wie $side etc. in der Zeichenkette durch die entsprechenden Werte ersetzt. Gibt es dann keine Fehlermeldung, wenn z.B. $market nicht existiert?
  4. Das war mir nicht klar. Es ging mir darum deine Fragen zu beantworten, nicht in der Kristallkugel deine Gedanken zu lesen, sorry.
  5. Das Programm sollte man runterladen und auf einem Rechner ausführen, der nicht mit dem Internet verbunden ist, d.h. offline. Das wurde hier schon mehrfach erwähnt und es steht auch auf der Website. Dann kann jedenfalls niemand mitlesen welche Schlüssel erzeugt werden. Logisch, oder? Nach dem Runterladen kann man überprüfen, ob in der empfangenen Datei wirklich genau das steht, was drin stehen soll. Die Prozedur ist dort relativ knapp auf englisch beschrieben. Technisch weniger versierte dürften wohl Probleme damit haben. Selber habe ich das noch nicht ausprobiert. Wirklich sicher sein kannst du aber nur, wenn du den Quellcode verstehst und nachvollziehst. Das dürfte leider nur wenigen Spezialisten gelingen. Hier ist halt Vertrauen nötig in die bis anhin 17 Entwickler, die das Ding programmiert haben. Denkbar wäre wirklich, dass die erzeugten Schlüssel einen geheimen Code enthalten, mit dem die Entwickler sich irgendwie Zugang zur jeder von ihrer Software generierten Wallet verschaffen können. Und "Ohne Gewähr" ist ja eine Standard-Floskel, die man überall findet, sogar bei der Bekanntgabe der Lottozahlen. Nicht dass jemand auf die Idee kommt, die Software-Entwickler verantwortlich zu machen für seinen eigenen, unvorsichtigen Umgang mit BitCoins und seinem Walltet.
  6. Grenzwertig vielleicht, aber wahr... und über Geschmack lässt sich streiten. Denke, als Satire geht es noch durch. Für's Totschweigen bin ich jedenfalls nicht und es fiel mir auch nichts besseres ein um mit wenig Worten zu sagen was ich meine.
  7. Hmm... vielleicht habe ich da auch was verwechselt ^^. Ich bezog mich auf den Vorschlag ganz unten auf der Seite "Wallet Details" bei bitaddress.org zum privaten Schlüssel im B6-Format (auf das grüne Plus-Zeichen klicken). Dort wird beschrieben, wie man einen wirklich zufälligen B6-Schlüssel mit dem Würfel erzeugt und sie schreiben auch, dass echter (physikalischer) Zufall besser ist als einer aus dem Zufallsgenerator vom PC. Dann hast du oben aber einen Fehler gemacht und die Information hier doch preisgegeben .
  8. Naja, im Fall von bitaddress.org ist es Open-Source-Software, die man auch direkt von GitHub runterladen kann, wenn man meint, dass bitaddress.org das Zeug verfälscht haben könnte. Open-Source heißt, dass der Code von jedem eingesehen werden kann, und in konkreten Fall arbeite(te)n über 170 19 Entwickler daran. Dass die alle unter einer kriminellen Decke stecken, ist eher unwahrscheinlich. Aber klar, sicher ist nur das Risiko. Das weiß man allerdings von vorneherein, wenn man anfängt mit Kryptowährung zu hantieren. Spätestens wenn die USA Krieg gegen die EU führen, funktioniert eh kein Computer mehr richtig und alle Coins sind verloren Aber ist das wahrscheinlich?
  9. Dachte, diese Seed Phrase ist das Passwort, mit dem eine Wallet-Software den privaten und öffentlichen Schlüssel erzeugt bzw. wieder herstellt? Da kann es doch nicht egal sein, ob zufällig oder nicht. Nicht umsonst soll man eine Seed wählen, die nicht jeder gleich errät, und diese dann sicher aufbewahren. Natürlich kann man auch zufällig 99x in Folge die 1 würfeln, aber dann ist es viel wahrscheinlicher, dass gar keine anderen Zahlen auf dem Würfel sind. Und erraten bzw. ausprobieren ist in dem Fall einfach: Man braucht nur 6 Versuche, wenn man annimmt, dass ein Wallet mit 99 gleichen Würfelzahlen erstellt wurde.
  10. Ja stimmt schon. Man kann die dann problemlos an gute Freunde und Familienmitglieder verteilen, um einen Komplettverlust im Katstrophenfall (Haus oder ganzer Kiez abgebrannt) zu vermeiden. Bankschließfächer gehen wohl auch. Der beste Passwortschutz im eigenen Haus nützt ja nichts, wenn die Hütte bis auf die Grundmauern abbrennt, vom Erdboden verschluckt oder ins Meer gespült wird oder was immer. Es gibt nunmal auch höhere Gewalt, nicht nur Datenklau.
  11. Ja, und natürlich feuer- und wasserfest müssen die Container sein. Noch was: Wer gaaanz sicher gehen will, sollte die Container unbeobachtet irgendwo mitten im Pazifik versenken. Die genauen Geo-Koordinaten sollte man natürlich ebenso geschützt wieder woanders versenken usw. *SCNR*
  12. Die Adresse kannte ich auch nicht. Sieht gut aus, einfach und übersichtlich Übrigens: Wer seinen Key lieber auswürfeln würde aber die Mühe scheut, die 99 Würfe wirklich auszuführen, kann sie auch gratis hier holen. Das sind echte Zufallszahlen, die aus atmosphärischem Rauschen erzeugt werden, im Unterschied zu sog. Pseudo-Zufallszahlen vom PC, die nicht wirklich zufällig sind.
  13. Schöne Zahl eigentlich, die 900%, nur etwas deplatziert. Man müsste es so hinbiegen können, dass sie schließlich als Reingewinn dasteht. An diese Logik mit mit Gesamt-Portfoliowert und Gesamt-Coinwert muss ich mich aber erst gewöhnen. Bin jedenfalls froh, dass die Berechnung soweit stimmt, vielen Dank für die Erklärung.
  14. @Jokin: Irgendwas scheint da nicht zu stimmen in meinem Programm... Ich habe z.B. ohne offene Order: Basis: 0,9 ETH NEO: 0,0 ETH BNB: 0,1 ETH ADA: 0,0 ETH Damit ergibt sich $sum_coin_value zu NEO + BNB + ADA = 0 + 0,1 + 0 = 0,1 ETH. Für den prozentualen Anteil bekomme ich dann NEO: 0 / 0,1 * 100 = 0% BNB: 0,1 / 0,1 * 100 = 100% ADA: 0 / 0,1 * 100 = 0% Und für die Basiswährung (letzte Zeile im Zitat) dann der Hammer: 0,9 / 0,1 * 100 = 900% Wahrscheinlich hab' ich das falsch verstanden irgendwie falsch programmiert, den die 900% stimmen ja wohl sicher nicht. Das mit der Seitenlinie verstehe ich jedenfalls so: Konfiguriert sind 40% vom Gesamtkapital in Basiswährung, und die restlichen 60% soll der Bot dann möglichst ins Verhältnis 40% + 30% + 30% balancieren, richtig?
  15. Hab' ich gemacht und jetzt ist es vollbracht... zumal sich gerade auf meinem Abreißkalender ein gewisser Buddha aus dem 6. Jh. v. Chr. zu Wort meldete mit dem Spruch "Wer über jeden Schritt lange nachdenkt, der steht sein Leben lang auf einem Bein." Und ja, es debuggt sich besser mit den echten Zahlen von der API.
  16. Ah, interessant, danke für die Info. Mir ist das im Code nämlich auch aufgefallen und ich hatte insgeheim gehofft, dass du dir den Code an Stelle auch nochmal anschaust. Hat also geklappt und ist absichtlich so, alles klar Übrigens habe ich auch noch keinen Binance-Account angelegt... will erst mit dem Code soweit durch sein dass ich denke, er könnte laufen. Es kann ja noch ne ganze Weile dauern, bis es soweit ist, und will vermeiden dass die Coins inzwischen nur untätig rumliegen.
  17. Ja, Dank PeWi ist es jetzt klar. Ausgeben lassen geht aber nicht, ich hab' kein PHP auf dem Rechner, bin nur in Go unterwegs und muss halt den PHP-Code soweit verstehen, dass ich ihn in nachprogrammieren kann. Gut, das du alles so ausführlich notiert hast . Da kommen wenig Zweifel auf, nur das mit dem $key hatte mich etwas verwirrt.
  18. update_messages($message); // Message in DB schreiben und ausgeben. exit; // Skript beenden ... macht ja nu echt keinen Sinn. Oha, jetzt sind wir pleite . Meine Standfunktion für fatales Fehlerhandling ist "ShitHappend(reason){...}" @Jokin: Es gibt noch einen kleinen Copy/Paste-Fehler: Im Kommentar dürfte es wohl nicht "Basis-Währung" heißen. Es wird ja die 'virtual_balance' vom Coin erhöht:
  19. Bin noch nicht dahinter gekommen, was es genau mit dem $key und $array_coin auf sich hat. Ist $key vielleicht der Index 0 bis Anzahl Coins (als Zahl)? Und $array_coin ist dann das konkrete Coin-Array bei $__balanceBot_coins[$key], also z.B. bei $__balanceBot_coins[0] der erste Coin? Aber das scheint mir nicht logisch, denn manchmal erscheint $array_coin auch nur im Schleifenkopf und wird in der Schleife nicht mehr verwendet. Aber wozu dient es dann?
  20. Also sowas geht viel eleganter. Such' mal nach Linq für PHP, z.B. hier. Linq kommt aus der MS .Net Welt und ich möchte es nicht mehr missen. Es ist eine Art Abfragesprache ähnlich wie für Datenbanken, z.B. wenn man aus eine langen Liste etwas bestimmtes raussuchen möchte. Das passende "symbol" aus der Liste bekommt man etwa so (C# Syntax): var mySymbol = array_binance_exchangeInfo["symbols"].FirstOrDefault(entry => entry["symbol"] == balanceBot_basecurrency['name']); Danach hat man schon das "symbol", wenn es existiert, sonst null. Und das ist längst nicht alles. Linq ist ziemlich mächtig. Für PHP gibt's das anscheinend auch. Man erspart sich viele verschachtelte Schleifen. Hab's für Go auch importiert. EDIT: Sorry, falscher Thread. Wollte das hier nicht zumüllen mit Programmiervorschlägen
  21. Boah, noch frecher als Javascript, was immer noch meine Lieblingssprache ist . Dieses Go geht mir schon langsam auf den Keks... nicht mal etwas wie a = test ? 1 : 2; gibt es da. Man muss es umständlich notieren: if test { a = 1 } else { a = 2 } Mittelalter oder was? Dachte erst Go ist eine coole, moderne Sprache.
  22. Bekommt man denn in PHP auch nur Zeichenketten? JSON kommt ja von Javascript, wo nicht viel Heckmeck um Datentypen gemacht wird. Wenn auch Binance die Zahlen als Zeichenketten liefert, dann sollte der Empfänger doch so früh wie möglich wieder Zahlen daraus machen. Ich überlege also, ob ich nicht vielleicht den API-Client entsprechend ändere, so dass er mir immer gleich Zahlen gibt. Das wäre wirklich einfacher.
  23. Hmmm, MariaDB kenne ich nicht. dachte eigentlich, dass sie das im Beispiel nur draufspielen, weil es vllt. später für WordPress gebraucht wird. Kann man die MySql-DB nicht direkt ansprechen ohne diese Maria? Hast du dir das verlinkte Beispiel angesehen, wo alles der Reihe nach installiert wird? Da kommt zuerst MySql und dann MariaDB, nicht direkt "MariaDB anstatt MySQL". Das Weib würde ich einfach weglassen . Und dass es nicht das allerneueste MySQL PHP ist, ist für den Bot wohl auch nicht tragisch. Wie auch immer... ich komme leider nur langsam voran mit meiner Go-Version :kopfkratz:. Jede Kleinigkeit muss ich nachlesen...mal eben ne Schleife ein Array bauen - Pustekuchen. Die Syntax ist sehr außergewöhnlich, und überhaupt auch das ganze Konzept von Go. Auf was hab' ich mich da nur eingelassen... aber egal, bin ja selber schuld, ich zieh das jetzt halt durch. Bin halt immer noch bei Lektion 3, Beispiel gefällig? // Wir erstellen ein Array von Zeigern auf alle vom Bot verwalteten Coins, incl. Basis-Coin: var botAllCoins = (func() []*coin { allCoins := make([]*coin, 0, len(botCoins)+1) // Leeres Array mit der nötigen Kapazität allCoins = append(allCoins, &botBaseCoin) // Wir fügen den Basis-Coin ein for i := 0; i < len(botCoins); i++ { // Wir fügen die restlichen Coins ein allCoins = append(allCoins, &botCoins[i]) } return allCoins })() // Nun wollen wir wissen wieviele Coins wir insgesamt in unserem Portfolio haben (Teil 4) func getAccountinfo() (*binance.Account) { // Wir senden eine entsprechende Anfrage an Binance und schauen uns an was da zurück kommt. var binanceAccount, err = binanceClient.NewGetAccountService().Do(context.Background()) checkErr(err, "Error getting binance account data.") // Im Array binanceAccount.Balances steht unser ganzer Bestand. // Wir interessieren uns nur für die vom Bot verwalteten Coins: for _, botCoin := range botAllCoins { // Wir suchen das Asset mit dem Namen unseres Coins raus botCoinBalance := linq.From(binanceAccount.Balances).FirstWith(func(item interface{}) bool { return item.(binance.Balance).Asset == botCoin.Balance.Asset }) if botCoinBalance != nil { // Das gefundene Asset ist vom Typ binance.Balance found := botCoinBalance.(binance.Balance) // "locked" ist die Anzahl, für die gerade offene Order angelegt sind, locked, _ := strconv.ParseFloat(found.Locked, 64) // "free" ist die noch verfügbare Anzahl für neue Order free, _ := strconv.ParseFloat(found.Free, 64) message := fmt.Sprintf("Bestand: %v %s", free+locked, found.Asset) insertMessage(message) // Message in DB schreiben und ausgeben. // Wir aktualisieren entsprechend unseren Bot-Coin: botCoin.Balance.Free = found.Free botCoin.Balance.Locked = found.Locked } } } Was mich sehr verwundert ist, das Free und Locked als Zeichenketten reinkommen statt als Zahlen. Das liegt an der Binance-API, nicht an unserem API-Client. Was haben die sich wohl dabei gedacht? So kann man ja nicht vernünftig damit rechnen ohne vorher zu konvertieren.
  24. Ah gut Dann lass' ich die Ausgabe hier mal weg. Vielleicht ist ja das ja was brauchbares: PHP Debugging mit Visual Studio Code und Xampp - YouTube Du müsstest dazu auf den Open Source Editor Visual Studio Code umsteigen. Den kann ich sehr empfehlen. Man kann mit GitHub kommunizieren, Betriebssystem-Befehle absetzen, Code-Highlighting, Syntaxprüfung, Debugging uvm. sind dabei... Und er kommt mit allen möglichen Sprachen klar: Python, JavaScript, PHP, Go, C# und und und. Einfach die gewünschten Plugins runterladen (werden zur Auswahl angeboten) und schon kann man loslegen. Anfangs etwas gewöhnungsbedürftig, z.B. weil man immer erst ein Verzeichnis auswählen muss, in dem man dann den Quellcode für's Projekt erstellt bzw. lädt. Am besten zuerst ins Verzeichnis wechseln und einfach den Editor mit dem Befehl "Code" von der OS-Kommandozeile starten. Will man ein anderes Verzeichnis haben, dann muss man den Editor erst schliessen. Es gibt auch ein Erklär-Video irgendwo, nur finde ich es gerade nicht. Für den Anfang ist sowas aber gut für den ersten Überblick, dann muss man nicht alles selber rausfinden durch Versuch und Irrtum. Man kommt aber schnell rein.
  25. Frage zu echo-print hier: Brauchen wir diese Ausgabe unbedingt oder ist das hier nur anfänglich zur Kontrolle und fällt später evtl. wieder raus? In Go habe ich nämlich das Problem, dass mir die Client-API kein Array zurückgibt, das man einfach echo-print-ähnlich zum Browser rausschicken kann, sondern ich bekomme eine Go-Stuktur, die ich zur Ausgabe extra wieder ins ursprüngliche JSON-Format konvertieren muss. Wenn diese Ausgabe im weiteren Verlauf nicht wirklich noch gebraucht wird, würde ich an dieser Stelle lieber darauf verzichten. Im Debug-Modus kann ich bei Bedarf auch genau sehen, was da zurückgekommen ist.
×
×
  • Neu erstellen...

Wichtige Information

Wir speichern Cookies auf Ihrem Gerät, um diese Seite besser zu machen. Sie können Ihre Cookie-Einstellungen anpassen, ansonsten gehen wir davon aus, dass Sie damit einverstanden sind. In unseren Datenschutzerklärungen finden sie weitere Informationen.