Можно ли получить список инструментов, по которым открыты графики?

 
Вопрос к профессионалам.
Скрипту надо передать список валютных пар, для которых открыты окна графиков.
Можно ли это сделать?
 
Теоретически - да .
 
Rosh:
Теоретически - да .

Ближе к практике, вероятно, можно зацепиться за функцию
int WindowHandle( string symbol, int timeframe)
Возвращает системный дескриптор окна (window handle), содержащего указанный график. Если график с symbol и timeframe на момент вызова функции не открыт, то возвращается 0.
Если Вы сможете получить список всех валютных пар в терминале (скрипт пробегал на форуме, кажется Komposter его делал, поищите), то набор timeframe'ов тоже фиксированный. Их взаимное произведение в двух вложенных циклах с ненулевыми дескрипторами, сложенными в хэш (без повторов), и даст искомый набор окон графиков (не индикаторов).
 
chv:
Rosh:
Теоретически - да .

Ближе к практике, вероятно, можно зацепиться за функцию
int WindowHandle( string symbol, int timeframe)
Возвращает системный дескриптор окна (window handle), содержащего указанный график. Если график с symbol и timeframe на момент вызова функции не открыт, то возвращается 0.
Если Вы сможете получить список всех валютных пар в терминале (скрипт пробегал на форуме, кажется Komposter его делал, поищите), то набор timeframe'ов тоже фиксированный. Их взаимное произведение в двух вложенных циклах с ненулевыми дескрипторами, сложенными в хэш (без повторов), и даст искомый набор окон графиков (не индикаторов).

chv, спасибо. Это то, что нужно.
 
chv:
Их взаимное произведение в двух вложенных циклах с ненулевыми дескрипторами, сложенными в хэш (без повторов), и даст искомый набор окон графиков (не индикаторов).
Ой, chv, как только я прочитал эту вумную фразу, тут же себя таким тупым почувствовал. Про взаимное произведение вроде как понятно, что-то типа произведения двух множеств. А вот то, что сказано про хэш, для меня темный лес. Буду рад, если сможете уделить время и прояснить.
 
Mathemat писал (а):
Ой, chv, как только я прочитал эту вумную фразу, тут же себя таким тупым почувствовал. Про взаимное произведение вроде как понятно, что-то типа произведения двух множеств. А вот то, что сказано про хэш, для меня темный лес. Буду рад, если сможете уделить время и прояснить.

Есть такой класс в MS .NET (наверняка и в других системах аналоги), называется System.Collections.Hashtable. Он по сути нужен для хранения пар (ключ/значение), что-то типа:
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");
причём значения ключей не повторяются. Можно проверить перед добавлением наличие ключа:
        if (!openWith.ContainsKey("ht"))
        {
            openWith.Add("ht", "hypertrm.exe");
            Console.WriteLine("Value added for key = "ht": {0", openWith["ht"]);
        }
Применительно к озвученной MQL задаче значения (handle) дескрипторов и будут ключами (и значениями тоже), гарантируя их уникальность (отсутствие повторов) в итоговом списке.
Надеюсь, объяснил понятно :)
 
В PERL - массив спец. структуры, состоящий из пар КЛЮЧ_[разделитель]_ЗНАЧЕНИЕ; перебор производится в цикле FOR EACH {...} по хэш-дескриптору (ключу). ИМХО, очень удобная штука. Пожелание: встроить когда-нибудь эту конструкцию в MQL.
 
alexjou:
В PERL - массив спец. структуры, состоящий из пар КЛЮЧ_[разделитель]_ЗНАЧЕНИЕ; перебор производится в цикле FOR EACH {...} по хэш-дескриптору (ключу). ИМХО, очень удобная штука. Пожелание: встроить когда-нибудь эту конструкцию в MQL.

Да, похоже, это общий стандарт для платформ разработки:
            foreach (string sTerminal in m_HostCol)
            {
                runOneTerminal(sTerminal);
            }
 

Ага, спасибо, теперь понятно.

 
Такую функцию можно и самим написать для собственных нужд (в MQL4). Встраивание ее в язык на данный момент мне кажется надуманным, только для крутизны.
 
"Ако някогда..." (Э. Димитров) - "Когда-нибудь..."
Причина обращения: