Zum Inhalt springen

Tyler_Durden

Mitglied
  • Gesamte Inhalte

    29
  • Benutzer seit

  • Letzter Besuch

Beiträge von Tyler_Durden

  1. Am 5.4.2021 um 18:41 schrieb Serpens66:

    ist das update schon durch, bzw wie sieht man es ? mein altes skript funzt noch

    Zitat

    Am 5. April werden wir ein Update der Websocket-Funktionalität durchführen: Die Socket.io-Client-Bibliothek wird von der Version 0.9.16 auf die Version 2.4.0 aktualisiert.

    Eine Nutzung der neuen Version ist für Sie bereits jetzt möglich. Bitte verwenden Sie hierfür einfach den Host ws-mig.bitcoin.de anstatt ws.bitcoin.de.

    Bitte beachten Sie: Nach dem Update des Hosts ws.bitcoin.de am 5. April wird der Host ws-mig.bitcoin.de nur noch übergangsweise bis zum 3. Mai erreichbar sein. Sie müssen also spätestens am 3. Mai wieder den Host ws.bitcoin.de nutzen!

    Ups, habe übersehen, dass es eine Seite 2 gab.

  2. Ist korrekt.

    Ich habe seit einigen Tagen eine Nachricht bei mir:

    Zitat

    Sie gehören zu den ausgesuchten Kunden, die den Ripple (XRP) - Handel in der Beta-Phase nutzen. Bitte haben Sie Verständnis dafür, dass wir den Ripple - Handel sowie die Ein- / und Auszahlungen von XRP in der Beta-Phase manuell überwachen werden und aus diesem Grund zunächst nur tagsüber (Montag bis Freitag) ermöglichen werden.

    Gibt im Marktplatz auch eine XRP / EUR Rubrik.

    • Thanks 1
  3. Am 7.2.2021 um 14:35 schrieb Noobfire:

    Wenn man jetzt noch in einem extra Thread immer wieder einmal ein Ping Paket ("2") gesendet wird, bricht diese Verbindung auch nicht ab und läuft im Prinzip endlos.

    Ich wieder 😐

    Mein Code läuft soweit, wie ich es mir vortslle und loggt schön meinen Datensatz weg :) Danke erst einmal dafür, jetzt spare ich mir das Orderbuck abrufen und bin sogar noch kompletter.

    Allerdings stoße ich jetzt auf die von dir erwähnten Verbindungsabbrüche

    connection established: 2021-02-11 18:05:46
    WebSocket connection accepted with {'sid': '', 'upgrades': [], 'pingInterval': 25000, 'pingTimeout': 5000}
    
    [...]
    
    packet queue is empty, aborting
    Exiting write loop task
    Received packet NOOP data None
    WebSocket connection was closed, aborting
    Waiting for write loop task to end
    Engine.IO connection dropped
    Connection failed, new attempt in 0.96 seconds
    Exiting read loop task
    disconnected from server: 2021-02-11 18:06:16

    Wobei diese alle 30 Sekunden auftreten. (pingInterval + pingTimeout: 25000+5000 ms?)

    Ich habe es auch mit dem Ping ws.send("2") probiert und bekomme auch die 3 als Serverantwort. Der Abbruch folgt aber trotzdem, auch wenn ich über websocket statt socketio verbinde.

    Ich habe keine analoge Methodik für die socketio gefunden um die Verbindung offen zu halten.
    Momentan lasse ich den Code einfach laufen. Allerdings spammt mir

    connection established 2021-02-11 18:12:48
    packet queue is empty, aborting
    disconnected from server 2021-02-11 18:13:18
    connection established 2021-02-11 18:13:19

    meinen Output zu :D

  4. Der Interpreter für das Projekt ist D:\Programme\Python\Python39\python.exe

    Was mich etwas wundert ist, dass die Shell bei python help auf [...]\AppData\Local\Microsoft\WindowsApps verweist, in dem auch noch mal python.exe und python3.9.exe liegen.

    Das weiß ich aber nicht, wie die Pythoninstallation die Dateien ablegt und ob das nur ein Verweis ist.

    Edit:

    Anscheinend ist über den Windows Store eine Pythoninstanz installiert, und ich habe es manuell installiert gehabt.
    Ich versuche das mal zusammen zu ziehen.
    Bis jetzt ist es nicht aufgefallen, da ich alle packages über pycharm installiert habe. Wenn ich jetzt den client über pip3 install installiert habe, hat er es auf die windows Store installation geschrieben (wo auch immer die liegt).

    Ich deinstalliere jetzt alles, starte neu und installierte noch einmal. Mal sehen was dann rum kommt.

     

    Edit2:

    Jetzt ist alles klar. Alle meine Probleme kamen anscheinend tatsächlich daher, dass ich 2 mal python installiert hatte (wie auch immer und warum auch immer das ging)

    Vielen lieben Dank! Jetzt kann ich mich damit beschäftigen die events durchzuarbeiten.
    Vielleicht kann ich dir als Dank eine kleine Hilfe geben: LINK

    zB ist da die reason aufgeschlüsselt. die für mich sehr relevant ist.

    Zitat

     

    "0yzjOGFy3vQgfFm0re8." : Durch Nutzer gelöscht

     "0yxjWYBw2RVoMdjPhsLkivcyUrDYnJQ." : Angebot ausgelaufen

    und wenn erfolgreich angenommen 

     "0yyDOGDwkTklP1BR" : gekauft

     "0yzjXAA9kDutfQA." : verkauft

     

    Zitat

    Attempting WebSocket connection to wss://ws3.bitcoin.de/socket.io/1/?transport=websocket&EIO=4
    WebSocket connection accepted with {'sid': '07hn71jG3YqNyOUkCz0Y', 'upgrades': [], 'pingInterval': 25000, 'pingTimeout': 5000}
    Engine.IO connection established
    Sending packet MESSAGE data 0/market
    Received packet MESSAGE data 0
    Namespace / is connected
    connection established
    Received packet MESSAGE data 0/market,
    Namespace /market is connected
    Received packet MESSAGE data 2/market,["refresh_express_option",{"124434364":{"is_trade_by_sepa_allowed":"0","is_trade_by_fidor_reservation_allowed":"1","trading_pair":"btceur"}}]
    Received event "refresh_express_option" [/market]

     

  5. vor einer Stunde schrieb Noobfire:
    
    pip3 install python-socketio python-engineio websockets

     

    Windows ist korrekt.

    Über pip3 list bekomme ich foldende Packages, die installiert sind.

    Package          Version
    ---------------- ---------
    bidict           0.21.2
    certifi          2020.12.5
    chardet          4.0.0
    idna             2.10
    pip              21.0.1
    python-engineio  4.0.0
    python-socketio  5.0.4
    requests         2.25.1
    setuptools       3.3
    six              1.15.0
    urllib3          1.26.2
    websocket-client 0.57.0
    websockets       3.3

    Interessanterweise bekomme ich in Pycharm

    PyJWT 1.7.1 2.0.1
    bidict 0.21.2 0.21.2
    cachetools 4.2.0 4.2.1
    certifi 2020.12.5 2020.12.5
    chardet 4.0.0 4.0.0
    google-api-core 1.25.0 1.25.1
    google-api-python-client 1.12.8 1.12.8
    google-auth 1.24.0 1.25.0
    google-auth-httplib2 0.0.4 0.0.4
    google-auth-oauthlib 0.4.2 0.4.2
    googleapis-common-protos 1.52.0 1.52.0
    gspread 3.6.0 3.6.0
    httplib2 0.18.1 0.18.1
    idna 2.10 3.1
    oauthlib 3.1.0 3.1.0
    pip 21.0 21.0.1
    protobuf 3.14.0 3.14.0
    pyasn1 0.4.8 0.4.8
    pyasn1-modules 0.2.8 0.2.8
    python-engineio 4.0.0 4.0.0
    python-socketio 5.0.4 5.0.4
    pytz 2020.5 2021.1
    requests 2.25.1 2.25.1
    requests-oauthlib 1.3.0 1.3.0
    rsa 4.7 4.7
    setuptools 52.0.0 53.0.0
    six 1.15.0 1.15.0
    twilio 6.51.0 6.51.1
    uritemplate 3.0.1 3.0.1
    urllib3 1.26.2 1.26.3

    Und das erscheint mir schon einleuchtender. Jetzt befürchte ich, dass ich hier irgdnwie eine Pythonverwirrung drin habe. 😱

    Muss ich mal schauen, was da los ist.

  6. Ah, ok.

    Guter Tipp.

    Es kommt websocket-client package not installed, only polling transport is available

    Ich habe also offentsichtlich das falsche package installiert.

    Dann brauche ich sogar hier mal einen Tipp.

    Wenn ich

    pip3 install "python-socketio[client]"

    in der Shell ausführe, bekomme ich ein Packet namens websocket-client, dass über

    import socketio

    nicht eingebunden werden kann.

    Ich habe dann die Library manuell durchsucht nach dem websocket packat, das laut Signatur von Miguel Grinberg ist: python-socketio.
    Die Verlinkung führt auch zu der githubpage, dessen Dokumentation du oben geteilt hast.

    Und schon stehe ich auf dem Schlauch :D

  7. Danke erstmal an euch beide, da ihr euch ja wirklich tief in die GEschichte reingefuchst habt, und ich - da der Websocket nicht klappte - alle paar sekunde für mien Projekt das Orderbuch abfrage :D

    Eher so Weg des geringsten Widerstands als Eleganz.

    Da ich aber bei eurer für mich beeindruckenden Unterhaltung ca 5 Niveais zu tief einsteige habe ich noch ein paar Fragen.

    Ich habe nun das socketio-Packet von Miguel Grinberg eingebunden und dein (noobfire) Codebeispiel läuft ohne Fehler durch.

    Allerdings Endet der Code nach einem Durchlauf "erfolgreich".

    Es erscheint nicht mal das

    @sio.on('connect')
    def connect():
        print('connection established')

    Event.

    Ich habe irgendwie erwartet, dass die Prozedur weiterläuft und bei einkommenden Ereignissen die Daten ausgibt, wie es bei dem socketio-client-tool der Fall ist, wenn man die Events korrekt eingibt.

    Habe ich einen Denkfehler bzw. wo liegt dieser?

  8. Ich möchte kokoloko an dieser Stelle einmal danken.

    Ich kannte diesen Gesprächsfaden noch nicht und konnte die ganze Achternbahn der Gefühle einmal im vollen genießen.

    Interessant, dass sich an den ausbleibdenden Support-Antworten auch 2020/2021 anscheinend nichts getan hat. Von einer verschlechterung des Supports kann man also wirklich nicht sprechen :D

    Lustig auch, dass beim Kursverlust auf den Kurs von 3700€ verwiesen ist. Das tiefe Tal der Trauer nach '17.

  9. Am 22.1.2021 um 17:10 schrieb flynk:

    Hi,

    könntest du mal den kompletten Code zeigen mit dem du die Bitcoin API zu dieser Fehlermeldung bringst.
    Ich hab versucht den Code zu rekonstruieren, scheitere jedoch.

    Vielen Dank schonmal im voraus.

    Ich hatte die Post-Parameter nicht im body des Requests:

        headers = {'X-API-KEY': api_key, 'X-API-NONCE': nonce, 'X-API-SIGNATURE': h.hexdigest()}
        body = {'amount_currency_to_trade': Menge,'payment_option': 1, 'type': Typ}
        r = requests.post(url, headers=headers, data=body)

     

  10. Hallo liebe Coinler,

    da der Support seit Wochen nicht antwortet und ich im FAQ nicht schlauer werde, hoffe ich auf eure Erfahrung/Wissen zurückgreifen zu können.

    Wird der Kickback nur gutgeschrieben, wenn ein Trade über die API abgeschlossen wird?

    Explizit frage ich für den Gegenfall, ob der Kickback auch dann gilt, wenn das Kauf/Verkaufsangebot - eines erfolgreichen Trades - über die API erstellt wurde.

    Der Absätze zu dem Thema 

    Zitat

    Bei Nutzung der Trading-API [...]

    Wird ein Handel über die Trading-API ausgeführt, [...]

    würde es meiner Meinung Nach mit einbeziehen.

  11. vor 11 Minuten schrieb fox42:

    Richtig. Und dann kann man entsprechend reagieren, wenn etwas ansteht. ZB Order löschen, oder was auch immer.

    letzte Nervfrage zu dem Thema, ich häte den code in die vorherige Nachricht präventiv tippen sollen:

        if 'maintenance' in response.json():
            print(response.json()["maintenance"]["start"] + " bis " + response.json()["maintenance"]["end"] + " - Grund: " + response.json()["maintenance"]["message"])

    Verstehe ich den Aufbau der Maintenance-Details korrekt, dass der Code funktionieren müsste?

  12. vor 6 Stunden schrieb fox42:

    Die genaue Antwort habe ich nicht geloggt..

    
    2021-01-19 10:00:50,616 WARN  [] - Maintenance is scheduled from 2021-01-19T11:00:00+01:00 until 2021-01-19T11:30:00+01:00
    2021-01-19 10:00:50,616 WARN  [] - *** Scheduled maintainance on 2021/01/19 at 11:00 am (CET / UTC+1) *** Due to an update Bitcoin.de will be unavailable from 11:00 am for approx. 30 minutes. ***
    2

     

    Aber das kann man sich aus der API Doku herleiten:

    Globale Werte im Response

    Name Required Type Value Notes
    errors true array [{"message":"abc","code":123, "field" => "field_abs"}] Liste mit Error-Meldungen und dazugehörigen Error-Codes.
    credits true integer -- Anzahl aktuell verbleibender Credits
    maintenance false array array Infos bzgl. Wartungsarbeiten (s. Tabelle "Maintenance-Details"
    nonce false integer -- Sofern der "Error-Code 4 (Invalid nonce)" auftritt, wird das letzte gültige Nonce in diesem Feld ausgegeben

     

    Maintenance-Details

    Name Required Type Value Notes
    message true string -- Infotext
    start true string -- Start der Arbeiten (Format: 2015-04-07T12:23:04+02:00 gemäß RFC 3339)
    end true string -- Voraussichtliches Ende der Arbeiten (Format: 2015-04-07T12:23:04+02:00 gemäß RFC 3339)

     

    verstehe ich das richtig, dass die maintainence Info dann nur in der Response existiert, wenn eine ansteht?

    Weil im Standard ist sie ja nicht drin.

    Dann würde ich jetzt in meine Schleife eine Abfarge einbauen, die das maintenance list-element abfragt und ggf ausgibt.

  13. vor einer Stunde schrieb newuserhere:

    Angeblich ist die Seite derzeit unter Wartungsarbeiten und das voraussichtliche Ende wird immer um zehn Minuten verschoben.

    Diese Arbeiten wurden nicht angekündigt und weder per Email / Telefon ist ein Kontakt möglich. Auch die App funktioniert nicht mehr.

    Hat jemand mehr Informationen hierzu?

    Es war angekündigt.

    Auf der Hauptseite habe ich ca 10-15 Minuten vorher ein Banner gesehen, dass die Wartungsarbeiten um 11:00 beginnen und ~30 minuten dauern.
    Um 11:25 oder so habe ich dann gesehen, dass sie im auf der Wartungsseite als Ende 11:40 angegeben haben.

  14. Kleines Update auch für dich, wenn du dann so weit bist:

     

    Die Post-Parameter müssen im Body übergeben werden.
    Das habe ich jetzt gemacht und es kommt auch alles so wie es soll beim Server an:

    Zitat
    API-Aktion: executeTrade
    Angelegt am: 17. Januar 2021 23:13:45 CET
    API-Key: RED
    Request-URI: https://api.bitcoin.de/v4/btceur/trades/TESTETSTETSTETSTETS
    HTTP-Methode:
    POST
    POST-Parameter:
    
    
    {
       "amount_currency_to_trade":"0.01",
       "payment_option":"1",
       "type":"buy"
    }
       
       

     

    Jetzt bekomme ich 'errors': [{'message': 'Invalid order_id', 'code': 26, 'field': 'order_id'}].
    Also quasi das, was ich provoziert habe mit der Test-Order. Ich denke, dass der Trade dann durchgehen sollte, wenn die Order ID korrekt ist.

     
     
    • Like 1
  15. vor 2 Stunden schrieb Mr.Davidwater:

    Hast du schon versucht bei ID, Menge und den Rest mal manuell einzugeben. Die Umwandlung sieht für mich was ich sehe eigentlich richtig aus, habe es jetzt noch nicht selbst ausgeführt. 

    Ich würde jetzt erst mal versuchen, alles was geht, manuell einzugeben um das erstmal auszuschließen. 

    Gute Idee, das versuche ich morgen mal.
    Wenn ich die Daten in ein Print gebe sieht es gut aus, aber wer weiß.

    Du hast also Post-Methoden noch nicht in Angriff genommen?

  16. vor einer Stunde schrieb Mr.Davidwater:

    Also ich sehe bei der Dokumentation, das hier beim hmac_data die uri verwendet wird: hmac_data = http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+post_parameter_md5_hashed_url_encoded_query_string

    Du verwendest die url !

    Bin jetzt mir nicht sicher ob das der Fehler ist, aber irgendwas mit deiner Signature wieder.

    Das ist glaube ich eine Variablenbezeichnungfrage. Mein Code ist natürlich etwas stümperhaft und ungelenk.

    Meine Varaible url ist final: https://api.bitcoin.de/v4/btceur/trades/[ID]
    Stimmt also mit der URL inTrades - executeTrade überein: https://api.bitcoin.de/v4/:trading_pair/trades/:order_id

    Aber auch mit der uri in der hmac_data, also https://api.bitcoin.de/v4/btceur/trades/ kommt der code 5 Fehler.

     

    Zitat

    Edit: Bin echt überrascht das du 43 Credits hast, ich habe nur 23.

    Je nach Trust-Level auf Bitcoin.de hast du ein anderes Maximum.

  17. Wahrscheinlich bin ich wieder irgendwie bescheuert, und der Fehler ist offentsichtlich.
    Aber ich habe es gegengecheckt und sehe ihn nicht.

    Ich wollte nun, wo meine Get-Prozeduren laufen und ich die Daten soweit verarbeite und abspeichere eine manuelle Post-Prozedur schreiben.
    Sinn ist quasi einfach der ersten Posten der Kaufen-Seite zu kaufen (in diesem Fall die minimal mögliche Menge)

    Code sieht sinngemäß so aus:

    nonce                    = str(int(time.time() * 1000000))
    uri = "https://api.bitcoin.de/v4/btceur/trades/"                                                                            #URL aus Trades - executeTrade
    http_method              = 'POST'
    ID                       = buy.json()["orders"][0]["order_id"]                                                              #ID der günstigsten Oder ermitteln
    Menge                    = str(buy.json()["orders"][0]["min_amount_currency_to_trade"])                                     #Minimalmenge ermitteln
    url                      = uri + ID                                                                                         #Ergänzen um die Ordernummer
    url_encoded_query_string = "amount_currency_to_trade="+Menge+"&payment_option=1&type=buy"                                   #POST - Parameter in alph. Reihenfolge
    post_parameter_md5_hashed_url_encoded_query_string = hashlib.md5(bytes(url_encoded_query_string.encode())).hexdigest()      #md5 encoding - leerer String gibt korrrekt "d41d8cd98f00b204e9800998ecf8427e" aus
    hmac_data = http_method + '#' + url + '#' + api_key + '#' + nonce + '#' + post_parameter_md5_hashed_url_encoded_query_string#Aus Schritt 4
    h = hmac.new(bytes(api_secret, 'utf-8'), hmac_data.encode(encoding='utf-8'), hashlib.sha256)                                #Aus funktionierender Get-Methode
    
    headers = {'X-API-KEY': api_key, 'X-API-NONCE': nonce, 'X-API-SIGNATURE': h.hexdigest()}
    r = requests.post(url, headers=headers)
    
    print(r.json())

     

    Vielleicht müsste ich es meiner Gummiente erklären, aber die ist gerade nicht zugegen.

    Daher hoffe ich, dass einer von euch direkt mit der Hand vor die Stirn schlägt und mir den Fehler zeigt und am besten erklärt.

     

    PS: r.json() = {'errors': [{'message': 'Invalid signature', 'code': 5}], 'credits': 43}

  18. vor 1 Stunde schrieb Mr.Davidwater:

    Hi,

    ich probiere es auch mit Python und bekomme die selbe Error Message.
    Ich schaue mich grade für Lösungen und alternative um, wenn ich es nicht mit der API von Bitcoin.de hin bekomme, würde ich auf die Kraken API wechseln. Jedoch ist mein Englisch für solch ein Fachbereich leicht eingeschränkt.  Vielleicht können wir uns zusammen tun und gemeinsam ein Fehler freien Request bekommen.

    Also mein Request ist jetzt sauber durchgelaufen.

    Interessanterweise klappt es, wenn ich die uri als variable übergebe, nicht aber, wenn ich sie noch einmal als string an der gleichen Stelle eintrage.
    Weiß nciht warum, aber jetzt geht es.

    • Like 1
  19. vor 49 Minuten schrieb ¯\_(ツ)_/¯:

    Hab schon ewig nichts mehr mit der bitcoin.de API gemach, aber mein Account geht sogar noch... Hab mir mal eben die Abschnitte mit der Signature angeschaut und mal deinen python code entsprechend angepasst.

    Die Stelle hast du wohl überlesen " Als Konsequenz kann bei GET- und DELETE-Requests der md5-Hash d41d8cd98f00b204e9800998ecf8427e für Variable post_parameter_md5_hashed_url_encoded_query_stringverwendet werden." und auch den Schritt 4 nicht mit übernommen ?! 

    Viel spass damit...

     

    Vielen vielen Dank.

    Ich hatte offentsichtlich einen anderen Fehler als Davidwater, aber du hast mir hiermit sehr geholfen.
    Zusätzlich hatte ich aber auch einen Nonce, der anscheinend mal mit einem zu großen Faktor multipliziert war, das heißt es gab noch mehere Probleme bei mir :D

    Ich habe gerade keine Orders, daher ist meine response leer. Ich will also das orderbook aufrufen, und da klappt es wieder nicht.

    Bin vielleicht mit den Parametern nicht fit genug, aber das bekommeich hoffentlich auch noch hin

  20. Am 5.1.2021 um 13:33 schrieb Mr.Davidwater:

    Hi, bin gerade auch an dem selben Problem. Hast du schon irgendwelche Fortschritte gemacht. Wenn ich es auf der selben Art wie du mache, bekomme ich den selben Fehler. Jedoch bei meiner Variante bekomme ich nur Invalide Signature, mit Fehler Meldung. 

    Hallo David,

    ich gehe davon aus, du nutzt auch Python als Sprache?
    Ich habe keine hilfreiche Antwort vom bitcoin.de-Team bekommen.
    Wenn ich zu Hause bin, schaue ich mal, wo ich bei dem Code aufgehört habe daran zu arbeiten, da auch dieser Thread hier eher... weniger hilfreich war.

    Letztes mal war es die response "message: Invalid signature", "code: 5" und meine credits.

  21. vor 2 Stunden schrieb MixMax:

    Signaturen sind in der Regel nicht deterministisch, daher kann man sie nicht vergleichen.

    Auch wenn die Signatur für eine erhöhte Sicherheit (alleine schon wegen des immer anderen nonce) immer anders sein wird, habe ich zumindest ausprobieren können, ob der Text "Dies ist ein Text" mit dem Secret Key 12345 das selbe Ergebnis ausgibt.

    Dies war der Fall.

    vor 13 Stunden schrieb casiopaya:

    Eventuell kannst du dir doch mal den Code von github runterladen, den ans Laufen bringen und dann vergleichen, was dein code und der github code an Signatur produziert.

    Leider sieht es so aus, als sei im Fall von dem Github-Modul die Signatur noch nicht Teil der API-Interaktion. Daher ist das nicht mögich.

×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.