Формат 32nd (thirty seconds)

    В работе с трейдинговыми системами наткнулся на необычный формат представления чисел, представляющих котировки ценных бумаг, в частности для государственных облигаций правительства США. Например, цена, представленная как 100-31 далеко не означает 100 долларов и 31 цент, или 100-127 вообще имеет мало смысла, так как в одном долларе всего 100 центов, а не 1000, и нет необходимости резервировать под дробную часть три знака после запятой.

    Вся хитрость тут в том, что это не привычная десятичная запись. Например, 100-31 в десятичной форме равно 100.97265625, а 100-127 соответствует 100.40234375.

    Итак, данный формат записи дробных чисел называется «thirty seconds» или 32nd. Для визуального удобства и явного отличия от десятичной формы вместо точки в качестве разделителя используется маленькая черточка. А само число имеет в общем следующий формат:

    AAA.XXY

    где AAA — это целая часть числа, имеющая такой же смысл, как и в десятичной системе. XX — это количество 1/32-х долей от дробной части, а Y — это количество восьмушек (1/8) в последней 1/32 доле. Несмотря на туманное описание, формула перевода числа AAA.XXY в формате 32nd в десятичный формат весьма проста:

    D = AAA + (XX + Y * 1/8) * 1/32

    или

    D = AAA + XX * (1/32) + Y * (1/256)

    то есть для числа 100-127 ААА=100, XX=12, Y=7, поэтому:

    D = 100 + 12/32 + 7/256 = 100.40234375

    Чтобы формула была корректной, XX может принимать значения только от "00" до "31", а Y от "0" до "7". Также при записи Y число 4 может быть заменено на +, а "0" на пробел. То есть 100-31 в полной форме записи равно 100-310, а 100-12+ эквивалентно 100-124.

    Видно, что в трех дробных разрядах кодируется не 1000 долей, как в десятичной системе, а только 256 (32 * 8).

    Итак, еще раз: если написано 100-12+, то это 100.39062500 в десятичной системе.

    Формула обратного перевода из десятичного представления в формат 32nd не многим сложнее. Пусть D десятичное число:

    A = TRUNC(D)
    XX = TRUNC((D - A) * 32)
    Y = ((D - A) * 32 - XX) * 8

    TRUNC — это функция взятия целой части.

    Если Y равно 0, то можно этот разряд не писать, а если 4, то можно заменить на +.

    Компонента Y должна получиться обязательно целочисленной. Иначе, наличие дробной части у Y — это признак, того, что исходное десятичное число D не имеет отображения в формат 32nd (только 256 значений дробной части из всех 1000 возможных могут иметь соответствие в формате 32nd).

    Как бы ни причудливо не выглядел подобный способ записи денежных сумм, именно его используют трейдеры (не путать с рейдерами), например, при ведении торгов государственным облигациями США. Могу предположить, что это просто наследие времен, когда далеко не все знали дробные десятичные числа, а запись частей целого в виде натуральных дробей гораздо ближе к натуре человека. Разделить кучку на две, три и т.д. части может даже ребенок, необученный десятичным дробям.

    Формат странный, но знать его приходится.
    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 9
    • +2
      Формат имеет исторические корни, когда торговали только люди — так и говорили 5 с четвертью, и т д.
      В фильмах по биржи начала прошлого века можно посмотреть :-)
      • +1
        Если записать дробь в двоичном виде, то получим биты .XXXXXYYY
        Наверное, это всё идёт от английских денежных единиц, где использовалось деление более крупной деньги на две мелкие.

        P.S. Также при записи Y число 4 может быть заменено на +, а <пропущен ноль?> на пробел
        • 0
          Я в тексте заметил несколько подобных пропусков.
          Просьба автору перечитать статью.
          Спасибо
          • +1
            Спасибо, исправил. Это был глюк хабровского форматтера. Код "<code>0</code>" съедает ноль (хотя "<code>7</code>" нормально отображает 7). Пришлось добавить кавычки вокруг нуля в теге code.
        • +1
          И к чему такие сложности? Интересно, трейдеры привыкают к такому представлению чисел и воспринимают как естественное или пересчитывают каждый раз?
          • +4
            Они ничего не пересчитывают, они этим мыслят.
            • 0
              У старых трейдеров это естественное, а десятичные дроби — извращение :-D
            • 0
              Могу еще добавить, что эта система немного более общая. Используются разные комбинации количества долей (именуют points) и поддолей (именуют по количеству: half, quarters...). Количество долей как правило 8, 16, 32, 64, 128 (думаю, бывает и больше), количество поддолей 0, 2, 4, 8.
              • 0
                Это все америкацны с их дюймами, футами, галонами и 1/2, 1/4 в трейдинге.

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.