Trading Rules

CoinJar Exchange operates a 24/7 digital currency market powered by a proprietary, ultra-low latency matching engine called CoreMatch. This page outlines the mechanics of CoreMatch and the operational specifications of CoinJar Exchange.

CoinJar reserves the right to update this page at any time without notice so it’s your responsibility to be aware of the latest Trading Rules. These Trading Rules complement CoinJar’s Terms of Service which you must accept if you use or continue to use any CoinJar services, including via APIs.

Trading Sessions

CoinJar Exchange runs 3 discrete trading sessions every UTC day. During each trading session, the market sequentially enters into each of continuous, auction, auction_nocancel, and closing states.

Start Time (inc.) End Time (exc.) Session State Duration
00:00:00 07:50:00 First Session Continuous 7 hours 50 minutes
07:50:00 07:58:00 First Session Auction 8 minutes
07:58:00 07:59:55 First Session Auction, No Cancel 1 minute 55 seconds
07:59:55 08:00:00 First Session Closing Padding 5 seconds
08:00:00 15:50:00 Second Session Continuous 7 hours 50 minutes
15:50:00 15:58:00 Second Session Auction 8 minutes
15:58:00 15:59:55 Second Session Auction, No Cancel 1 minute 55 seconds
15:59:55 16:00:00 Second Session Closing Padding 5 seconds
16:00:00 23:50:00 Third Session Continuous 7 hours 50 minutes
16:50:00 23:58:00 Third Session Auction 8 minutes
16:58:00 23:59:55 Third Session Auction, No Cancel 1 minute 55 seconds
23:59:55 00:00:00 +1 Third Session Closing Padding 5 seconds

All times referenced are in UTC.

Definitions

  • Continuous: Orders are matched on a first-come, first-served basis, as received by the matching engine.
  • Auction: Orders are accepted but not matched. Orders may be cancelled.
  • Auction No Cancel: Orders are accepted only if they are less aggressive than the current best bid/ask. Orders are not matched and cannot be cancelled.
  • Closing: Orders are not accepted or matched.
  • Trading Halt: Orders are not accepted or matched.

Auctions

All orders on the order book participate in auctions, along with additional orders received during the auction. The best bid must be greater than or equal to the best ask to result in any match. All matched orders are filled at a single price, as determined by CoreMatch to be the price that maximises the volume matched.

If there’s more than one price that fulfills the criteria, the final auction price is taken to be the median of all possible prices. If not all orders can be filled at the auction price, orders are sorted by price and then time received to determine which orders receive the fill. Auction prices may not be in whole multiples of a tick.

Market orders are not possible during auctions and they will be rejected immediately.

Due to the non-continuous nature of auctions, it is important to be aware that the auction price has the potential to deviate significantly from the market prices immediately before or after the auction. While indicative prices are announced throughout the auction period, they are only indicative of the state of the auction order book at any given time and they may change quickly and significantly when large orders are placed or cancelled.

CoinJar Exchange guarantees that all orders that receive a fill during the auction are filled at the same fill price regardless of limit order prices, and that this fill price is not worse than the limit order price of each order.

Order Book

During continuous trading, orders are crossed as they are received by the trading engine, therefore the market spread is never zero or negative. Orders are filled at the price set by the maker, resulting in potential price improvement for the taker.

The full order book is visible at all times, including during auctions. Orders at the same price levels are aggregated with only the total size displayed.

Prices and Sizes

All prices and sizes on CoinJar Exchange have finite precisions, and CoinJar Exchange has a systematic way of determining the tick sizes and trade sizes.

Tick Size

All order prices can only have 4 significant figures, and the unit of the 4th significant figure is the tick size (or minimum price increment). For example, if a product is traded at between 1000 and 9999, the tick size is 1.

Trade Size

Minimum trade size (or size increment) is determined by the tick size such that trade size multiplied by tick size has 2 decimal places (AUD-denominated pairs) or 6 decimal places (BTC-denominated pairs). For example, if BTC/AUD is between 1000 and 9999, the tick size is $1 and minimum trade size is 0.01 BTC.

Price Limits

To maintain an orderly market, prices of new orders cannot deviate too significantly from the market price. Currently, CoinJar Exchange requires the price of new orders to be within 80% and 125% of the last tick. For example, if the last price is $500, the minimum order price is $400 and the maximum order price is $625, regardless of buying or selling.

Exchange Features

Order Types

The only native order type supported by CoreMatch is limit (LMT). CoinJar Exchange also provides simulated market (MKT) orders by generating a series of IOC orders, but these generated orders are not blocking or atomic.

Limit (LMT) orders can have the following time-in-force options:

  • Good Till Cancelled (GTC): Default option. Orders are active until cancellation.
  • Immediate Or Cancel (IOC): Order is filled immediately and the remaining portion is cancelled.
  • Maker Or Cancel (MOC): Order is cancelled immediately if any part of the order would fill immediately.

In the future, CoinJar Exchange may introduce additional order types, such as Stop-Limit (STL) or algo order types.

Self-Trade Prevention (STP)

CoinJar Exchange does not permit self-trading. If a trader trades against his/her own order, both orders will be cancelled out. If one order is larger than the other, the larger order will have the size difference remaining.

For example, a trader places a 2 BTC sell order and then a 1.5 BTC buy order at the same price, the buy order will be cancelled immediately and the sell order will have 0.5 BTC remaining.

No fees are charged for STP cancellations, and the crossed volume is not reported as a fill (although in the Orders API it will be counted as “filled size”). No settlement occurs for STP crosses.

Trade Finality

All trades on CoinJar Exchange are final, unless we are required by law to reverse certain trades or where a significant technical error has occured to cause trades that are not consistent with our Terms of Service or Trading Rules.

Settlement

Settlement involves the simultaneous transfer of the base currency from seller’s account to buyer’s account, and the counter currency from buyer’s account to seller’s account. The amount in base currency is equal to the size of the trade, whereas the amount in counter currency is equal to the value of the trade (price multiplied by size). When the amount in counter currency is not whole multiples of a subunit of the currency (e.g. 0.01 AUD or 0.00000001 BTC), it will be rounded to the nearest subunit. CoinJar has the discretion to select a suitable rounding method but the same amount applies to both the buyer and the seller.

The settlement of any trades takes place after the trade has occurred. While in most cases CoinJar Exchange ensures that settlement takes place within 10 seconds of the trade, during periods with extremely high trading volume, settlement may be delayed by up to an hour.

Before the trades are settled, you can place new orders with unsettled funds, but you won’t be allowed to withdraw unsettled funds. For example, if you sell 2 BTC @ $10,000, you will receive $20,000 in unsettled funds immediately after the trade which you can use to place a new order, but you will have to wait for the settlement to occur to withdraw this $20,000 from CoinJar Exchange.

Fees

CoinJar Exchange performs fee billing post-settlement and trading fees are charged daily in arrears. Generally, fees are charged everyday after 02:00 UTC for trades matched during the previous UTC day. Fee invoices are automatically charged to CoinJar Exchange accounts. If an account has a negative balance after fee invoices are paid, withdrawals from CoinJar Exchange will be restricted until the account deficits are covered by deposits or trades.

Development Considerations

If you plan to implement automated trading strategies or run your trading algorithms against CoinJar Exchange, you may want to consider the topics in this section.

Latency

CoreMatch is capable of processing tens of thousands of requests per second with extremely low latencies. However, not all actions on CoinJar Exchange happen instantly. This table outlines the expected latencies for various actions in the trading lifecycle.

# Stage Description Expected latency (excluding network)
1 Order Placement REST API returns initial order status. Order information is available in orders API. <10ms
2 Trade Match WebSocket API sends order update, new fill, new trade, account balance updates, ticker update and orderbook updates. <10ms
3 Trade Record Trade information is archived and available in trades API and candles API. <1s
4 Order Record Order information is archived and available in historical orders API. <1s
5 Fill Record Fill information is archived and available in fills API. <60s
6 Settlement Settlement occurs with buyer’s and seller’s settled account balance adjusted. Funds become withdrawable. <60s

To minimise network latency, you may choose to co-locate with the CoinJar Exchange servers in AWS Sydney (ap-southeast-2) region.

Rate Limits

Some (but not all) CoinJar Exchange API endpoints have rate limits. Generally, most API calls are rate limited to 600 requests every 10 minutes. For example, if you make 40 API calls between 12:40:00 and 12:41:00, you will only have 560 API calls left until the rate limit resets at 12:50:00.

API calls for order placements, order cancellation and market data are not rate limited. However, CoinJar reserves the right to restrict your API access if we determine (in our sole discretion) that your usage of non-rate-limited APIs is excessive compared to your settled trading activities.

Requests from all sources are counted towards the API rate limits per user, including API calls made on the CoinJar Exchange web interface. Therefore, if you develop and use multiple trading applications to access the same CoinJar Exchange account, you may need to consider the combined API call volume from all of these applications.

Security

Each API key generated on CoinJar Exchange has full control of your CoinJar Exchange account, including transfers to and from CoinJar. All activities performed with your API key are considered irrevocably authorised by you. CoinJar Exchange API keys cannot be used to control your non-Exchange CoinJar accounts.

You are solely responsible for keeping API keys secure and confidential. You may revoke API keys at any time using the CoinJar Exchange web interface.