ping_pong/meta/gen_preview.js

'use strict'

const genCID = require('../../util/gen_client_id')
const { Order } = require('bfx-api-node-models')
const genPingPongTable = require('../util/gen_ping_pong_table')

/**
 * Generates an array of preview orders which show what could be expected if
 * an instance of PingPong was executed with the specified parameters.
 *
 * Part of the `meta` handler section.
 *
 * @memberOf module:PingPong
 * @param {object} args - instance parameters
 * @returns {object[]} previewOrders
 */
const genPreview = (args = {}) => {
  const { endless, hidden, pingAmount, pongAmount, symbol, _margin } = args
  const pingPongTable = genPingPongTable(args)
  const pings = Object.keys(pingPongTable)
  const pongs = pings.map(price => pingPongTable[price])
  const orders = []

  pings.forEach(price => {
    orders.push(new Order({
      symbol,
      price,
      cid: genCID(),
      type: _margin ? Order.type.LIMIT : Order.type.EXCHANGE_LIMIT,
      amount: pingAmount,
      hidden
    }))
  })

  orders.push({ label: 'PONGS FOLLOW' })

  pongs.forEach(price => {
    orders.push(new Order({
      symbol,
      price,
      cid: genCID(),
      type: _margin ? Order.type.LIMIT : Order.type.EXCHANGE_LIMIT,
      amount: -pongAmount,
      hidden
    }))
  })

  if (endless) {
    orders.push({ label: 'REPEATS ENDLESSLY' })
  }

  return orders
}

module.exports = genPreview