Skip to content

Latest commit

 

History

History
291 lines (247 loc) · 8.09 KB

developers.md

File metadata and controls

291 lines (247 loc) · 8.09 KB

Zenbot Exchange API

Dieses Dokument soll Entwicklern helfen, neue Erweiterungen für Zenbot zu implementieren.

Es wurde aus der Überprüfung der Zenbot-Dateien und der GDAX-Erweiterung rückentwickelt und ist kein endgültiger Leitfaden für die Entwicklung einer Erweiterung.

Jeder Beitrag, der dieses Dokument verbessert, ist sicherlich willkommen.

Das Dokument ist ein Versuch, die Schnittstellenfunktionen zu beschreiben, die für die Kommunikation mit einem Austausch verwendet werden, sowie einige Hilfsfunktionen. Jede Funktion verfügt über eine Reihe von Aufrufparametern und gibt Werte und Status zurück.

Die Eingabeparameter werden in das Objekt "opts" gepackt, und die Ergebnisse aus dem Aufrufen der Funktion werden in einem Objekt zurückgegeben.

Fehlerbehandlung

Fehler werden über eine Rückruffunktion dieser Form an das aufrufende Programm zurückgegeben:

cb (err)

Der erwartete Inhalt von "err" ist wie folgt:

  { code: 'HTTP_STATUS', body: body }

** Nicht behebbare Fehler ** sollten von der eigentlichen Erweiterungsfunktion behandelt werden. Ein typischer Fehler ist "Seite nicht gefunden", der höchstwahrscheinlich durch eine fehlerhafte URL verursacht wird. Solche Fehler sollten eine beschreibende Nachricht zurückgeben und einen Programmexit erzwingen.

** Behebbare Fehler **, die Trades betreffen, sollten von zenbot behandelt werden, während andere in der Erweiterungsschicht behandelt werden könnten. Dies muss geklärt werden.

Einige benannte Fehler werden bereits vom Hauptprogramm behandelt (siehe getTrades unten). Diese sind:

  'ETIMEDOUT', // möglicherweise wiederherstellbar
  'ENOTFOUND', // nicht wiederherstellbar (404?)
  'ECONNRESET' // möglicherweise wiederherstellbar

Zenbot verfügt möglicherweise über einen GDAX-spezifischen Code. Dies betrifft insbesondere Rückgabewerte von Austauschfunktionen. Rückgabewerte sollten im Allgemeinen austauschunabhängig und standardisiert behandelt werden, um das Schreiben von Erweiterungen zu vereinfachen.

** Einige Variablen im "Exchange" -Objekt sind erwähnenswert **

  name: 'some_exchange_name'
  historyScan: 'vorwärts', 'rückwärts' or false
  makerFee: exchange_maker_fee (numeric) // Wird von einer Funktion festgelegt, wenn der Austausch dies unterstützt. 
  takerFee: exchange_taker_fee (numeric) // Sonst mit einer Konstante gesetzt. 
  backfillRateLimit: some_value_fitting_exchange_policy or 0

Funktionen

** Verbindung zum Austausch für öffentliche Anfragen herstellen **

funcion publicClient ()

Angerufen von:

  • extension/*/exchange.js

Gibt ein "Client" -Objekt zur Verwendung in Exchange Public Access-Funktionen zurück.

** Private Anfragen verbinden und authentifizieren **

function authedClient ()

Angerufen von:

  • extension/*/exchange.js

Die Funktion ruft Parameter aus conf.js im c-Objekt ab Insbesondere sind dies:

  c.<exchange>.key
  c.<exchange>.secret

Für bestimmten Austausch auch:

  c.bitstamp.client_id
  c.gdax.passphrase

Die Funktion m gibt ein "Client"-Objekt zur Verwendung in Exchange-authentifizierten Zugriffsfunktionen zurück.

** Hilfsfunktion zur Rückgabe konformer Fehlermeldungen **

function statusErr (resp, body)

Angerufen von:

  • extension/*/exchange.js

** Öffentlichen Geschichte und Handelsdaten abrufen **

getTrades: function (opts, cb)

Angerufen von:

Eingang:

  opts.product_id
  opts.from
  opts.to

Rückkehr:

  trades.length
  (array of?) {
    trade_id: some_id
    time: 'transaction_time',
    size: trade_size,
    price: trade_prize,
    side : 'buy' or 'sell'
  }

Erwartete Fehlercodes bei Fehler:

  err.code

  'ETIMEDOUT', // möglicherweise wiederherstellbar
  'ENOTFOUND', // nicht wiederherstellbar
  'ECONNRESET' // möglicherweise wiederherstellbar

Rückruf:

cb(null, trades)

Getting wallet balances

getBalance: function (opts, cb)

Angerufen von:

Eingang:

  opts.currency
  opts.asset

Rückkehr:

  balance.asset
  balance.asset_hold
  balance.currency
  balance.currency_hold

Rückruf:

cb(null, balance)

Kommentar: Asset vs. Asset_hold und Currency vs. Currency_hold sind für mich etwas mysteriös. Für die meisten Börsen würde ich nur etwas Ähnliches wie "available_asset" und "available_currency" zurückgeben. Für Börsen, die einige andere Werte zurückgeben, würde ich die Berechnung auf der Erweiterungsschicht durchführen und überlassen Sie es nicht engine.js, da available_asset und available_currency nur interessant sind Werte aus Kauf/Verkaufs-Sicht, IMHO. Wenn jemand es besser weiß, bitte klären.

** Öffentliche Tickerdaten abrufen **

getQuote: function (opts, cb)

Angerufen von:

Eingang:

  opts.product_id

Rückkehr:

  {bid: value_of_bid, ask: value_of_ask}

Rückruf:

cb(null, {bid: body.bid, ask: body.ask})

** Stornierung einer Bestellung **

cancelOrder: function (opts, cb)

Angerufen von:

Eingang:

  opts.order_id

Rückruf:

cb()

** Kauffunktion **

buy: function (opts, cb)

Angerufen von:

Eingang:

  opts.price
  opts.size

Returns:


Rückruf:

cb(null, body)

** Verkaufsfunktion **

sell: function (opts, cb)

Angerufen von:

Eingang:

  opts.price
  opts.size

Kehrt zurück:


Rückruf:

cb(null, body)

Getting data from a placed order

getOrder: function (opts, cb)

Angerufen von:

Eingang:

  opts.order_id
  opts.product_id

Kehrt zurück:

  order.status

Erwartete Werte in https://github.com/carlos8f/zenbot/blob/master/lib/engine.js:

  • 'done', 'rejected' If 'rejected' order.reject_reason = some_reason ('post only') Ist 'post only' für den GDAX spezifisch? Kommentar: Muss geklärt werden

Rückruf:

cb(null, body)

** Details von einem ausgeführten Trade erhalten **

getCursor: function (trade)

Angerufen von:

Eingang:

  Handel - Dies ist entweder ein Handel oder ein Zeitstempel

Rückkehr:

  Handels-ID oder Zeitstempel. Es hängt wirklich von der Exchange-API ab. Einige, wie Gemini, verwenden nur Zeitstempel und müssen nur einen Zeitstempel zurückgeben. Andere, wie der GDAX, arbeiten mit Handels-IDs und es wird erwartet, dass sie "undefiniert" zurückgeben, wenn ein anfänglicher Zeitstempel zum Starten des Nachfüllens überschritten wird.

  Da für das Auffüllen ein Zeitstempel erforderlich ist, um die Anzahl der Tage für das Auffüllen auszuwählen, kann diese Option möglicherweise nicht verwendet werden, wenn die Börse keine Zeitstempel für historische Daten verwendet. In diesem Fall wird 'undefined' zurückgegeben, wenn ein Zeitstempelwert übergeben wird.

Rückruf:

Erweiterungen

Zenbot bietet verschiedene Erweiterungen an, wohl ist es das, was Zenbot so großartig macht.

Benachrichtigungen erweitern

Wenn Sie einen neuen Notifier hinzufügen möchten, gehen Sie folgendermaßen vor:

  • Erstellen Sie in /extensions/notifiers/ einen your-service-name.js. Stellen Sie sicher, dass Sie die selben Funktionsrückgaben wie bei anderen Notifiers verwenden.
  • Fügen Sie /conf-sample.js einen Konfigurations-Bootstrap hinzu.
  • senden Sie uns eine PR mit Ihrem neuen Service :)