
jsmex-trader-sdk -- JSMEX Trader SDK

jsmex-trader-sdk
is a library for nodejs which gives you access to jsmex's API interface. This
allows you to create JavaScript strategies which can be deployed in jsmex server and executed in JavaScript environments completely isolated from each other.
JSMEX
JSMEX is the first programmable cryptocurrency exchange! Sign Up
Every minute all the uploaded strategies are executed in parallel isolated environments on our servers.
REQUIREMENTS
This project requires nodejs LTS version 10.4.0 (or later).
To install this module run npm install jsmex-trader-sdk
.
API DOCUMENTATION
jsmex-trader-sdk
is a CCXT extension library is used to build strategies for jsmex runtime executor
. It provides quick access to market data for storage, analysis, visualization, indicator development, algorithmic trading, bot programming, and related software engineering.
Class: Trader
[core]
This class provide the core interface to ccxt API.
Trader instances will inherit all the wrapped ccxt methods and will execute in sequence onInit, onTick and onExit.
Trader.ccxtExchanges.jsmex.ccxtInstance
This is the ccxt instance of the jsmex exchange, if you are not interested in using the wrapper you can directly refer to this reference.
Trader.fetchDepth(options)
options
[object]
symbol
[string] - Trading symbol
- return a [Promise]
Trader.fetchOHLCV(options)
options
[object]
symbol
[string] - Trading symbol
resolution
[string] - Kline resolution
since
[number] - Time in milliseconds
limit
[number] - Number of klines
- return a [Promise]
Trader.cancelOrder(options)
options
[object]
symbol
[string] - Trading symbol
id
[number] - id
- return a [Promise]
Trader.cancelAllOrders(options)
Trader.fetchOrders(options)
options
[object]
symbol
[string] - Trading symbol
offset
[number] - Offset
limit
[number] - Limit records
- return a [Promise]
Trader.fetchTransactions(options)
options
[object]
symbol
[string] - Trading symbol
offset
[number] - Offset
limit
[number] - Limit records
- return a [Promise]
Trader.putOrder(options)
options
[object]
symbol
[string] - Trading symbol
price
[string] - Price
amount
[string] - Amount
side
[string] - Side
type
[string] - Type
- return a [Promise]
Trader.pipeline(options)
This is restricted API, it allows bulk operations
options
[object]
symbol
[string] - Trading symbol
pipeline
[array] - Pipeline array
- return a [Promise]
Trader.balance(options)
- return a [Promise]
Trader.fetchKeyValueStorage(options)
List key-value storage
Trader.setKeyValueStorage(options)
Set an element in key-value storage
options
[object]
key
[string] - Key
value
[string] - Value
- return an [object]
Trader.setBulkKeyValueStorage(options)
Bulk set in key-value storage
options
[object]
bulk
[array] - array of key-value object as described in setKeyValueStorage
- return an [object]
Trader.getKeyValueStorage(options)
Get an element in key-value storage
options
[object]
- return an [object]
Trader.deleteKeyValueStorage(options)
Delete an element in key-value storage
options
[object]
- return an [object]
Trader.open(index)
index
[number] - Kline index
- return a [BigNumber]
Trader.high(index)
index
[number] - Kline index
- return a [BigNumber]
Trader.low(index)
index
[number] - Kline index
- return a [BigNumber]
Trader.close(index)
index
[number] - Kline index
- return a [BigNumber]
Trader.volume(index)
index
[number] - Kline index
- return a [BigNumber]
Trader.balance(index)
Trader.transactions(index)
- return a [TransactionDTO]
Trader.orders(index)
Trader.getPublicData(fetchDepthParams, fetchOHLCVParams)
Automatically called in Trader._onInit
, results are parsed in Trader.update
fetchDepthParams
[object] - ccxt interface params
fetchOHLCVParams
[object] - ccxt interface params
- return a [Promise]
Trader.getPrivateData(fetchOrdersParams, fetchTransactionsParams)
Automatically called in Trader._onInit
, results are parsed in Trader.update
fetchOrdersParams
[object] - ccxt interface params
fetchTransactionsParams
[object] - ccxt interface params
- return a [Promise]
EXAMPLES
Below is a sample program which shows basic usage of the library.
(async function () {
try {
const PanicCloseStrategy = require('./strategy.js');
await PanicCloseStrategy.start()
} catch (err) {
console.error('err', err)
}
})()
global.log = global.log || console.log
global.error = global.error || console.error
module.exports = class extends (global.Trader || require('jsmex-trader-sdk')) {
constructor (options) {
super(options)
this.defaultSymbol = this.options.defaultSymbol
}
onInit () {
}
async onTick () {
try {
let close = this.close()
let yesterdayOpen = this.open(24)
let rate = (
close.minus(yesterdayOpen)
).div(yesterdayOpen)
if (rate.lte(-0.2)) {
return this.cancelAllOrders()
} else {
global.log(rate.toNumber())
}
} catch (err) {
global.error(err)
}
}
onExit () {
}
static get options () {
return {
...this.defaultOptions,
defaultSymbol: 'BTC/USDT',
exchanges: {
jsmex: {
wwwDomain: 'jsmex.io',
apiDomain: 'api.jsmex.io'
}
},
ccxt: {
fetchOHLCV: {
resolution: '10m',
limit: 500
}
}
}
}
}
For othe examples, like how to use key-value storage, check out examples
directory.
SCREENSHOTS
Strategy Editor

Tradingview (test environment)

PIPELINE
In our pipeline for 2020 there are really interesting features:
- Q1 Strategy performance ranking
- Q2 Strategy Copy Trading
THANKS
Special thanks to:
- CCXT Team
- Hapi for Joi
- MikeMcl for bignumber.js
CONTACT US
jsb4ch@jsmex.io
NEWS
https://t.me/jsmexio
https://twitter.com/jsmexchange