3.0.5 • Published 2 months ago

xapi-node v3.0.5

Weekly downloads
267
License
BSD 4-Clause
Repository
github
Last release
2 months ago

Logo

xapi-node

This project makes it possible to get data from Forex market, execute market or limit order with NodeJS/JS through WebSocket connection

This module may can be used for X-Trade Brokers xStation5 accounts

WebSocket protocol description: https://peterszombati.github.io/xapi-node/

This module is usable on Front-end too.

Getting started

1. Install via npm

npm i xapi-node

2. Example usage

Authentication

// TypeScript
import XAPI from 'xapi-node'

const x = new XAPI({
    accountId: '(xStation5) accountID',
    password: '(xStation5) password',
    type: 'real' // or demo
})

(async () => {
  await x.connect()
  console.log('Connection is ready')
  x.disconnect().then(() => console.log('Disconnected'))
})().catch((e) => {
  console.error(e)
})

Authentication only for XTB accounts

// TypeScript
import XAPI from 'xapi-node'

const x = new XAPI({
    accountId: '(xStation5) accountID',
    password: '(xStation5) password',
    host: 'ws.xtb.com', // only for XTB accounts
    type: 'real' // or demo
})

(async () => {
  await x.connect()
  x.disconnect().then(() => console.log('Disconnected'))
})().catch((e) => {
  console.error(e)
})

placing buy limit on BITCOIN CFD

x.Socket.send.tradeTransaction({
    cmd: CMD_FIELD.BUY_LIMIT,
    customComment: null,
    expiration: new Date().getTime() + 60000 * 60 * 24 * 365,
    offset: 0,
    order: 0,
    price: 100,
    sl: 0,
    symbol: 'BITCOIN',
    tp: 8000,
    type: TYPE_FIELD.OPEN,
    volume: 10
}).then(({order}) => {
    console.log('Success ' + order)
}).catch(e => {
    console.error('Failed')
    console.error(e)
})

placing buy limit on US30 (Dow Jones Industrial Average)

x.Socket.send.tradeTransaction({
    cmd: CMD_FIELD.BUY_LIMIT,
    customComment: null,
    expiration: new Date().getTime() + 60000 * 60 * 24 * 365,
    offset: 0,
    order: 0,
    price: 21900,
    sl: 0,
    symbol: 'US30',
    tp: 26500,
    type: TYPE_FIELD.OPEN,
    volume: 0.2
}).then(({order}) => {
    console.log('Success ' + order)
}).catch(e => {
    console.error('Failed')
    console.error(e)
})

get live EURUSD price data changing

x.Stream.listen.getTickPrices((data) => {
    console.log(data.symbol + ': ' + data.ask + ' | ' + data.askVolume + ' volume | ' + data.level + ' level' )
})

(async () => {
  await x.connect()
  x.Stream.subscribe.getTickPrices('EURUSD')
    .catch(() => { console.error('subscribe for EURUSD failed')})
})()

/* output
EURUSD: 1.10912 | 500000 volume | 0 level
EURUSD: 1.10913 | 1000000 volume | 1 level
EURUSD: 1.10916 | 1000000 volume | 2 level
EURUSD: 1.10922 | 3000000 volume | 3 level
EURUSD: 1.10931 | 3500000 volume | 4 level
...
*/

get EURUSD M1 price history

(async () => {
  await x.connect()
  x.getPriceHistory({
    symbol:'EURUSD',
    period: PERIOD_FIELD.PERIOD_M1
  }).then(({candles, digits}) => {
    console.log(candles.length)
    console.log(candles[0])
    console.log('digits = ' + digits)
  })
})()

market buy EURUSD (1.0 lot / 100000 EUR)

(async () => {
  await x.connect()
  x.Socket.send.tradeTransaction({
    cmd: CMD_FIELD.BUY,
    customComment: null,
    expiration: x.serverTime + 5000,
    offset: 0,
    order: 0,
    price: 1,
    symbol: 'EURUSD',
    tp: 0,
    sl: 0,
    type: TYPE_FIELD.OPEN,
    volume: 1
  }).then(({order}) => {
    console.log('Success ' + order)
  }).catch(e => {
    console.error('Failed')
    console.error(e)
  })
})()

modify open position (for example set new stop loss)

(async () => {
  await x.connect()
  x.Socket.send.tradeTransaction({
    order: 1234, // position number you can find it in (x.positions)
    type: TYPE_FIELD.MODIFY,
    sl: 1.05, // new stop loss level
  }).then(({order}) => {
    console.log('Success ' + order)
  }).catch(e => {
    console.error('Failed')
    console.error(e)
  })
})()

How to use logger

import {Logger,XAPI} from 'xapi-node'

const l = new Logger()
l.on({
  type: 'debug',
  callback: data => console.log(data)
})
l.on({
  type: 'transaction',
  callback: data => console.log(data)
})
l.on({
  type: 'error',
  callback: data => console.log(data)
})
l.on({
  type: 'info',
  callback: data => console.log(data)
})

const x = new XAPI({
  accountId: '(xStation5) accountID',
  password: '(xStation5) password',
  type: 'real' // or demo
}, l)
3.0.5

2 months ago

2.8.0

6 months ago

2.8.3

6 months ago

2.8.2

6 months ago

2.8.5

6 months ago

2.8.4

6 months ago

2.8.7

6 months ago

2.8.6

6 months ago

2.8.9

6 months ago

2.8.8

6 months ago

3.0.4

6 months ago

3.0.3

6 months ago

3.0.2

6 months ago

3.0.1

6 months ago

3.0.0

6 months ago

2.8.11

6 months ago

2.8.10

6 months ago

2.7.0

1 year ago

2.7.2

1 year ago

2.7.1

1 year ago

2.7.10

1 year ago

2.7.4

1 year ago

2.7.3

1 year ago

2.7.6

1 year ago

2.7.5

1 year ago

2.7.8

1 year ago

2.7.7

1 year ago

2.7.9

1 year ago

2.5.6

2 years ago

2.5.7

1 year ago

2.6.0

1 year ago

2.6.2

1 year ago

2.5.5

2 years ago

2.5.4

3 years ago

2.5.3

3 years ago

2.5.2

3 years ago

2.5.1

3 years ago

2.5.0

3 years ago

2.4.11

3 years ago

2.4.10

3 years ago

2.4.9

3 years ago

2.4.8

3 years ago

2.4.7

3 years ago

2.4.5

3 years ago

2.4.6

3 years ago

2.4.4

3 years ago

2.4.3

3 years ago

2.4.1

3 years ago

2.4.2

3 years ago

2.4.0

3 years ago

2.3.9

3 years ago

2.3.8

3 years ago

2.3.7

3 years ago

2.3.6

3 years ago

2.3.4

4 years ago

2.3.5

4 years ago

2.3.3

4 years ago

2.3.2

4 years ago

2.3.1

4 years ago

2.3.0

4 years ago

2.2.9

4 years ago

2.2.8

4 years ago

2.2.7

4 years ago

2.2.6

4 years ago

2.2.5

4 years ago

2.2.4

4 years ago

2.2.3

4 years ago

2.2.2

4 years ago

2.2.1

4 years ago

2.2.0

4 years ago

2.1.3

4 years ago

2.1.2

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.9.9

4 years ago

1.9.8

4 years ago

1.9.7

4 years ago

1.9.6

4 years ago

1.9.5

4 years ago

1.9.4

4 years ago

1.9.3

4 years ago

1.9.2

4 years ago

1.9.1

4 years ago

1.9.0

4 years ago

1.8.3

4 years ago

1.8.2

4 years ago

1.8.1

4 years ago

1.8.0

4 years ago

1.7.5

4 years ago

1.7.4

4 years ago

1.7.3

4 years ago

1.7.2

4 years ago

1.7.1

4 years ago

1.7.0

4 years ago

1.6.4

4 years ago

1.6.3

4 years ago

1.6.2

5 years ago

1.6.1

5 years ago

1.6.0

5 years ago

1.5.6

5 years ago

1.5.5

5 years ago

1.5.4

5 years ago

1.5.3

5 years ago

1.5.2

5 years ago

1.5.1

5 years ago

1.5.0

5 years ago

1.4.5

5 years ago

1.4.3

5 years ago

1.4.2

5 years ago

1.4.1

5 years ago

1.4.0

5 years ago

1.3.6

5 years ago

1.3.5

5 years ago

1.3.4

5 years ago

1.3.3

5 years ago

1.3.2

5 years ago

1.3.1

5 years ago

1.3.0

5 years ago

1.2.4

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.8

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.38

5 years ago

1.0.37

5 years ago

1.0.36

5 years ago

1.0.35

5 years ago

1.0.34

5 years ago

1.0.33

5 years ago

1.0.32

5 years ago

1.0.31

5 years ago

1.0.30

5 years ago

1.0.29

5 years ago

1.0.28

5 years ago

1.0.27

5 years ago

1.0.26

5 years ago

1.0.25

5 years ago

1.0.24

5 years ago

1.0.23

5 years ago

1.0.22

5 years ago

1.0.21

5 years ago

1.0.20

5 years ago

1.0.19

5 years ago

1.0.18

5 years ago

1.0.17

5 years ago

1.0.16

5 years ago

1.0.15

5 years ago

1.0.14

5 years ago

1.0.13

5 years ago

1.0.12

5 years ago

1.0.11

5 years ago

1.0.10

5 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago