Skip to content

Commit

Permalink
liquidation, add status_message_deriv for WS
Browse files Browse the repository at this point in the history
  • Loading branch information
fieldfoxWim committed Jan 16, 2022
1 parent df94517 commit ae92ef3
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 5 deletions.
1 change: 1 addition & 0 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ module.exports = {
UserInfo: require('./user_info'),
Currency: require('./currency'),
StatusMessagesDeriv: require('./status_messages_deriv'),
StatusMessagesDerivWS: require('./ws_status_messages_deriv'),
Login: require('./login'),
ChangeLog: require('./change_log'),
PublicPulseProfile: require('./public_pulse_profile'),
Expand Down
6 changes: 4 additions & 2 deletions lib/liquidations.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
'use strict'

const { preparePrice } = require('bfx-api-node-util')
const numberValidator = require('./validators/number')
const dateValidator = require('./validators/date')
const amountValidator = require('./validators/amount')
Expand Down Expand Up @@ -52,15 +53,16 @@ class Liquidations extends Model {
*/
toString () {
const {
mtsUpdated, symbol, amount, basePrice, isMatch, isMarketSold
mtsUpdated, symbol, amount, basePrice, isMatch, isMarketSold, liquidationPrice
} = this

return _compact(_flatten([
new Date(mtsUpdated).toLocaleString(),
symbol,
[amount, '@', basePrice],
isMatch && 'matched',
isMarketSold && 'sold'
isMarketSold && 'sold',
['liq', preparePrice(liquidationPrice),]
])).join(' ')
}

Expand Down
81 changes: 81 additions & 0 deletions lib/ws_status_messages_deriv.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
'use strict'

const stringValidator = require('./validators/string')
const priceValidator = require('./validators/price')
const Model = require('./model')

const fields = {
timestamp: 0,
price: 2,
priceSpot: 3,
fundBal: 5,
fundingEventTimestamp: 7,
fundingAccrued: 8,
fundingStep: 9,
currentFunding: 11,
markprice: 14,
openInterest: 17,
clampMin: 21,
clampMax: 22
}

/**
* Derivatives Status Message model used by the websocket
*/
class StatusMessagesDerivWS extends Model {
/**
* @param {object|Array} data - derivatives status message data
* @param {number} data.timestamp - timestamp
* @param {string} data.price - price
* @param {string} data.priceSpot - spot price
* @param {string} data.fundBal - funding balance
* @param {number} data.fundingEventTimestamp - timestamp
* @param {string} data.fundingAccrued - accrued funding
* @param {string} data.fundingStep - funding step
* @param {number} data.currentFunding - funding applied in the current 8h period,
* @param {number} data.markprice - markprice,
* @param {number} data.openInterest - total number of outstanding derivative contracts,
* @param {number} data.clampMin - min clamp
* @param {number} data.clampMax - max clamp
*/
constructor (data = {}) {
super({ data, fields })
}

/**
* @param {object[]|object|Array[]|Array} data - data to convert to POJO
* @returns {object} pojo
*/
static unserialize (data) {
return super.unserialize({ data, fields })
}

/**
* Validates a given public trade instance
*
* @param {object[]|object|PublicTrade[]|PublicTrade|Array} data - instance to validate
* @returns {string} error - null if instance is valid
*/
static validate (data) {
return super.validate({
data,
fields,
validators: {
timestamp: stringValidator,
price: priceValidator,
priceSpot: priceValidator,
fundBal: priceValidator,
fundingEventTimestamp: stringValidator,
fundingAccrued: priceValidator,
fundingStep: priceValidator,
currentFunding: priceValidator,
markprice: priceValidator,
openInterest: priceValidator,
clampMin: priceValidator,
clampMax: priceValidator
}
})
}
}

module.exports = StatusMessagesDerivWS
9 changes: 6 additions & 3 deletions test/lib/models/liquidations.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ describe('Liquidations entry model', () => {
testModel({
model: Liquidations,
orderedFields: [
null, 'posId', 'mtsUpdated', null, 'symbol', 'amount', 'basePrice', null, 'isMatch', 'isMarketSold'
null, 'posId', 'mtsUpdated', null, 'symbol', 'amount', 'basePrice', null, 'isMatch', 'isMarketSold', null, 'liquidationPrice'
]
})

Expand All @@ -27,7 +27,8 @@ describe('Liquidations entry model', () => {
amount: new Array(...(new Array(5))).map(() => Math.random()),
basePrice: new Array(...(new Array(5))).map(() => Math.random()),
isMatch: new Array(...(new Array(5))).map(() => Math.random() > 0.5),
isMarketSold: new Array(...(new Array(5))).map(() => Math.random() > 0.5)
isMarketSold: new Array(...(new Array(5))).map(() => Math.random() > 0.5),
liquidationPrice: new Array(...(new Array(5))).map(() => Math.random())
}
})

Expand All @@ -36,13 +37,15 @@ describe('Liquidations entry model', () => {
const l = new Liquidations({
symbol: 'tBTCUSD',
amount: 42,
basePrice: 0.1
basePrice: 0.1,
liquidationPrice: 33
})

const str = l.toString()
assert.ok(/BTCUSD/.test(str), 'symbol missing')
assert.ok(_includes(str, '42'), 'amount missing')
assert.ok(_includes(str, '0.1'), 'rate missing')
assert.ok(_includes(str, '33'), 'liquidationPrice missing')
})
})
})

0 comments on commit ae92ef3

Please sign in to comment.