As far as I can tell here are how the current bands are calculated, from the point of view of a single player.
Let MmStartingWidth = 100
Let MmWidthGrowth = 400
Let MmWidthGrowthTime = 180
Let MmEloBonusMultiplier = 0.9
Let EloCutOffExponent = 0.97
Let timeSpentWaiting = time in seconds in the queue.
Let RawMmElo = ?? -- Probably real elo.
Let EffectiveMmElo = ?? -- Probably to do with elo malus for being new or inactive.
Let recentWinChance = ?? -- Probably between 0 and 1 and based on recent games.
Let BonusElo = Max(-300, Min(300, -174 * Ln((1 / recentWinChance) - 1)))
Let WaitRatio = Min(1, timeSpentWaiting / MmWidthGrowthTime)
Let EloWidth = MmStartingWidth + WaitRatio * MmWidthGrowth
The first line here is responsible for the win/loss streak adjustment. I did not search out exactly what recentWinChance is doing, but the name suggests something that is probably often between 0.2 and 0.8, and that it doesn't directly care about the outcome of recent games.
Let MinConsideredElo = EffectiveMmElo + BonusElo
Let MaxConsideredElo = MinConsideredElo +
(Max(1500, RawMmElo) - EffectiveMmElo) * WaitRatio
I think the main goal here is to let new players match as a 1100 elo player, even though their real elo is 1500. They can match as anything between an 1100 and 1500 elo player after reaching their full wait time.
If MinConsideredElo > 1500 then
MinConsideredElo = 1500 +
(MinConsideredElo - 1500) ^ EloCutOffExponent
else
MinConsideredElo = 1500 -
(1500 - MinConsideredElo) ^ EloCutOffExponent
The same happens for MaxConsideredElo.
The point here is to squish the extreme ends of the elo scale inwards before comparing widths. This is basically equivalent to increasing the widths for extreme players, but it is a bit easier to conceptualise.
Players A and B can be matched if:
(A.MinConsideredElo - B.MinConsideredElo > Max(A.EloWidth, B.EloWidth))
or
(A.MaxConsideredElo - B.MaxConsideredElo > Max(A.EloWidth, B.EloWidth))
Player matching seems asymmetric so perhaps it is checked on both sides. I probably have at least one thing wrong.