В глобальных переменных клиентского терминала можно хранить 8 байт любой информации
Используйте, например, такой юнион
union UDouble { double dvalue; ulong uvalue; }; ... UDouble d; d.uvalue=ChartID(); GlobalVariableSet(name,d.dvalue); ... d.dvalue=GlobalVariableGet(name); Print(d.uvalue);
Этот приём обсуждался неоднократно. И даже в MT4
Вдогонку еще один момент. Глобальные переменные обычно используют для сохранения данных между запусками программ. К таким случаям относится перезагрузка терминала. После перезагрузки терминала идентификаторы чартов будут уже другими, не теми, которые записаны в глобальных переменных. Таким образом, для рассматриваемой ситуации сохранение данных в глобальных переменных является ошибочным подходом.
Разве??? Я не особо использую ChartID() но пытался это использовать в качестве магика и не замечал изменения.
В глобальных переменных клиентского терминала можно хранить 8 байт любой информации
Используйте, например, такой юнион
Этот приём обсуждался неоднократно. И даже в MT4
Спасибо за решение. Я попробую. Надеюсь, это сработает. Если глобальная переменная хранит 8 байт, то каков размер LONG? Я думаю, это тоже 8 байт.
Если глобальная переменная хранит 8 байт, то каков размер LONG? Я думаю, это тоже 8 байт.
Да
Спасибо за решение. Я попробую. Надеюсь, это сработает. Если глобальная переменная хранит 8 байт, то каков размер LONG? Я думаю, это тоже 8 байт.
Можно просто посмотреть
Тип | Размер в байтах | Минимальное значение | Максимальное значение | Аналог в языке С++ |
1 | -128 | 127 | char | |
1 | 0 | 255 | unsigned char, BYTE | |
1 | 0(false) | 1(true) | bool | |
2 | -32 768 | 32 767 | short, wchar_t | |
2 | 0 | 65 535 | unsigned short, WORD | |
4 | - 2 147 483 648 | 2 147 483 647 | int | |
4 | 0 | 4 294 967 295 | unsigned int, DWORD | |
4 | -1 | 16 777 215 | int, COLORREF | |
8 | -9 223 372 036 854 775 808 | 9 223 372 036 854 775 807 | __int64 | |
8 | 0 | 18 446 744 073 709 551 615 | unsigned __int64 | |
8 | 0 (1970.01.01 0:00:00) | 32 535 244 799 (3000.12.31 23:59:59) | __time64_t |
![Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long](https://c.mql5.com/36/40/dokumentaciya-po-mql5-osnovi-yazika__3.png)
- www.mql5.com
Разве??? Я не особо использую ChartID() но пытался это использовать в качестве магика и не замечал изменения.
Хм, действительно, не меняется. Но я точно помню, что, как только ввели его (ChartID()), то менялся. С тех пор уже не проверял. Видимо, терминал стал запоминать сгенерированные ID.
Подскажите, пожалуйста, почему это сработало с объединением, а не с приведением типов?
double не может поместить в себя значение 18 446 744 073 709 551 615
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я пробовал это:
И вывод какой странный.
Я видел, что DBL_MAX больше LONG_MAX. Следовательно, мы можем хранить значение LONG в типе DOUBLE. Но то, что я вижу, не подтверждает мою теорию.
Пожалуйста, дайте мне знать, почему это происходит, и что я могу сделать, чтобы использовать глобальные переменные для хранения длинных значений.