Zum Inhalt springen

Mr.Davidwater

Mitglied
  • Gesamte Inhalte

    14
  • Benutzer seit

  • Letzter Besuch

Beiträge von Mr.Davidwater

  1. Ich habe derzeit viel mit der Schule zu tun, da ich dieses Jahr meinen Abschluss mache. Werde entweder nur ganz wenig machen bzw. ich analysiere derzeit noch die Kurse, um später einen funktionierenden Algorithmus zu schreiben. Wahrscheinlich werde ich mich jedoch leider erst ab Juni richtig rein hängen. Aber dann werde ich mich nicht nur an der API von Bitcoin.de versuchen, sondern auch an anderen APIs von Wechselstuben. 
    Konnte jetzt nur den kleinen Teil von Bitcoin.de schreiben, weil ich Winter Ferien hatte.

    Edit: Versuche hier aber zu Unterstützen, dann kann ich hoffentlich später bei mir selber ein paar Fehler vermeiden.   

  2. vor 2 Stunden schrieb Tyler_Durden:

    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}

    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. 

  3. 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.

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

  4. vor 12 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...

     

    Wait, what. Danke

    Es funktioniert wirklich!

    Habe aber bei mir noch nicht den Fehler gefunden, aber das war schon mal eine große Hilfe.😅👌

  5. vor 4 Stunden schrieb Tyler_Durden:

    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.

    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.

  6. Hi,

    derzeit Programmiere ich in Python ein Skript für die API von Bitcoin.de. Leider bekommen ich immer den selben Fehler und kann ihn leider nicht finden.
    Soweit ich sehen kann müsste mein Hash Code richtig sein den ich generiere, es liegt wahrscheinlich an der Versendung der Anfrage. 
    Bekomme genau den selben Hash Code mit dem php Interpreter raus.
     

    Bitte einfach erklären, kann mit Fachwörter nicht viel Anfangen. Würde mich sehr über ein Code Beispiel freuen 😄
     

    Skript für den Hash Code:

    import hashlib
    import hmac
    
    
    Post_Parameter={''}
    GET_Parameter={''}
    api_key= 'mein Api-Key'
    nonce= "1234569"
    api_secret= 'mein Api-secret'
    http_method= 'GET'
    uri= 'https://api.bitcoin.de/v4/orders'
    
    get_parameter_url_encoded_query_string = ''
    uri = uri+'?'+get_parameter_url_encoded_query_string
    post_parameter_md5_hashed_url_encoded_query_string = hashlib.md5(''.encode('UTF-8')).hexdigest()
    hmac_data= http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+post_parameter_md5_hashed_url_encoded_query_string
    print(hmac_data)
    
    hmac1= hmac.new(b'mein api-secret', b'', hashlib.sha256)
    hmac1.update(bytes(hmac_data, 'utf-8'))
    print(hmac1.hexdigest())

    Mein Skript für die Abfrage:

    import requests
    
    url = "https://api.bitcoin.de/v4/orders"
    
    payload={}
    headers = {
      'X-API-KEY': 'Api-Key',
      'X-API-NONCE': "1234569",
      'X-API-SIGNATURE': 'signatur',
    
    }
    
    response = requests.request("GET", url, headers=headers, data=payload)
    
    print(response.json())

    Fehler Meldung:

    {'errors': [{'message': 'Invalid signature', 'code': 5}], 'credits': 23}

     

    Dokumentation Bitcoin.de: 

    Signatur-GET-Beispiel

    Es soll die API-Funktion showOrderbook mit den folgenden Ausgangswerten durchgeführt werden:

    GET-Parameter:
    {
        'type'    : 'buy',
        'amount'  : 5.3,
        'price'   : 255.50
    }
    
    POST-Parameter:
    {
    }
    
    api_key:     'MY_API_KEY'    // Entspricht dem eigenen API-Key
    nonce:       1234567         // Das für den aktuellen Request verwendete Nonce
    api_secret:  'MY_API_SECRET' // Entspricht dem eigenen API-Secret
    http_method: 'GET'
    uri:         'https://api.bitcoin.de/v4/orders'
    

    Schritt 1: einen validen URL-encoded Query-String aus den GET-Parametern generieren

    get_parameter_url_encoded_query_string = 'type=buy&amount=5.3&price=255.5' // Die Reihenfolge der GET-Parameter ist irrelevant
    

    Schritt 2: Erweitern der URI um GET-Parameter

    uri = uri+'?'+get_parameter_url_encoded_query_string
    => 'https://api.bitcoin.de/v4/orders?type=buy&amount=5.3&price=255.5'
    

    Schritt 3: md5-Hash der POST-Parameter für die HMAC-Daten erstellen¹

    post_parameter_md5_hashed_url_encoded_query_string = md5('');
    => 'd41d8cd98f00b204e9800998ecf8427e'
    

    Schritt 4: Konkatinieren der HMAC-Eingabedaten

    hmac_data = http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+post_parameter_md5_hashed_url_encoded_query_string
    => 'GET#https://api.bitcoin.de/v4/orders?type=buy&amount=5.3&price=255.5#MY_API_KEY#1234567#d41d8cd98f00b204e9800998ecf8427e'
    

    Schritt 5: Bilden des eigentlichen sha256-HMACs

    hmac = HMAC('sha256', hmac_data, api_secret)
    => ''

     

  7. vor 1 Minute schrieb PeWi:

    Ich halte nicht so viel davon, sich zu verzetteln. Was im Coinforum seinen Anfang nimmt, darf auch gerne dort seinen weiteren Fortgang nehmen.

    Ich würde mich freuen, wenn aus diesem Thread irgendwann mal ein kleiner Workshop - ähnlich dem von @Jokins BalanceBot - entspränge.

    Außerdem - Achtung: subjekte Meinung - gefällt mir Discord nicht, weder vom Handling, noch vom Aussehen. 😜

    Wollte eigentlich auch nicht euch damit Ansprechen, die kein Interesse an einem gemeinsamen Projekt haben, sondern Personen die zusammen ein Projekt machen wollen in Python. Glaube nämlich es ist sehr zum Vorteil von mehreren Personen, wenn viele Ihr wissen in ein Projekt stecken und dadurch ein extrem guter Bot entsteht. 

    Ich möchte nicht die einzelnen Themen hier auslagern oder nur Personen auf meinen Discord Server bekommen, sondern Personen zusammen bekommen die die selben Interessen haben und ein gemeinsames Projekt haben zum Trading mit Kryptowährungen. 

    Außerdem halte ich nicht zum Vorteil wenn man sich hier über Detail vom Bot unterhält und jeder Mensch im Internet  es einfach einsehen kann.

    Ihr könnt euch weiterhin hier im Forum über eure Bots austauschen, aber die die noch keinen Bot haben und gemeinsam mit anderen ein Bot bauen möchten, können auf Discord kommen oder mir etwas besseres Vorschlagen. Ich Persönlich finde jedoch Discord nützlich um am PC sich darüber schnell zu unterhalten oder irgendwas schnell zu versenden. 

    Ps.: Ich hoffe es finden sich ein paar die Interesse dran haben. 😀 

     

  8. vor 4 Minuten schrieb Männergruppe Monk:

    Wenn Du wirklich Fragen zum Programmieren hast oder kannst Probleme nicht lösen, kann ich Dir nur Stackoverflow empfehlen. Ich bin da auch aktiv.

    Besonders die Moderation ist wirklich gut auf die Bedürfnisse abgestimmt und arbeitet sehr fokussiert. Es ist nicht besser oder schlechter als hier, nur eben ein anderes Konzept, was für den Zweck wesentlich effektiver ist.

    Okay, werde wahrscheinlich mal dort vorbei schauen. Ich wäre aber eigentlich an einem Projekt interessiert, an dem mehrere zusammen dran Arbeiten. Also so zu sagen ein Community Projekt 😃

    Bin mir nicht sicher ob @fjvbit das so eigentlich meinte. Aber wenn das so gemeint war, wäre ich dabei und hätte Bock drauf. Auf Discord wollte ich umsteigen, weil ich zum einen aktiver dort bin, zweitens kann man dort eine Gruppe bilden die sich für das selbe interessiert und am selben Projekt arbeitet ohne das man von anderen gestört wird. Also besser gesagt es ist dann wie ein Whatsapp Gruppe.

  9. Am 1.1.2021 um 18:46 schrieb fjvbit:

    Ich denke, hier sollten auch andere Java Programmierer sein, muss man probieren....

    Klar kannst du mit mitmachen. Ich habe auch schon in Java programmiert würde mich da aber nicht als Spezialist bezeichnen wollen. Neue Projekte möchte ich Java vermeiden, weil ich das Problem habe, dass ich durcheinander komme, wenn ich zu viele verschiedene objektorientierte Sprachen gleichzeitig nutze. Ich komme dann immer durcheinander was wo geht. Das Problem haben andere vielleicht weniger aber mir reichen schon meine 4 im Moment: dart, python, vbscript, javascript.

    Mehr verträgt mein Gehirn nicht gleichzeitig. :rolleyes:

    Ich habe aber noch aktuelle Projekte in Java, die ich pflegen muss...

    C/C++ geht evtl. noch parallel, weil ich lange nichts anderes genutzt habe...
    Aber ich bin da auch schon etwas länger raus...

    Edit:
    normalen Java Quellcode zu verstehen, ist natürlich gar kein Problem...
     

    Weil ich das eine richtig gute Idee finde und mich eigentlich schon immer nach einer Programmierer Gruppe gesehnt habe die auch die selben Interessen verfolgen, würde ich gerne jeden der Bock hat auf einen meiner Discord Server einladen. Habe Ihn eigentlich wegen einem anderen Projekt erstellt, würde Ihn aber dann um funktionieren. https://discord.gg/8yjqdPS7vj 

  10. Am 1.1.2021 um 18:09 schrieb fjvbit:

    Ich habe eine ziemlich genaue Vorstellung, was ich machen möchte. Im Moment geht es mir im ersten Schritt eine einheitlich APIs (Klasse) zu diversen Börsen. Binance, Bitfinex, Kraken, evtl. bitcoin.de (habe ich in PHP fertig) in Python 3.x.

    Ich würde das gerne alle Börsen in eine einheitliche Klassenschnittstelle packen. Vielleicht gibt es das ja schon, das habe ich noch nicht geprüft / herausgefunden.

    den Zustand von allem möchte in einer sql Datenbank halten (mariadb (= mysql)).

    Darauf lass ich dann alles laufen:
    Das Trading, die GUI (Web und/oder App).

    Der nächste Schritt wäre dann Schnittstelle zu Bitcoin / Altcoin Wallets um zwischen meinen Wallets und den Börsen Transaktionen automatisiert zu machen. Mit dem Thema habe ich mich noch gar nicht beschäftigt.

    Ich hoffe das Projekt wird nicht so ein Rohrkrepierer wie mein Arbitrage Bot, den ich vor 3 oder 4 Jahre angefangen, aber nie beendet habe...

    Aber hier im Thread sollten alle Fragen zur Programmierung behandelt werden können, egal welche Sprache. Vor allem speziell zu Crypto. Ich denke, man kann sich ganz gut helfen...

    Wäre bei einem Python Trading Bot dabei. Habe aber nur mäßige Erfahrung. Wenn du willst können wir auf Discord umsteigen, um alles genauer zu Besprechen und klare Ziele im Voice zu besprechen. Bin derzeit auch daran einen Trading Bot zu schreiben. 😄

  11. Am 16.6.2020 um 20:27 schrieb Tyler_Durden:

    Hallo liebe Coinler,

    ich habe mich die letzten Tage mit der API beschäftigt.
    Um mal ein Projekt zu haben, bei dem ich ein wenig meine (begrenzten) Programmierkenntnisse zu nutzen fand ich das sehr spannend. - Erstmal geht es mir also nur um ein Get des Orderbooks und rumspielen mit dem Datensatz.

    Mit dem Basic-Satz ist schon mal alles gut soweit. Ich bekomme den Ask und Bid Satz als dict of lists und kann die Daten darin verarbeiten.

    Mit dem v4 stoße ich aber auf einen 400-Error. Mir werden aber credits beim ausführen abgezogen und die Trading-API Notaus-Link Mail kommt auch.
    Also bin ich nicht voll auf dem Holzweg, oder? :(

    Das hier soll keine Disskussion darüb sein, ob Python das richtige Tool ist o.ä. (es sei denn, dass es Systemseitig einfach damit nicht geht) da es wie gesagt ein Projekt ist um mit der Programmiersprache zu arbeiten, also der Weg das Ziel ist.

    Anbei einmal mein Code zum Zweck der Hilfestellung :)

    
    import hashlib
    import hmac
    import requests
    import time
    import json
    
    
    api_key     =   "MEIN API KEY"            # Entspricht dem eigenen API-Key
    nonce       =   str(int(time.time()))     # Das für den aktuellen Request verwendete Nonce
    api_secret  =   "MEIN API SECRET"         # Entspricht dem eigenen API-Secret
    http_method =   'GET'
    uri         =   'https://api.bitcoin.de/v4/orders'
    
    get_parameter_url_encoded_query_string = "type=buy"
    
    uri = uri+'?'+ get_parameter_url_encoded_query_string
    
    hmac_data = http_method+'#'+uri+'#'+api_key+'#'+nonce+'#'+ get_parameter_url_encoded_query_string
    
    h = hmac.new(bytes(api_secret, 'utf-8'), b'', hashlib.sha256)
    h.update(bytes(hmac_data, 'utf-8'))
    
    get_parameter = {'type': 'buy'}
    
    head ={'X-API-KEY': api_key, 'X-API-NONCE': nonce, 'X-API-SIGNATURE': h.hexdigest()}
    
    r = requests.get('https://api.bitcoin.de/v4/btceur/orderbook', params=get_parameter, headers=head)

    Ich bin kein Programmierer, oder überhaupt IT-ler, daher musste ich bereits viel über API und HTTP-Requests lernen, das bedeutet aber auch, dass mein Fehler vielleicht total offensichtlich und dämlich ist, weil ich z.B. immer noch nicht 100% verstehe was der Header bei dem API-Call ist und lediglich versuche es anzuwenden.

    Es ist mir z.B. auch ein Rätsel, warum ich die ganzen Infos zu dem Link mit in den hmac-code einfließen lasse, verstehe es aber momentan als zusätzlcihe Sicherheitseinrichtung.

    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. 

×
×
  • 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.