finsight / QUIKSharp

QUIK# (QUIK Sharp) is the QUIK Lua interface ported to .NET.
Other
232 stars 135 forks source link

Объем последней сделки в Int32 маловат #353

Open Igor-san opened 7 months ago

Igor-san commented 7 months ago

Столкнулся тут с LQDT: Could not convert to integer: 2595916425. Path 'data[2460].volume', line 1, position 542940

В Candle пришлось ставить public long Volume { get; set; }

buybackoff commented 6 months ago

Забавно, 10 лет назад у Газпрома столько акций наверное не было. Что за инструмент, позвольте узнать? Да, long абсолютно верное решение, но раньше и подумать о таких объёмах нельзя было. Крипта?

buybackoff commented 6 months ago

А, сорри, LQDT... Не знаю детали.

Но в целом "оптимизации" типа int меньше long не имеют смысла, можно заменить на long всё, где имеет смысл. Например если бы торговали Эфиром через Wei как единицу измерения. Вообще можно сразу decimal, чтобы реально wei поддерживать и быть future-proof.

buybackoff commented 6 months ago

@Pr0phet1c Привет!

Давно я тут ничего не видел и тем более не писал... Я думаю decimal реально хороший вариант для всех числовых значений. Производельность не важна на таком уровне. С decimal все косяки будут за пределами библиотеки. Это самый широкий тип без потери точности в dotnet. ВВП мира можно записать в decimal в корейских вонах много раз неверное.

Pr0phet1c commented 6 months ago

@buybackoff привет. Тут ничего сильно важного и не происходило. В основном мелкие обновления. на счет decimal, скорее всего ты прав. Но это может оказаться breaking changes. Может стоит ограничиться только параметром Volume пока? Это конечно тоже многим может "поломать" работоспособность, но исправлять тип данных для одного параметра все же значительно проще, чем всего подряд

buybackoff commented 6 months ago

Может стоит ограничиться только параметром Volume пока?

Да, по мере надобности. Из моего текста наврное могло показаться, что я предлагал всё заменить. Нет, только там, где есть проблемы.

breaking changes

Простой cast в int не так уж и сложно.

Выбор не большой: или long, или decimal; или double. Decimal вмещает в себя long: это int96 + scale. Double не точный. Decimal лучше всего.