Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Управляй агентами в профиле. Это просто!
Vecheslav Chertushkin
397
Vecheslav Chertushkin 2011.06.13 13:51 

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

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

o_o
Модератор
23689
o_o 2011.06.13 14:32  
перефразируйте вопрос.
Christo Tsvetanov
990
Christo Tsvetanov 2011.06.13 15:24  

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

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

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

Vecheslav Chertushkin
397
Vecheslav Chertushkin 2011.06.13 15:31  

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

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

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

o_o
Модератор
23689
o_o 2011.06.13 16:30  
semiromid:

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

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

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


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

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

Andrew
28
Andrew 2011.06.13 16:33  
semiromid:

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

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

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


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

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

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

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

Vecheslav Chertushkin
397
Vecheslav Chertushkin 2011.06.13 16:59  
RAVen_:


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

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

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

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


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

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

Спасибо )

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);
}
//----

Alexander
2441
Alexander 2011.06.13 17:10  
Может сделать обработку ордера сразу же после открытия, тогда и искать ничего не надо будет.
Victor Nikolaev
Модератор
14483
Victor Nikolaev 2011.06.13 17:13  
semiromid:

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

Спасибо )


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

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

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