Особенности языка mql5, тонкости и приёмы работы - страница 239

 
Anatoli Kazharski #:

Какими способоми можно узнать, есть ли у символа данные, чтобы не оставлять его в окне [Обзор Рынка], если их нет?

SymbolInfoTick.

 
fxsaber #:

SymbolInfoTick.

Я пробовал этот вариант. К сожалению, он не походит. Если символ добавляется в окно [Обзор Рынка] в первый раз, то по нему ещё нет данных и SymbolInfoTick возвращает нулевые значения.

Я также протестировал функции CopyXXX, но у них нет таймаута и процесс ожидания данных от сервера длится примерно 45 секунд, что слишком долго. 

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


//---

У таких символов нет данных на сервере и нужен способ определить их, чтобы не добавлять в окно [Обзор Рынка] или удалить их из списка, если они есть.

P.S. Возможно, есть какой-то способ снять блокировку на удаление символов из списка в окне [Обзор Рынка]?

 
Anatoli Kazharski #:

Я пробовал этот вариант. К сожалению, он не походит. Если символ добавляется в окно [Обзор Рынка] в первый раз, то по нему ещё нет данных и SymbolInfoTick возвращает нулевые значения.

Рабочие символы получить элементарно руками.

  1. В пару кликов добавить все символы в Обзор рынка.
  2. Через пару секунд будут получены тики по ним.
  3. Сортировка одним нажатием мыши по времени.
  4. Удаление через клавишу Del одного из хвостов полученного списка.
На все это уйдет до полуминуты.
 
Anatoli Kazharski #:

Я пробовал этот вариант. К сожалению, он не походит. Если символ добавляется в окно [Обзор Рынка] в первый раз, то по нему ещё нет данных и SymbolInfoTick возвращает нулевые значения.

Я также протестировал функции CopyXXX, но у них нет таймаута и процесс ожидания данных от сервера длится примерно 45 секунд, что слишком долго. 

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


//---

У таких символов нет данных на сервере и нужен способ определить их, чтобы не добавлять в окно [Обзор Рынка] или удалить их из списка, если они есть.

P.S. Возможно, есть какой-то способ снять блокировку на удаление символов из списка в окне [Обзор Рынка]?

Я уже лет 6 с этим воюю, и прошу разработчиков навести тут порядок. 

К сожалению эта проблема не решена, и на текущий момент бывают такие ситуации когда при обращении любом к финансовому инструменту в первые, вешается терминал.

 
Anatoli Kazharski #:

Какими способоми можно узнать, есть ли у символа данные, чтобы не оставлять его в окне [Обзор Рынка], если их нет?

Я использую такую проверку в цикле:

Но после этого не получается вручную удалить символы из окна [Обзор Рынка] ни по одному ни все сразу, пока эксперт на графике:


Попробуйте проверить время последней котировки.

SymbolInfoInteger(name, SYMBOL_TIME);

если 0, то данных нет.

Я просто проверил по открытым графикам.

2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) NZDUSD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) USDCAD 2024.01.05 09:38:51
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EURGBP 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) GBPUSD 2024.01.05 09:38:49
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) POZ3 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) EDH4 1970.01.01 00:00:00
2024.01.05 10:38:43.783 !00 (GBPUSD,H1) BRZ3 1970.01.01 00:00:00
 
Можно получить дополнительные данные, переключаясь между серверами. Не знаю, возможно ли это реализовать через код.
 
Nauris Zukas #:
Можно получить дополнительные данные, переключаясь между серверами. Не знаю, возможно ли это реализовать через код.

Если под "между серверами" имеется в виду "между брокерами", то едва ли, разве что попробовать профилями поиграть.

А вот если бы мне реально надо было бы переключаться между разными серверами одного брокера (у Открытия было много, у Финама - два), я бы сделал это через iptables/nftables и свои bash-скрипты. Но тут мне проще, у меня Linux.

 
JRandomTrader #:

Если под "между серверами" имеется в виду "между брокерами"


.

 
Nauris Zukas #:


Да, тут, в принципе, возможно.

Но, поскольку нет возможности из MQL-программы узнать имя и ip сервера, придётся выяснить их вручную, переключая сервера и проверяя, на какой ip идёт соединение.

Далее можно, внося изменения в конфигурацию файрвола, запрещать коннект на какой-то сервер (тут надо пакеты режектить, а не дропать, чтобы избежать таймаута), вынуждая MT переключиться на другой.

Опять же, мне под Linux'ом это сделать несложно, но не представляю, как это сделать в винде.

 
Alexey Viktorov #:

Попробуйте проверить время последней котировки.

если 0, то данных нет.

Я просто проверил по открытым графикам.

Это также относится к подобному случаю:

Я пробовал этот вариант. К сожалению, он не походит. Если символ добавляется в окно [Обзор Рынка] в первый раз, то по нему ещё нет данных и SymbolInfoTick возвращает нулевые значения.

Если тики приходят редко, то все такие символы будут исключены. 

fxsaber #:

Рабочие символы получить элементарно руками.

  1. В пару кликов добавить все символы в Обзор рынка.
  2. Через пару секунд будут получены тики по ним.
  3. Сортировка одним нажатием мыши по времени.
  4. Удаление через клавишу Del одного из хвостов полученного списка.
На все это уйдет до полуминуты.

Нет. Нужен полный автомат.

Vladimir Pastushak #:

Я уже лет 6 с этим воюю, и прошу разработчиков навести тут порядок. 

К сожалению эта проблема не решена, и на текущий момент бывают такие ситуации когда при обращении любом к финансовому инструменту в первые, вешается терминал.

 Заметил это только при вызове следующих функций:

  • Bars()
  • iBars()
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT)

//--- 

Разработчикам терминала:

1. Исключить возможность добавления на торговом сервере символов без данных.

2. Дать возможность отключать блокировку удаления символов из окна [Обзор Рынка] или исправить, если это баг. Сейчас это можно сделать только перезапустив терминал.

3. Для функций типа CopyXXX добавить дополнительный необязательный параметр для установки таймаута (максимальное время ожидания данных от сервера).

Сейчас не могу воспроизвести это. Пока работает без задержки. Но похоже в каких-то случаях такое может быть.

4. Исправить баг с бесконечным ожиданием при использовании функций Bars(), iBars(), SeriesInfoInteger(symbol, PERIOD_M1, SERIES_BARS_COUNT) в случаях, когда:

  • нет соединения с сервером
  • нет данных по символу

Попытка удалить программу с графика может вызвать зависание терминала на несколько минут.

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

  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_FIRSTDATE)
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_LASTBAR_DATE)
  • SeriesInfoInteger(symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE)

В этом случае также можно добавить дополнительный необязательный параметр для установки таймаута (максимальное время ожидания данных от сервера).

//---

P.S. Я пока остановился на варианте с проверкой на наличие данных с функциями типа CopyXXX. Но буду наблюдать, проявится ли снова описанная выше проблема.