Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1060

 
abeiks:

Здесь вы можете найти часть ответов: https://www.mql5.com/ru/forum/131859


1. Спасибо, но не нашел ответа. Там есть функция SetOrder(), но это тоже самое что OrderSend() по сути. Одновременно открыть несколько ордеров этой функцией нельзя.
 
smart_man:
1. Спасибо, но не нашел ответа. Там есть функция SetOrder(), но это тоже самое что OrderSend() по сути. Одновременно открыть несколько ордеров этой функцией нельзя.

Одновременно открыть несколько ордеров никакой функцией нельзя, это в принципе нельзя сделать, так как сервер исполняет приказы по очереди, а не параллельно, причём в очереди приказы от всех клиентов, а не только ваши.

В лучшем случае ордера откроются с разницей в несколько миллисекунд один за другим, но это в случае, если найдётся спрос на рынке.

 
evillive:

Одновременно открыть несколько ордеров никакой функцией нельзя, это в принципе нельзя сделать, так как сервер исполняет приказы по очереди, а не параллельно, причём в очереди приказы от всех клиентов, а не только ваши.

В лучшем случае ордера откроются с разницей в несколько миллисекунд один за другим, но это в случае, если найдётся спрос на рынке.

Вот, видно что вы поняли суть проблемы! Мне в голову только одно пришло, если открывать эти ордера отложенным способом. Тогда возможно одновременно их открыть?
 
smart_man:
Вот, видно что вы поняли суть проблемы! Мне в голову только одно пришло, если открывать эти ордера отложенным способом. Тогда возможно одновременно их открыть?
Нет, сервер всё равно исполняет их по очереди, хоть отложенные, хоть по рынку.
 
evillive:
Нет, сервер всё равно исполняет их по очереди, хоть отложенные, хоть по рынку.

1. Тогда вопрос про "одновременность" снимается. Тогда в этом аспекте разницы между открытием рыночного или отложенного нет.

2. Правильно ли на каждом тике вручную отслеживать закрылся ли ордер, чтобы поймать момент этого самого закрытия (по TP или SL) или есть готовые функции?

 
smart_man:

1. Тогда вопрос про "одновременность" снимается. Тогда в этом аспекте разницы между открытием рыночного или отложенного нет.

2. Правильно ли на каждом тике вручную отслеживать закрылся ли ордер, чтобы поймать момент этого самого закрытия (по TP или SL) или есть готовые функции?

2. Тщательно посмотрите: https://www.mql5.com/ru/forum/131859

isCloseLastPosByStop();
isCloseLastPosByTake();
 
Что означает эта строчка: PostMessageA(hwnd, WM_COMMAND, 0x822c, 0)? Не как не могу найти предназначение.
 

Подскажите какой ДЦ выбрать? Интересует как проблемы с вводом/выводом средств, так и надежность котировок. Например результаты тестирования с сервера альпари сильно отличаются от metaquotes в пользу последнего. Параметры свечей на разных серверах имеют разные значения итп.

Интересно что альпари и форекс клубу на прошлой неделе не выдали лицензии, прошли обыски у телетрейд. Как дальше жить? 

 

Всем привет. Хочу сделать полностью автономную пользовательскую функцию. С эмитацией OnInit() проблем нет. Сама пользовательская функция выполняется по определению. А вот с псевдоOnDeinit(const int  reason) проблемы.

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

В зацикленной программе признаком завершения программы может быть  IsStopped()==true. В незацикленной всегда=0. Не универсальный способ.

Пробовал вызывать из OnTick() функцию  UninitializeReason(). Результат-всегда = 0, хотя логично было бы сделать, что бы на последнем проходе она давала значение причины предстоящей деинициализации.

Получается, что функция  UninitializeReason() урезанная, и может использоваться только внутри OnDeinit(const int  reason).

Можно все пользовательские функции дополнительно прописывать в функции деинициализации  OnDeinit(const int reason) и одним из обязательных параметров, передаваимых в пользовательскую функцию, сделать  reason-причина деинициализации

 Наличие ненулевого значения, переданного из OnDeinit(const int  reason) в пользовательскую функцию будет являться признаком завершения работы основной программы.

 Возможно есть другие способы и нужные для этой цели системные переменные. Пишите. Делитесь опытом. Если не жалко. ;-)

 
kosmos0975:

Пробовал вызывать из OnTick() функцию  UninitializeReason(). Результат-всегда = 0, хотя логично было бы сделать, что бы на последнем проходе она давала значение причины предстоящей деинициализации.

А как может быть по-другому? Если между тиками ты закрываешь терминал, то OnTick() не будет выполнен и соответственно не будет обработано событие которое вызывает функцию UninitializeReason().