Идентификация нового открытого ордера с последующий задачей.

 

Прошу помощи. Как можно это сделать ? Идентификация каждого нового открытого ордера, с последующий задачей на 1-н раз,именно для этого ордера .И так до бесконечности,для каждого вновь открытого ордера.

Всем Спасибо кто поможет в этом вопросе .

 
перефразируйте вопрос.
 

Смотрим https://docs.mql4.com/ru/trading/OrderSend

Основная функция, используемая для открытия позиции или установки отложенного ордера.
Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().

И так - если ордер создан, то у нас есть его тикет. Все что нужно - после OrderSend посмотреть что возвратили и если !=-1 - доделать все что надо.

 

1.Моментальное определение вновь открывшегося торгового(не отложеных ордеров) ордера (Если система определила ордер который рание не был открыт . то идет продолжение под номером 2 )

2. Выполняеться какая то задача, всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер, система вновь действует с пункта 1 по пункт 2 .

 
semiromid:

1.Моментальное определение вновь открывшегося торгового(не отложеных ордеров) ордера (Если система определила ордер который рание не был открыт . то идет продолжение под номером 2 )

2. Выполняеться какая то задача, всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер, система вновь действует с пункта 1 по пункт 2 .


При открытии ордера создайте дайте некой переменной значение. Это значение будет показывать что действие для ордера еще не выполнялось

При выполнении действия смените значение этой переменной.

 
semiromid:

1.Моментальное определение вновь открывшегося торгового(не отложеных ордеров) ордера (Если система определила ордер который рание не был открыт . то идет продолжение под номером 2 )

2. Выполняеться какая то задача, всего 1-н раз,именно для этого ордера .

После того как еще открылся один ордер, система вновь действует с пункта 1 по пункт 2 .


1. создаем исходный список открытых позиций (при запуске)

2. просматриваем открытые позиции и сравниваем их со списком.

3. если есть новый ордер(нет такого в списке), делаем с ним все, что хотели и довавляем его в исходный список.

4. возвращаемся к п.2

 
RAVen_:


1. создаем исходный список открытых позиций (при запуске)

2. просматриваем открытые позиции и сравниваем их со списком.

3. если есть новый ордер(нет такого в списке), делаем с ним все, что хотели и довавляем его в исходный список.

4. возвращаемся к п.2


Это в масиве лучше сделать? 1. создаем исходный список открытых позиций (при запуске)
 

Помогите подправить

Спасибо )

extern int MagicNumber = 0;

int start()
{
static bool first = true;
static int pre_OrdersTotal = 0;
int _OrdersTotal = 0, now_OrdersTotal = 0, _GetLastError = 0;

while ( !IsStopped() )
{
_OrdersTotal = OrdersTotal();
now_OrdersTotal = 0;

for ( int z = _OrdersTotal - 1; z >= 0; z -- )
{
if ( !OrderSelect( z, SELECT_BY_POS ) )
{
_GetLastError = GetLastError();
Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}
// Считаем количество ордеров по текущему символу и с заданным MagicNumber
if ( OrderMagicNumber() == MagicNumber &&
OrderSymbol() == Symbol() ) now_OrdersTotal ++;
}

// Выводим информацию только если это не первый запуск эксперта
if ( !first )
{
// Сравниваем количество позиций на предидущем тике с текущим количеством
// Если оно изменилось, выводим сообщение
if ( now_OrdersTotal > pre_OrdersTotal )
Alert( Symbol(), ": количество позиций с MagicNumber ", MagicNumber,
" увеличилось! Было - ", pre_OrdersTotal, ", стало - ", now_OrdersTotal );

if ( now_OrdersTotal < pre_OrdersTotal )
Alert( Symbol(), ": количество позиций с MagicNumber ", MagicNumber,
" уменьшилось! Было - ", pre_OrdersTotal, ", стало - ", now_OrdersTotal );
}
else
{
first = false;
}
//---- Запоминаем количество позиций
pre_OrdersTotal = now_OrdersTotal;

Sleep(100);
}

return(0);
}
//----

 
Может сделать обработку ордера сразу же после открытия, тогда и искать ничего не надо будет.
 
semiromid:

Помогите подправить

Спасибо )


А зацикливать-то зачем? Функция start() и так на каждом тике выполняется
 
Vinin:

А зацикливать-то зачем? Функция start() и так на каждом тике выполняется

Так вообще должно с более большой точностью выполняться, независимо от тиков.
Причина обращения: