managedSubscribe (channel = '', identifier = '', payload = {}) {
    const key = `${channel}:${identifier}`

    if (this._subscriptionRefs[key]) {
      this._subscriptionRefs[key]++
      return false
    }

    this._subscriptionRefs[key] = 1
    this.subscribe(channel, payload)

    return true
  }
Subscribes and tracks subscriptions per channel/identifier pair. If
already subscribed to the specified pair, nothing happens.

@param {string} channel - channel name
@param {string} identifier - for uniquely identifying the ref count
@param {object} payload - merged with sub packet
@returns {boolean} subSent
@todo will be refactored to return promise from subscribe() call instead
  of sub action taken flag
@see WSv2#subscribeTrades
@see WSv2#subscribeTicker
@see WSv2#subscribeCandles
@see WSv2#subscribeOrderBook
@example
const ws = new WSv2()

ws.on('open', async () => {
  ws.onTrades({ symbol: 'tBTCUSD' }, (trades) => {
    console.log('recv trades: %j', trades)
 })

  ws.managedSubscribe('trades', 'tBTCUSD', { symbol: 'tBTCUSD' })
})

await ws.open()