Тимофей Мартынов
Тимофей Мартынов личный блог
28 июня 2017, 15:18

Новости современного программирования. Когда 2+2≠4

Я тут подахренел немного.

Сделали мы портфели на смартлабе (тут). Вот я вбиываю в портфель покупку USDRUB по 56,45.
(я действительно там покупал баксы в мае). 
Бах! А у меня в таблице тут же вбитое число отражается как 56,449999999999996.

Программист мне сказал, что НЕВОЗМОЖНО отражать число 56,45 как 56,45, а можно его только отражать как 56,449999999999996.
И на мои уговоры что-то с этим поделать посоветовал мне пойти поучить матчасть.

Собрали мы учёный совет. начали думать. Несколько дней думали, так и не нашли решения.
В процессе обсуждения звучали такие слова как longint, мантисса, varchar,10^n в нужной степени, операции без радикалов и т.д.

Проблема в том, что число знаков после запятой может быть и 5 (для некоторых акций).
Поэтому просто округлить все числа до 2 знаков после запятой не получится.
Как изящно выйти из ситуации?
85 Комментариев
  • S-L is SCKS
    28 июня 2017, 15:22
    а почему бы перед внесением данных в таблицу не «смотреть» что за тип актива? если акция, смотреть сколько в лоте штук, сделки на бирже не проходят с долями копейки… и потом все показывать в нормальном виде…
      • MadQuant
        28 июня 2017, 16:41
        Тимофей Мартынов, если бы вы писали систему биржи/брокера, где точность — архиважна, пришлось бы юзать longint'ы, с домножением цен на 10^x.
        Но для вас, мне кажется, подойдет аналог «мягкого» округления. В R, например, это функция signif(). В других языках — надо смотреть.
      • xfo
        28 июня 2017, 20:33
        Тимофей Мартынов, простое решение написано постом ниже.
        В R есть встроенная функция:
        signif(56.4499999996) = 56.45
        Реализацию на других языках можно загуглить, пример:
        stackoverflow.com/questions/202302/rounding-to-an-arbitrary-number-of-significant-digits
  • /\../
    28 июня 2017, 15:29

    Смотря какой язык. Вообще-то, тип данных Money есть. Decimal тоже подходит. Пример: http://support.sas.com/kb/51/034.html.

  • MixStyleTrader
    28 июня 2017, 15:30
    Округлять перед показом, если число очень длинное)
  • П М
    28 июня 2017, 15:30
    п… ц он у тебя гонщик.
    пусть делает printf("%.2f", num);
    всё номано будет.
    весь мир живёт с этим и норм, а он не может.
    • Vitty
      28 июня 2017, 16:44
      ПBМ, весь мир использует Decimal, ну или Money
      • П М
        28 июня 2017, 17:18
        Vitty, для того чтобы «отражать число „ 56,449999999999996“ как „56.45“, достаточно воспользоваться функцией printf

        • Vitty
          28 июня 2017, 17:47
          ПBМ, чтобы отображать — да. но если будут последовательно производиться дальнейшие операции — ошибка будет накапливаться. собственно поэтому в серьезных финансовых приложениях используется исключительно специальный тип данных. иначе приколы могут вылезти в весьма неожиданных местах. 
          • П М
            28 июня 2017, 17:55

            Vitty, на самом деле даже в этом случае можно обойти округлением до заданной точности.
            более чем 18 значных чисел (18 значимых цифр) на смартлабе не будет, что покрывается стандартным double.
            у меня на эту тему есть своя прохладная былина
            stackoverflow.com/questions/24599498/rounding-double-strangeness

            она немного другая, про целые числа, казалось бы, но смысл и причина у ней теже.

  • sortarray sortarray
    28 июня 2017, 15:37
    а насколько там важно округление? Можно тупо обрезать лишнее да и все.
      • П М
        28 июня 2017, 15:45
        Тимофей Мартынов, либо самим таблицу точностей заводить, либо где-то из биржевых данных получать.
        вы же отображаете разные цены для разных акций. ну будете отображать разные цены для разных акций с разной точностью.
      • Алексей
        28 июня 2017, 16:26
        Тимофей Мартынов, 

        сам работаю в IT, но иногда хренею от своих коллег.

        1) Где-то уже реализована это и показывает -> значит решение есть.

        2) Лот, кол-во акции, цена, бид, аск, в конце концов справочник можно завести на каждую акцию, в котором хранить разрядность....

        Тимофей, пушай своего прогера, ставь задачу — у других это сделано.
        • evgen000
          28 июня 2017, 16:28
          Алексей, потому что эта задача тривиальная в общем-то, поэтому и сделана у остальных.
      • Алексей
        28 июня 2017, 16:29

        Тимофей Мартынов, 

        имхо дизайн сайта — местами, вырви глаз.

        У меня вот так лента выглядит - 
        www.dropbox.com/s/n3b660o84nzmcnr/Screenshot%202017-06-28%2020.28.23.png?dl=0

         

        могу докинуть CSS, если интересно

      • Сергей Подоляк
        28 июня 2017, 17:49
        Тимофей Мартынов, с такой проблемой сталкивается рано или поздно ЛЮБОЙ инженер или алго-трейдер. Поздравляю, у Вас это произошло сегодня. После этого дня Вы никогда не будете молиться на компУтер и уж на свой смартфон, как делает это молодёжь — и подавно. Сегодня Вы поняли, что комп-это просто туповатый кусок железа, и сделали его осуждённые гражданским судом (за монополизм) сотрудники Интел и Майкрософт.
        По делу: эта проблема существует, но Ваш программист ЭТО ЯВНО ЗАГНУЛ. Ближайшее представление указанного Вами числа:
        5.6450000762939453125E1, то есть 56.450000776.....
        Проверка тут:
        www.binaryconvert.com
        С такой проблемой сталкиваются инженеры из многих областей, и в трейдинге тоже. ИМЕННО ПОЭТОМУ в «финансовом» языке программирования Python есть средства для ЛЮБОЙ БОЛЬШОЙ ТОЧНОСТИ чисел.
        Такие средства есть и в языке Си (++) путём применения специальных библиотек «arbitrary precision» типа MPFR.
        Павел Голобородько (сидя в Японии) ведёт такой проект несколько лет:
        www.holoborodko.com/pavel/mpfr/#intro
        bitbucket.org/advanpix/mpreal/

        Решение для Вашего случая — их несколько: например хранить такие данные в формате String, а для любых манипуляций тут же преобразовывать их в double (float), а затем показывать результат в ОКРУГЛЁННОМ ВИДЕ — с заранее заданной точностью. Проблема будет в том, чтобы муторно и скучно задавать уровень требуемый точности для всех ВЫВОДИМЫХ полей.
        Копая далее математику для финансов Вы будете ещё боьше удивляться почему мир до сих пор не рухнул, если всё (все формулы) рассчитывается по стандарту IEEE754.
        Такие проблемы могут возникать у инженеров в самых неожиданных местах.
        Я писал об этом на форуме MQL5:
        www.mql5.com/ru/forum/165397/page5
        Даже при вычислении  казалось бы простого полинома — для разных инженерных целей:
        ? = (333.75 — a2)b6 + a2 (11a2 b2 — 121b4 — 2) + 5.5b8 + a/(2b).
        Из всех компиляторов Си только старый Borland может использовать — хранить и вычислять — все числа в формате 80 бит, используя всю точность процессора. Все остальные режут числовые слова до 64 бит. В Python используется встроенная бибилиотека повышенной точности, которая считает ПОБИТОВО все нужные операции с точностью 128 бит, и конечно делает это в 50-100 раз медленнее. Но в инженерии и финансах лучше медленее чем платить потом за рухнувший мост или за неправильные проценты с бондов, которые рассчитываются ПОСУТОЧНО с сумм типа 200 миллиардов долларов.
        В моей личной практике был случай когда баланс областного банка свалился из-за того, что неумёха программист не учёл что-то типа 18...19-разрядной десятичной точности большой суммы баланса области в копейках (купоно-гривня была около 5000 за доллар).
          • Сергей Подоляк
            28 июня 2017, 18:33
            Тимофей Мартынов, а Вы думаете КАК Ларри наш Эллисон стал миллиардером? В базах Ёракл такой проблемы нет. И поэтому Oracle покупают большие корпорации. Там десятки типов числовых данных и можно считать как угодно точно, хоть астрофизику.
            Кстати Джеймс Саймонс из RenTec в одном из интервью сказал, что ЛУЧШЕ всех у него получается у АСТРОФИЗИКОВ.
            У них нет проблем с пониманием как точно (насколько высоко точно) требуется высчитывать внутреннюю структуру ценовых рядов.
            По Вашему случаю — я предложил наименее затратный и наиболее гибкий метод. Вы всегда сможете его потом заменить/поменять. прикрутить другой движок для расчётов, третий движок для отображения и тому подобное. Это профессиональный подход. Все остальные советы типа «про округление» загонят Вас чуть попозже в угол. И это будет негибко.
            Даже в разных версиях компиляторов «от Микрософт» числа округляются по-разному, поэтому там есть опции компилятора типа /fp-precise. Лично я давно использую свою собственную функцию округления double.
            Скажите о какой именно «разной точности» идёт речь? О полях в таблицах? Их можно по string хранить как угодно и преобразовывать тоже как угодно. Да, конечно, придётся написать 5-8 подпрограмм проверки ввода и конвертации в String данных. Уверяю Вас, в больших базах типа Oracle именно так и делается. Иначе не получится ни надёжности и цельности данных, ни точности. Там это встроено, а Вам придётся это написать самим. Вот и вся разница. Но Вы же профи, Тимофей. Ну так принимайте в работу проверенные методы профи.
            Да, ещё снизится скорость лопачения данных. Но это же не проблема, не так ли?
      • Тимофей Мартынов, у других получается, как я понимаю
  • Пафос Респектыч
    28 июня 2017, 15:42
    Как выше было правильно сказано, для денег нужен отдельный тип данных. Какой язык программирования-то?
    • MaxStark
      28 июня 2017, 15:48
      Zweroboi, я подозреваю что JS.  У него есть проблемы с расчетами, так как нет 64 битного типа для цифр пока.
    • evgen000
      28 июня 2017, 16:22
      Zweroboi, не нужен никакой отдельный тип данных, задача решается с помощью целочисленного деления (если абстрагироваться от языка), если частное от целочисленного деления больше нуля при делителе скажем 0.001 (три знака после запятой) то округлять до 3 + 1 знака после запятой. Я удивлен что такая задача вызвала трудности у программистов )
  • ves2010
    28 июня 2017, 15:44
    в с++ есть функция для этого… задаешь число знаков после запятой и получаешь нужный резалт...
    msdn.microsoft.com/ru-ru/library/ms131275(v=vs.110).aspx
  • Karim
    28 июня 2017, 15:44
    Ну раз машина не знает, сколько в цене знаков после запятой, то нужно это указывать самому. Тогда и проблем не будет.
    Акция, насколько я понимаю, описана классом. Ну так введите параметр — «разрядность».
  • Как изящно выйти из ситуации?
    дать взятку программисту
    или чего-нибудь ещё… покрепче… дать…
    • Йоганн
      29 июня 2017, 02:09
      Speculator2016, пиздюлей ему дать…
  • Quant-Invest
    28 июня 2017, 15:52
    храните как int + храните масштаб(INT)
  • Чарльз Маккей
    28 июня 2017, 15:57
    Преобразовать в string, найти первое вхождение патерна '99' или '00', обрезать, применить функцию что-то типа: if '499' then '5'. Объединить. Работает в 4-6 раз быстрее чем при округлении.
    • Coder
      28 июня 2017, 16:04
      MyKey, что за бред?
      • Чарльз Маккей
        28 июня 2017, 16:18
        Coder, по существу есть что-нибудь? Если нет, в жопу иди.
        • Vitty
          28 июня 2017, 16:45
          MyKey, по существу можно только у виска покрутить. и в шею таких программистов гнать
          • Чарльз Маккей
            28 июня 2017, 17:01
            Vitty, гони. У тебя же много рабочих из деревни. Я то тут ни на кого не работаю. Это был бесплатный совет. Мне ваша теория и высеры не нужны, я уже наобщался с еб*нутыми IT'шниками.
            • Vitty
              28 июня 2017, 17:18
              MyKey, совет насколько бесплатный, настолько и безграмотный. ну и да, с воспитанием у вас так же плохо, как и с познаниями в программировании.
              • Чарльз Маккей
                28 июня 2017, 17:22
                Vitty, откуда вы знаете что у меня все плохо? Я же не предлагаю данные переформатировать ни на пути в БД, ни из БД; ковырять базу. А тем более в вебе использовать c++. Вы лучше за собой последите и фактами давайте общаться. Ваше личное мнение без них это просто высер. Я это уже писал, вы с первого раза не понимаете.
    • Андрей К
      30 июня 2017, 00:42
      MyKey, 
      Работает в 4-6 раз быстрее чем при округлении
      как вы это померили? ассемблерных инструкций в вашем решении гораздо больше
      • Чарльз Маккей
        30 июня 2017, 13:07
        Андрей К, а что, все инструкции неожиданно стали исполняться с одной скоростью?
  • vfreeman
    28 июня 2017, 16:00
    а программер что-нибудь слышал про шаг цены актива? по нему пусть и округляет
  • EZ
    28 июня 2017, 16:02
    число может храниться в любом виде, важно как его отображать — а это полностью во власти вашего программиста.
  • Холодный холод
    28 июня 2017, 16:03
    Для каждого инструмента хранить кол-во знаков после запятой, вроде иначе никак.
  • evgen000
    28 июня 2017, 16:06
    Собрали мы учёный совет. начали думать. Несколько дней думали, так и не нашли решения.
    Смотреть в сторону целочисленного деления (выделения целой части).

  • baron_samedi
    28 июня 2017, 16:14
    if( price<0,01 ){price=price *1000;} может так обойти?
  • Roman Ivanov
    28 июня 2017, 16:18
    Округлять стандартно до 5 или даже 7 знаков. В данном примере получится 56,45.

  • Coder
    28 июня 2017, 16:18
    Если цена хранится на стороне сервера в БД, то там тип Decimal отлично справится. При выборке из БД, для отображения на странице можно передавать сразу строковое значение (select string(<priceFieldName>)), чтобы не дать скрипту испохабить значение.
  • Илья
    28 июня 2017, 16:18
    Проблема в том, что число знаков после запятой может быть и 5 (для некоторых акций).

    Ну так и округляйте до 5 знаков. При этом варианты с числом знаков 4, 3,… тоже придут в норму. Например, 56,449999999999996 округлится до 56,45000. Если требуется отображать именно 56,45, то придется число знаков для каждого типа хранить.

    P.s. Или изначально хранить числа в строках.

    P.p.s. Максимум знаков после точки 5? Тогда можно умножать на 10000 и хранить в виде целых чисел.
  • day0markets.ru
    28 июня 2017, 16:22

    считаешь % до которого хочешь округлить. Например, это 0,01%. Берешь цену актива, считаешь этот процент. Например цена 100, тогда шаг при заданной точности 0,01. 

    Дальше считаешь число цифр после запятой. В питоне, например это можно сделать так, если наше число точности n. 

    str(n).split(',')[-1].count('0')+1

    или лучше +2 с запасом. 

     

  • Алексей
    28 июня 2017, 16:23
    несколько вариантов:
    1. округлять по минимальному шагу цены для фьючерсов самое оно.
    2. так же есть параметр «точность», показывает сколько знаков после запятой используется в инструменте.

    не знаю как с буржуйским рынками а с нашими всё прекрасно округляется и ничего лишнего не рисуется.

    программист скорей всего ваш, изначально этот момент не продумал, а теперь лень все формы переделывать.
  • Toras
    28 июня 2017, 16:23
    Любое нецелое число можно представить дробью https://ru.wikipedia.org/wiki/%D0%94%D1%80%D0%BE%D0%B1%D1%8C_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)
    Правда придется хранить 2 числа (числитель и знаменатель), но зато не будет копиться ошибка при вычислениях  - все операции проводите с дробью, пользователю отображаете округленный результат.
    • Пафос Респектыч
      28 июня 2017, 17:00
      Toras, любое? Даже пи? )))

      • sortarray sortarray
        28 июня 2017, 17:14
        Zweroboi, А почему нет?
        • Пафос Респектыч
          28 июня 2017, 17:18
          sortarray sortarray, по определению. Число пи представляется не дробью, а только и исключительно греческой буковкой. По крайней мере, в мирное время
  • Вато Геворгардзе
    28 июня 2017, 16:26
    А что за язык такой, не увидел в описании?
  • mamont
    28 июня 2017, 16:27
    Какие препараты употребляет твой прогрммист?
  • Александр Минин
    28 июня 2017, 16:30
    Есть фильмец про это и книжка «Стальная крыса» там рассказывается что на этом банки делают огромные деньги, на вот этих тысячных и миллионных после запятой ))
  • Vladimir K
    28 июня 2017, 16:44
    Можно считать сколько знаков, кроме нулей в начале числа можно отображать — например, 4 знака:
    56.45 (4 знака, в начале числа нет нулей)
    0.001655 (3 нуля в начале числа, дальше 4 знака после нулей)
  • MadQuant
    28 июня 2017, 16:49
    Кстати, а чем sprintf('%.10g', PX), например, не устраивает? Кажись, будет делать ровно то, что надо, нет?
  • iddqd3n
    28 июня 2017, 16:58
    Жжоте. Вариантов тьма, я думаю, даже нагуглить легко. Если ЯП обычный, без изысков.
  • redtiger8
    28 июня 2017, 17:05
    хранить как longint + разрядность. так цена 54,55 будет храниться как 5455 и 2, что означает 5455/(10^2). а цена 0.01655 как 1655 и 5 (т.е. 1655/(10^5))
  • croc
    28 июня 2017, 17:10
    Проблема какая-то надуманная. Решить е1 можно десятком способов от использования правильного типа (мы же не знаем на каком языке вы там «ваяете»), использование сторонних библиотек для js https://mikemcl.github.io/decimal.js/ , хранение данных в виде строки (что у вас за БД?),  преобразование до целого числа (допустим умножение на миллион) при отображении деление и отбрасывание нулей после запятой… и еще дальше можно развивать фантазию…
  • Валентин
    28 июня 2017, 17:19
    Тимофей, давайте сделаем смартлаб open source.
  • ______1_____
    28 июня 2017, 17:20
    Тимофей, Вы решили детской задачкой сделать перепись программистов на смартлабе? Не верю вам, что программист не смог сделать.
    • Алексей
      28 июня 2017, 20:52
      Электромонтёр, я думаю это Тимофей коде своего так троллит :-)
  • fsb4000
    28 июня 2017, 17:20
    Используй целые числа и отдельно рисуй запятую
  • o|O
    28 июня 2017, 17:30

    Изящно все дробные числа хранить как целые, плюс в отдельном поле хранить точность.

    То есть 56,45 хранить как 5645 и рядом число 2. Отображать ессно как 56,45 везде.

  • Vadim S
    28 июня 2017, 18:03
    Хранить данные не в формате float а decimal с нужной разрядностью (6 или 7 знаков после запятой). А уже при отображение на сайте обрезать не значающиеся  нули после запятой. 
    Тип данных float не предназначен для финансовых расчетов.
  • Йоганн
    28 июня 2017, 18:12
    Проблема в том, что число знаков после запятой может быть и 5 (для некоторых акций).
    Поэтому просто округлить все числа до 2 знаков после запятой не получится.
    Как изящно выйти из ситуации?

    Все просто.
    Если в некоторых акциях до 5-ти знаков после запятой, то и округляйте до пятого знака. Остальные сами округлятся.

     56,449999999999996 =  56,44999 +0.00001 = 56,45

    Либо до 8-го… результат будет тот же. А программист какбэ удивляет…
  • Вадим
    28 июня 2017, 18:15


  • Bob Natural
    28 июня 2017, 18:16
    Короче. Как программист программисту, есть два способа:
    1) Использовать тип Decimal, Money, Короче тот который использует для хранения BCD формат.
    2) Для каждого инструмента ввести хранить шаг цены — для всех валют обычно 4 знака, бонды и акции — обычно 6. 
  • anektar
    28 июня 2017, 18:50
    Если бы программисты строили тюрьму:

    КАЖДЫЙ ДЕНЬ В ТЮРЬМУ ЗАВОЗЯТ -10 ЗАКЛЮЧЕННЫХ
    ПРИ НЕХВАТКЕ ЗАКЛЮЧЕННЫХ — ПРОИСХОДИТ ОТКАТ К СОСТОЯНИЮ В ПРОШЛОМ МЕСЯЦЕ
    ЗЕК-ВЕТЕРАН, ПОЛУЧИВШИЙ ТАКИМ ОБРАЗОМ 50 ХОДОК, ТРАНСФОРМИРУЕТСЯ В ОФИЦЕРА.
    ЕСЛИ ОФИЦЕРОВ БОЛЬШЕ, ЧЕМ ЗЕКОВ, ТО ВЕСЬ ПЕРСОНАЛ СТАНОВИТСЯ ЗАКЛЮЧЕННЫМИ
  • ch5oh
    28 июня 2017, 19:41

    У Вас ведь есть инфа по всем акциям с указанием шага цены?

    Перед выводом округлять до шага цены.

    Например, ШЦ = 0.01 --> выводить с точностью до 2-х знаков.

    Если ШЦ = 0.0005 --> выводить с точностью до 4-х знаков.

    Ещё в сишарп отлично работает что-то типа:

    double roundedPx = PriceStep * Math.Round(px / PriceStep);

    После такого преобразования подобные проблемы точности выравниваются.

  •  кажись понятно почему бардак в медицине  …
  • Александр М
    28 июня 2017, 20:42
    Вот вы все смеетесь, а в квике немного другая проблема, но тоже с округлением, не везде решена — в «состоянии счета» «балансовая цена» нифига не округляется. Но вопрос, само собой, выеденного яйца не стоит — количество знаков в цене конкретной бумаги заранее известно, и даже если не известно — можно предположить, что не больше 5.
  • Профиль удален
    29 июня 2017, 01:57
    Найти нормального прогера.
  • SciFi
    29 июня 2017, 09:17
    Тимофей, эту задачу должен решать разработчик а не ты. Если не может — найти другого. Все задачи решаемые! Например, можно хранить цену и точность цены. Затем имея точность ява скриптом на месте делать цифру нужную, конвертировать в строку и показывать.
  • Cristopher Robin
    29 июня 2017, 10:37
    Дели М на 10 Е раз, будет ровно то, что ты хочешь. Если бы вопрос стоял, как получить результат быстрее всего, коментариев тут было бы еще больше. Но поскольку для тебя скорость не важна, все заметно упрощается.
  • ZVV
    29 июня 2017, 15:48
    Мдаа, почитал советы и понял, пока такие советчики есть, работы у меня всегда будет много :-) Лишь пара норм советов была.Явно же написали суть проблемы, даже читать ТЗ не могут правильно. Чего только не насоветовали и стринги обрезать и пользоваться встроенными средствами С для округления, нюню))) Большая половина не работала никогда с котировками в онлайне, к примеру с Финама или ЯхуФинанса, повеселились бы.Допустим число требует округления до 2 знаков после запятой:
    1. На входе 0,314, округляем до двух, получаем 0,31. Ура, Круто. А если шаг торгов 0,05? :-) Это касается и любителя предлагать printf("%.2f", num); — и типо все номано будет :-) Любитель Оракла, округли 0,359 до двух разрядов мега средствами если шаг 0,05 и он еще и варьируется ;-)
    2. Для любителя стрингов — мелькал тут, а проделай ка такую операцию хотя бы с одной акцией как ты советовал, если при считывании Стринга в дабл ты получить можешь для одного SECCODE 127, ;127,1; 127,11 ;-)
    3. Можно намоделировать массу примеров когда позиция, к примеру тейк профит  будет при разных вариациях математического или бухгалтерского округления выдавать «шляпу».
     Сам недавно решал эту проблему. Стандартные округления тут не подойдут, потому как помимо количества знаков после запятой есть еще и шаг торговли а он может быть для одного количества после запятой разным, поэтому формулы тут нет. И нагуглить «легко» не получится, т.к. это округление специфичное. Поэтому писаки сверху пальцем в небо тычут, тк результатом округления может стать х, ххх1 что не будет в некоторых случаях удовлетворять шагу торгов либо x,xxx5, что не позволит тебе закрыть позицию там где бы ты хотел. Поэтому, все советы которые предлагают для старта брать число СЖИГАЙ, по числу тут ничего не поймешь, для старта надо брать код бумаги.
    1. Необходимо формировать массив (к примеру) по бумагам, загрузить его легко, в Квике есть к примеру текущая таблица параметров содержащая, Код площадки, Код бумаги, количество знаков после запятой, шаг. Вот такой вот вид у нее:+МосЭнерго,TQBR,MSNG,,52848350,,2.3120,,,,,0.0000,0.0000,,,2079,,,1000,,,AGRO-гдр,TQBR,AGRO,,17453854,,610,,,,,0,0,,,439,,,1,,,Polymetal,TQBR,POLY,,38150043,,728.5,,,,,0.0,0.0,,,1681,,,1,,, Далее делай с ней что хочешь, парси а потом  хош в массив загрузи и поиском по нему бегай, хош бегай поиском сразу по файлу(это нехорошо).2. Пишите функцию которой отправляете Площадку, Код бумаги, число а она  возвращает число необходимое для подстановки по параметрам из массива.  Пишется все за один рабочий день, два часа кода, 6 часов тестов :-). Можно и без площадки, я передаю ее на всякий случай, мало ли SECCODE совпадет с каким то на амер бирже. У меня ежесекундно тащатся порядка 120 инструментов, на каждом по 3 таймфрейма (итого 360 файлов), поиск и подстановка нужных чисел занимает для всей этой фермы секунды (использую массив). 2 ядра на сервере не быстрых и 2 Гб оперативки, диски обычные.
     PS. Привет ребятам с Финама отвечающим за котировки. Откройте хотя бы один день то что вы выгружаете по Татнефти.Но спасибо Вам за информацию :-) И за знания которые пришлось приобрести. Что делать с программистом я не знаю, но совета что делать с ним и не спрашивали.
  • Изя 3%
    29 июня 2017, 23:02

    Возможно ты его не так уговариваешь. намекни что за такое и уволить бездельника можно! )

    Кстати может это знак что нужно продавать а не покупать? )

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн