GithubHelp home page GithubHelp logo

io.contek.invoker's Introduction

io.contek.invoker

A Java library to connect cryptocurrency exchanges.

Maven

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>binancedelivery-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>binancefutures-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>bitmex-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>bitstamp-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>bybit-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>coinbasepro-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>deribit-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>ftx-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>hbdmlinear-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>hbdminverse-api</artifactId>
    <version>2.13.0</version>
</dependency>

<dependency>
    <groupId>io.contek.invoker</groupId>
    <artifactId>kraken-api</artifactId>
    <version>2.13.0</version>
</dependency>

Examples

Binance Futures Main Net Get Order Book

MarketRestApi api = ApiFactory.getMainNet().rest().market();
GetDepth.Response response = api.getDepth().setSymbol("BTCUSDT").setLimit(100).submit();
double bestBid = response.bids.get(0).get(0);
double bestAsk = response.asks.get(0).get(0);
System.out.println("Best bid: " + bestBid + ", best ask: " + bestAsk);

Binance Futures Test Net Place Order

ApiKey key = ApiKey.newBuilder().setId("foo").setSecret("bar").build();
UserRestApi api = ApiFactory.getTestNet().rest().user(key);
PostOrder.Response response =
    api.postOrder()
        .setSymbol("BTCUSDT")
        .setSide(OrderSides.BUY)
        .setType(OrderTypes.LIMIT)
        .setPrice(9981.05d)
        .setQuantity(0.03d)
        .submit();
System.out.println("My order ID is: " + response.orderId);

Binance Futures Main Net Subscribe Trades

ISubscribingConsumer<Message> consumer =
    new ISubscribingConsumer<Message>() {
      @Override
      public void onNext(AggTradeChannel.Message message) {
        double price = message.data.p;
        double quantity = message.data.q;
        System.out.println("New trade price: " + price + ", quantity: " + quantity);
      }

      @Override
      public void onStateChange(SubscriptionState state) {
        if (state == SubscriptionState.SUBSCRIBED) {
          System.out.println("Start receiving trade data");
        }
      }

      @Override
      public ConsumerState getState() {
        return ConsumerState.ACTIVE;
      }
    };
MarketWebSocketApi api = ApiFactory.getMainNet().ws().market();
api.getAggTradeChannel("BTCUSDT").addConsumer(consumer);

Goals

This project aims to provide a neat solution to connect cryptocurrency exchanges via their REST and WebSocket APIs.

It handles tedious things that are common in many exchanges, for example: rate limit, authentication, reconnection etc.

Non-goals

This project does not make money for you. It does not contain any logic that predicts the market.

This project does not explain the usages of API endpoints. It is absolutely necessary to read the official API document before using an endpoint.

Audiences

Data scientists who want to (freely and legally) download historical market data from exchanges.

Traders who want to interact with the market programmatically.

Contribution Guidelines

Read before you write

Please make sure you are familiar with the existing code base before coding. This helps keeping the code style and project structure consistent.

Format your code

We highly recommend IntelliJ as your Java IDE for this project. In addition, we also recommend using plugin "google-java-format" and plugin "Save Actions" to format your code on the fly.

Do not ignore warnings

Warnings significantly reduce the help you get from your IDE. Also, the more warnings you have in your existing code base, the more likely you will introduce new warnings in the future. Do your best to avoid warnings.

No comment

Your code should be clear enough to understand without any comment. You can (usually) achieve this by writing more descriptive variable names and method names. We also recommend you keep methods short and avoid nested loops whenever possible.

Only send required data

Do not include data/argument that is unnecessary for your purpose. It usually happens when you copy and paste code and forget to remove some fields. It may lead to rejection or unexpected outcomes.

Minimum assumptions

Endpoint implementations shall always follow their official API documents. We shall make the best effort to avoid introducing random constant values that are not described in the API documents.

Example 1:
Q: I can't find a rate limit restriction for XXX endpoint, but I think there must be a limit. Shall I cap it to 10 times per minute?
A: No, because you are likely wrong.

Example 2:
Q: I found XXX endpoint accepts XXX argument, which is not specified in the API document. Shall I add it?
A: No, because it may cause unexpected outcomes.

Example 3:
Q: The example in the official document suggests the field name is XXX but in fact it is YYY. What shall I do?
A: We probably don't want to implement this endpoint yet. Wait for them to fix it first.

FAQs

Is this the official API client for XXX exchange?

No.

Why is there no test for XXX?

We do not have the resources to write those tests (yet).

Is XXX stable?

We do not know and we suggest you find it out in their official API document.

Why is XXX not up to date?

The current version is (probably) good enough for us already. However, feel free to update it and submit pull requests.

Why is XXX not implemented?

We are probably not using this endpoint. However, feel free to implement it and submit pull requests.

io.contek.invoker's People

Contributors

pimpcapital avatar leofisg avatar norbert-gaulia avatar mayankpunetha007 avatar cypher01 avatar darrylsite avatar jottaprivate avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.