Дабл обрезает данные, поэтому напрямую лонг в дабл нельзя. Но и тот и тот по 8 байт, значит можно передавать без потерь просто используя дабл как контейнер, что я и сделал в примере.
Андрей, мне непонятен был формат хранения и отображения в GV терминала. Казалось, что покажет ID графика, а показывает 0.
Что-то я замечаю, что обновление библиотеки или ресурсов, подключенных в какой-либо другой скрипт (индикатор) приводит к его (индикатора) перекомпиляции и перезагрузке терминалом. Без спроса! Это баг или фича? P.S. Речь про МТ4.
Ищу существующую GV терминала по имени. Через неё в индикатор передаётся ID графика, на котором работает советник. Индикатор висит на другом символе. Т.е., хочу в индикатор передать ID графика, на котором работает управляющий советник. Ищу так:
вот что мне пишет терминал:
Как только ни пытался считать переменную. И сразу в строку, чтоб просто в журнал вывести, и в переменные различных типов - всё одно. На 2 разница.
Как раз Ваш случай. У даблов гораздо ниже точность в _количестве_ знаков, чем у лонгов. Поэтому вы и получаете такой результат при простом присваивании.
Но Вы можете полностью использовать 64 бита глобальной переменной для хранения _любой_ информации длиной 64 бита (например, коротеньких строчек длиной 8 байт. не говоря уже о лонгах)
Столкнулся со следующей проблемой. После перезапуска терминала индикатор возвращает "странные" значения с другова тайм фрейма при вызове из советника. Советник стоит на М2, данные индикатора берутся с М3. 1) в логах перезапуск терминала в 14:40:
PE014:39:50.524Terminalstopped MD014:40:06.009TerminalMetaTrader 5 Alfa-Forex x64 build 930 started (Альфа-Форекс) II014:40:06.586TerminalOpenCL not found, install the latest OpenCL driver for better performance JO014:40:07.257Expertsexpert FX_Money_Flow_v1_06 (EURUSD,M2) loaded successfully
советник выписывает полученные значения индикатора на последнем и предпоследнем баре:
График М3 при этом открыт, и на нем нанесен индикатор, который все показывает корректно: (разница во времени терминала и логов 5 часов, скриншот относится ко второму перезапуску)
OBJ_LABEL похоже не поддерживает UNICODE в МТ4? Менял значение и программно, и из диалога свойств Label-а: символ вставляется, в самом диалоге виден правильно, но на графике отображается вопросиком (?). Шрифт выбран юникодный, и в диалоге свойств метки он правильно выбран в выпадающем списке со шрифтами.
Как раз Ваш случай. У даблов гораздо ниже точность в _количестве_ знаков, чем у лонгов. Поэтому вы и получаете такой результат при простом присваивании.
Но Вы можете полностью использовать 64 бита глобальной переменной для хранения _любой_ информации длиной 64 бита (например, коротеньких строчек длиной 8 байт. не говоря уже о лонгах)
Объясните, плиз, следующую ситуацию. Есть мультивалютный индюк, значения которого НЕ меняются в зависимости от того, на какой чарт он наброшен - он считает значения по заданным инструментам и с текущим окном никак не связан. На это индюке я вручную наношу объекты - линии поддержки и сопротивления. Теперь фокус: если в окно перетащить из обзора рынка другой инструмент, то внешний вид индюка остается прежним, а линии пропадают. Если вызвать диалог Список объектов, то там эти объекты по-прежнему числятся. Значения конечных точек (даты и значения) остаются прежними (т.е. должны быть видимы на прежних местах) - это и понятно, их никто не менял. Однако линии не видны. Если затем перетащить на окно прежний инструмент, который был там изначально, линии снова становятся видны. В чем проблема?
marketeer: Объясните, плиз, следующую ситуацию. Есть мультивалютный индюк, значения которого НЕ меняются в зависимости от того, на какой чарт он наброшен - он считает значения по заданным инструментам и с текущим окном никак не связан. На это индюке я вручную наношу объекты - линии поддержки и сопротивления. Теперь фокус: если в окно перетащить из обзора рынка другой инструмент, то внешний вид индюка остается прежним, а линии пропадают. Если вызвать диалог Список объектов, то там эти объекты по-прежнему числятся. Значения конечных точек (даты и значения) остаются прежними (т.е. должны быть видимы на прежних местах) - это и понятно, их никто не менял. Однако линии не видны. Если затем перетащить на окно прежний инструмент, который был там изначально, линии снова становятся видны. В чем проблема?
Может разница цен инструментов? Линии же привязываются к координатам время/цена. Время остаётся, а вот цена меняется. Если на EURUSD линия привязана к цене 1.35, то где ж вы её увидите на USDJPY, где цена 101.35 например...
Ну я просто не понимаю что непонятно.
Дабл обрезает данные, поэтому напрямую лонг в дабл нельзя. Но и тот и тот по 8 байт, значит можно передавать без потерь просто используя дабл как контейнер, что я и сделал в примере.
Андрей, мне непонятен был формат хранения и отображения в GV терминала. Казалось, что покажет ID графика, а показывает 0.
в GV будет видно что-то напоминающее мусор по виду, этот "мусор" превратится в ID графика после обратного преобразования.
У дабла свой формат данных, при подсовывании лонга мы кладем на формат дабла и используем его просто как 8 байт памяти.
в GV будет видно что-то напоминающее мусор по виду, этот "мусор" превратится в ID графика после обратного преобразования.
У дабла свой формат данных, при подсовывании лонга мы кладем на формат дабла и используем его просто как 8 байт памяти.
Скорее вопрос:
Ищу существующую GV терминала по имени. Через неё в индикатор передаётся ID графика, на котором работает советник. Индикатор висит на другом символе. Т.е., хочу в индикатор передать ID графика, на котором работает управляющий советник. Ищу так:
вот что мне пишет терминал:
Как только ни пытался считать переменную. И сразу в строку, чтоб просто в журнал вывести, и в переменные различных типов - всё одно. На 2 разница.
Что не так?
Почитайте здесь https://www.mql5.com/ru/docs/basis/types/casting параграф "Приведение данных типа простых структур"
Как раз Ваш случай. У даблов гораздо ниже точность в _количестве_ знаков, чем у лонгов. Поэтому вы и получаете такой результат при простом присваивании.
Но Вы можете полностью использовать 64 бита глобальной переменной для хранения _любой_ информации длиной 64 бита (например, коротеньких строчек длиной 8 байт. не говоря уже о лонгах)
Советник стоит на М2, данные индикатора берутся с М3.
1) в логах перезапуск терминала в 14:40:
MD 0 14:40:06.009 Terminal MetaTrader 5 Alfa-Forex x64 build 930 started (Альфа-Форекс)
II 0 14:40:06.586 Terminal OpenCL not found, install the latest OpenCL driver for better performance
JO 0 14:40:07.257 Experts expert FX_Money_Flow_v1_06 (EURUSD,M2) loaded successfully
RO 0 19:55:28.399 Terminal MetaTrader 5 Alfa-Forex x64 build 930 started (Альфа-Форекс)
OP 0 19:55:28.992 Terminal OpenCL not found, install the latest OpenCL driver for better performance
RD 0 19:55:29.507 Experts expert FX_Money_Flow_v1_07 (EURUSD,M2) loaded successfully
вот только дальше нормально работать он не начинает, все время так:
KF 0 23:59:51.987 FX_Money_Flow_v1_07 (EURUSD,M2) Значение индикатора ТФ1: -1.#QNAN -1.#QNAN
График М3 при этом открыт, и на нем нанесен индикатор, который все показывает корректно:
(разница во времени терминала и логов 5 часов, скриншот относится ко второму перезапуску)
Почитайте здесь https://www.mql5.com/ru/docs/basis/types/casting параграф "Приведение данных типа простых структур"
Как раз Ваш случай. У даблов гораздо ниже точность в _количестве_ знаков, чем у лонгов. Поэтому вы и получаете такой результат при простом присваивании.
Но Вы можете полностью использовать 64 бита глобальной переменной для хранения _любой_ информации длиной 64 бита (например, коротеньких строчек длиной 8 байт. не говоря уже о лонгах)
Объясните, плиз, следующую ситуацию. Есть мультивалютный индюк, значения которого НЕ меняются в зависимости от того, на какой чарт он наброшен - он считает значения по заданным инструментам и с текущим окном никак не связан. На это индюке я вручную наношу объекты - линии поддержки и сопротивления. Теперь фокус: если в окно перетащить из обзора рынка другой инструмент, то внешний вид индюка остается прежним, а линии пропадают. Если вызвать диалог Список объектов, то там эти объекты по-прежнему числятся. Значения конечных точек (даты и значения) остаются прежними (т.е. должны быть видимы на прежних местах) - это и понятно, их никто не менял. Однако линии не видны. Если затем перетащить на окно прежний инструмент, который был там изначально, линии снова становятся видны. В чем проблема?