private void subscribeTo(LiveExposurePnl item_, bool do_=true)
    {
      item_.PnlUpdated -= handleComponentUpdated;

      if (!do_)
        return;

      item_.PnlUpdated += handleComponentUpdated;
    }
    private void subscribeTo(LiveExposurePnl exp_, bool do_=true)
    {
      if (exp_ == null)
        return;

      exp_.PnlUpdated -= handleExposurePnlUPdated;

      if (!do_)
        return;

      exp_.PnlUpdated += handleExposurePnlUPdated;
    }
    internal async Task Start(CarbonClient cc_, double pnlMultiplier_)
    {
      if (m_wts == null || m_exposureIDs == null || m_wts.Length != m_exposureIDs.Length)
        return;

      for (int i = 0; i < m_wts.Length; ++i)
      {
        // no point monitoring something with zero weight
        if (m_wts[i].IsZero()) continue;

        var liveexp = new LiveExposurePnl(m_exposureIDs[i], m_wts[i], pnlMultiplier_);
        m_pnls.Add(liveexp);

        await liveexp.Start(cc_);
      }

      foreach (var v in m_pnls)
        subscribeTo(v);

      OnPnlUpdated(new ValueUpdatedEventArgs<double>(Pnl));
    }
 public void Add(LiveExposurePnl item_)
 {
   m_set.Add(item_);
   subscribeTo(item_);
 }