jsmex-trader-sdk v1.1.50
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
- Requirements
- API Documentation * Trader
- Examples
- Jsmex Strategy Screenshot
- Pipeline
- Thanks
- Contact us
- News
- Chat
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)
Trader.fetchOHLCV(options)
options
objectsymbol
string - Trading symbolresolution
string - Kline resolutionsince
number - Time in millisecondslimit
number - Number of klines- return a Promise
Trader.cancelOrder(options)
Trader.cancelAllOrders(options)
- return a Promise
Trader.fetchOrders(options)
options
objectsymbol
string - Trading symboloffset
number - Offsetlimit
number* - Limit records- return a Promise
Trader.fetchTransactions(options)
options
objectsymbol
string - Trading symboloffset
number - Offsetlimit
number* - Limit records- return a Promise
Trader.putOrder(options)
options
objectsymbol
string - Trading symbolprice
string - Priceamount
string - Amountside
string - Sidetype
string* - Type- return a Promise
Trader.pipeline(options)
This is restricted API, it allows bulk operations
Trader.balance(options)
- return a Promise
Trader.fetchKeyValueStorage(options)
List key-value storage
- return an object
Trader.setKeyValueStorage(options)
Set an element in key-value storage
Trader.setBulkKeyValueStorage(options)
Bulk set in key-value storage
options
objectbulk
array* - array of key-value object as described in setKeyValueStorage- return an object
Trader.getKeyValueStorage(options)
Get an element in key-value storage
Trader.deleteKeyValueStorage(options)
Delete an element in key-value storage
Trader.open(index)
Trader.high(index)
Trader.low(index)
Trader.close(index)
Trader.volume(index)
Trader.balance(index)
- return a object
Trader.transactions(index)
- return a TransactionDTO
Trader.orders(index)
- return a OrderDTO
Trader.getPublicData(fetchDepthParams, fetchOHLCVParams)
Automatically called in Trader._onInit
, results are parsed in Trader.update
fetchDepthParams
object - ccxt interface paramsfetchOHLCVParams
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 paramsfetchTransactionsParams
object - ccxt interface params- return a Promise
EXAMPLES
Below is a sample program which shows basic usage of the library.
// file index.js
(async function () {
try {
const PanicCloseStrategy = require('./strategy.js');
await PanicCloseStrategy.start()
} catch (err) {
console.error('err', err)
}
})()
// file strategy.js
global.log = global.log || console.log
global.error = global.error || console.error
// never use console in your program, it doesn't exists in the isolated environment, use global.log in order to receive logs in your account dashboard
module.exports = class extends (global.Trader || require('jsmex-trader-sdk')) {
constructor (options) {
super(options)
this.defaultSymbol = this.options.defaultSymbol
}
/**
* SamplePanicCloseStrategy on init method
*
* @author jsb4ch <jsb4ch@jsmex.io>
* @since 1.1.0
*/
onInit () {
}
/**
* SamplePanicCloseStrategy on tick method
*
* @author jsb4ch <jsb4ch@jsmex.io>
* @since 1.1.0
*/
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)
}
}
/**
* SamplePanicCloseStrategy on tick method
*
* @author jsb4ch <jsb4ch@jsmex.io>
* @since 1.1.0
*/
onExit () {
}
/**
* SamplePanicCloseStrategy static options
*
* @author jsb4ch <jsb4ch@jsmex.io>
* @since 1.1.0
*/
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