Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2447

 
Vitaly Muzichenko #:

Вопрос в том, что нельзя допустить работы 2-х и более терминалов одновременно.

В приоритете только первый запущенный, вот и нужно решение как определить, что первым запущен именно терминал "А", а не "В"

если робот свой - самое простое это абонировать или поднять внешний сервис (а-ля Redis) с доступом по WebRequest. 

это просто из типичных задача для которых они сделаны. "захватить ресурс и периодично подтверждать владение"

 
Maxim Kuznetsov #:

если робот свой - самое простое это абонировать или поднять внешний сервис (а-ля Redis) с доступом по WebRequest. 

это просто из типичных задача для которых они сделаны. "захватить ресурс и периодично подтверждать владение"

И чем это поможет идентифицировать какая копия терминала запущена?

 

Виталий, а если читать, а затем писать дату открытия и дескриптор окна открытого терминала в файл в общей папке Common при открытии терминала? Там узнавать, кто первый.

ПС. Вообще-то Винда помнит и время запуска приложения, можно и без файла обойтись.

 
Vitaly Muzichenko #:

И чем это поможет идентифицировать какая копия терминала запущена?

а как ты сам копии различаешь/именуешь ?

терминал на одной VDS, на второй и дома..и кто из них "номер один" ? 

--

обычно разруливают чтобы торговать мог только один. Кто первым захватил ресурс тот и торгует. К следующему ресурс перейдёт после освобождения или отсутствия_hb_владельца за время T

 

Подскажите, пожалуйста, с какой стороны подойти к решению такой задачи:

написан советник, открывающий сделки на пробитии фракталов; каким образом прописать условие, при котором допускается открытие позиций только по тем фракталам, уровень которых цена не достигала заданное количество свечей (те, грубо говоря, чистый экран слева от рабочего фрактала)? 

На рисунке: красные стрелки - фракталы, которые, в случае реализации задумки должны, быть отработаны в случае отсутствия цены в синих областях.  

Файлы:
dfq527yi3k.jpg  83 kb
 
Alex8888888888 #:

 уровень которых цена не достигала заданное количество свечей

Если номер свечи фрактала будет равен значению, которая вернёт функция iHighest. Это если просто. Но код будет тяжеловатый

 
Aleksei Stepanenko #:

Если номер свечи фрактала будет равен значению, которая вернёт функция iHighest. Это если просто. Но код будет тяжеловатый

Понял. Спасибо. Буду пробовать.
 
Maxim Kuznetsov #:

а как ты сам копии различаешь/именуешь ?

терминал на одной VDS, на второй и дома..и кто из них "номер один" ? 

--

обычно разруливают чтобы торговать мог только один. Кто первым захватил ресурс тот и торгует. К следующему ресурс перейдёт после освобождения или отсутствия_hb_владельца за время T

По материнской плате, если на разных машинах.

Если машина одна - то это и есть проблема, которую нужно сейчас решить. Какой первый терминал был запущен - с того и работаем, остальные в блокировку.

Но как узнать, какая копия запущена первая?

 
Vitaly Muzichenko #:

По материнской плате, если на разных машинах.

Если машина одна - то это и есть проблема, которую нужно сейчас решить. Какой первый терминал был запущен - с того и работаем, остальные в блокировку.

Но как узнать, какая копия запущена первая?

Прописать в советнике создание файла, если его нет, а если файл уже есть - ExpertRemove();

 

Время запуска терминала можно узнать, это не решает проблему? Пример на другом языке, можно попытаться переложить на MQL:

Set objService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\CIMV2")
For Each objProc In objService.ExecQuery("SELECT * FROM Win32_Process WHERE Name='terminal.exe'")
        WScript.Echo objProc.Caption 'краткое описание объекта
        WScript.Echo objProc.CommandLine 'командная строка запуска процесса, если таковая есть
        WScript.Echo objProc.CreationDate 'дата и время начала выполнения процесса
        WScript.Echo objProc.CSName 'имя компьютера
        WScript.Echo objProc.ExecutablePath 'полный путь к исполняемому файлу процесса
        WScript.Echo objProc.ParentProcessId 'PID родительского процесса
        WScript.Echo objProc.ProcessId 'PID процесса
Next