ococo/meta/get_ui_def.js

/**
 * Returns the UI layout definition for OCOCO, with a field for each parameter.
 *
 * Part of the `meta` handler section.
 *
 * @memberOf module:OCOCO
 * @returns {object} uiDef
 */
const getUIDef = () => ({
  label: 'Order Creates OcO',
  id: 'bfx-ococo',

  uiIcon: 'ma-crossover-active',
  connectionTimeout: 10000,
  actionTimeout: 10000,

  customHelp: [
    'Creates a standard LIMIT or MARKET order, and schedules an OcO order to be',
    'submitted after the initial order fills. All of the normal LIMIT/MARKET',
    'parameters are available on both orders.'
  ].join('\n'),

  header: {
    component: 'ui.checkbox_group',
    fields: ['hidden', 'postonly']
  },

  sections: [{
    title: '',
    name: 'general',
    rows: [
      ['orderType', 'orderPrice'],
      ['amount', 'action']
    ]
  }, {
    title: 'OcO Settings',
    name: 'shortEMASettings',
    fixed: true,

    rows: [
      ['limitPrice', 'stopPrice'],
      ['ocoAmount', 'ocoAction']
    ]
  }, {
    title: '',
    name: 'submitSettings',
    fixed: true,

    rows: [
      ['submitDelaySec', 'cancelDelaySec']
    ]
  }, {
    title: '',
    name: 'lev',
    fullWidth: true,
    rows: [
      ['lev']
    ],

    visible: {
      _context: { eq: 'f' }
    }
  }],

  fields: {
    submitDelaySec: {
      component: 'input.number',
      label: 'Submit Delay (sec)',
      customHelp: 'Seconds to wait before submitting orders',
      default: 1
    },

    cancelDelaySec: {
      component: 'input.number',
      label: 'Cancel Delay (sec)',
      customHelp: 'Seconds to wait before cancelling orders',
      default: 0
    },

    orderType: {
      component: 'input.dropdown',
      label: 'Order Type',
      default: 'LIMIT',
      options: {
        LIMIT: 'Limit',
        MARKET: 'Market'
      }
    },

    amount: {
      component: 'input.amount',
      label: 'Amount $BASE',
      customHelp: 'Initial Order amount',
      priceField: 'orderPrice'
    },

    ocoAmount: {
      component: 'input.amount',
      label: 'Amount $BASE',
      customHelp: 'OcO Order amount'
    },

    orderPrice: {
      component: 'input.price',
      label: 'Initial Order Price $QUOTE',

      disabled: {
        orderType: { eq: 'MARKET' }
      }
    },

    limitPrice: {
      component: 'input.price',
      label: 'OcO Limit Price $QUOTE'
    },

    stopPrice: {
      component: 'input.price',
      label: 'OcO Stop Price $QUOTE'
    },

    lev: {
      component: 'input.range',
      label: 'Leverage',
      min: 1,
      max: 100,
      default: 10
    },

    hidden: {
      component: 'input.checkbox',
      label: 'HIDDEN',
      default: false
    },

    postonly: {
      component: 'input.checkbox',
      label: 'POST-ONLY',
      default: false
    },

    action: {
      component: 'input.radio',
      label: 'Action',
      options: ['Buy', 'Sell'],
      inline: true,
      default: 'Buy'
    },

    ocoAction: {
      component: 'input.radio',
      label: 'Action',
      options: ['Buy', 'Sell'],
      inline: true,
      default: 'Buy'
    }
  },

  actions: ['preview', 'submit']
})

module.exports = getUIDef