Test your algorithmic trading strategies with our SaaS Data Platform.

Now we are running (in a beta-test mode for limited markets and pairs) a SaaS platform for algo-traders, where both individual and institutional traders can effortlessly source market data and backtest trading strategies against multiple cryptocurrency trading platforms.

Our service serves a single purpose: it significantly reduces the time required to transition from the verification of trading hypotheses to live trading.

We operate a cluster of real-time market crawlers, recording every fluctuation in order books as well as trading histories. With our intuitive GraphQL API, order books can be easily reconstructed for specific moment in past time, allowing then for events to be replayed and re-analyzed. This makes it an invaluable tool for accurate backtesting & debugging trading bot algorithms as well as using it as a data-source for machine learning and AI models.

Our services can save you months of effort required to develop and maintain crawlers along with the stable infrastructure needed for crawling across various markets.

There is a few simple examples how to use our GraphQL API:

Subscribe for Realtime Combined Order Book from multiple markets limiting scope by gross amount:

Try in Playground

subscription{
  orderBook(
    orderType: BIDS,
    primCur: "btc",
    secCur: "usdt",
    markets: ["bitstamp", "binance"],
    thresholdAmount: 5
  ) {
      grossAmount,
      latestEventId,
      fullfilled,
      byOrders {
        takingAmount
        grossAmount,
        market,
        amount,
        price,
        marketTimestamp
      }
    }
 }


You can also set how often backend will send your updates by setting a rateLimit.

Get the latest raw markets events:

Try in Playground

query{
  marketEvents(primCur: "eth", secCur: "btc", maxElementsPerPage: 100){
    events{
      __typename
	  ... on OrderEvent 
		{
    	  eventId,
          channel,
          diffType,
          amountChanged,
          primCur,
          secCur,
          market,
          amount,
          amountChanged,
          price,
          marketTimestamp(format:POSIX_MILLISECOND),
          orderType
        }
  	  ... on TradeEvent 
		{
     	  primCur,
     	  secCur,
     	  amount(
			filter: {rangeFilter: {rangeOperator: INCLUDE, rangeFrom: 0.1, rangeTo: 1.0}}
		  ),
     	  price,
     	  eventId,
          market,
          marketTimestamp,
          marketId,
          tradeType
  	    }
	}
  }
}


You can define what kind of events you want to fetch and even set a filters on per field basis. In a given example we want to include orders and trades, but trades only with amount between 0.1 and 1.0 ETH).

Reconstruct a Cross-Market Combined Order Book (ASKS Direction) for specific point of time:

Try in Playground

query {
  orderBook(
    orderType: ASKS,
    primCur: "btc",
    secCur: "usdt",
    markets: ["bitstamp", "binance"],
    cursor: "2024-12-20T00:00:00Z",
  ) {
    grossAmount,
    latestEventId,
    latestEventSystemTimestamp,
    fullfilled,
    byOrders {
      eventId,
      takingAmount,
      grossAmount,
      market,
      amount,
      price,
      marketTimestamp
    }
  }
}


You can combine orderbooks from different markets with each other and even limiting the scope till how much amount or price orderbook will be traversed. Once you got the entry point - EventId from where you want to move Forward or Backward, you can move along by passing EventId as cursor and cursorShiftDirection for define walking direction.

Try to write other queries in our GraphQL API playground!

Our GraphQL schemas self documented and have a lot of features to cover many common use-cases scenarious.

We can also handle our customers special needs developing a tailored sulutions and API endpoints.

Read more about it in our Engineering section.