Организация цикла перебора ордеров - страница 6

 
Alexey Viktorov:

поставить проверку на изменение списка ордеров

Так переиндексация не будет учтена.

Понятно, что если были добавлены, то они или другие будут пропущены. А если просто были удалены??? Не получится выход за границы списка ордеров?

Так ничего страшного - ошибку схватим при OrderSelect.

 
fxsaber:

Так переиндексация не будет учтена.

Так ничего страшного - ошибку схватим при OrderSelect.

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

2. Согласен. Что-то я с утра ... не совсем наверное проснулся...

 
Alexey Viktorov:

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

Да, один из вариантов может быть таким. Есть еще и такой

какой-то отложенник исполнился во время цикла

 
fxsaber:

А если во время какого-либо цикла работы с ордерами на каждом витке проверять, было ли изменение OrdersTotal() и OrdersHistoryTotal()? 

И анализировать полученные значения в зависимости от ситуации?

 
fxsaber:

Да, один из вариантов может быть таким. Есть еще и такой

какой-то отложенник исполнился во время цикла


1. Такой вариант на грани фантастики. Ну, в конце-концов ничего не произойдёт если всё встанет на свои места на следующем тике.

2. Как я понимаю, отложники по алгоритму должны быть передвинуты, а рыночным ордерам передвинут стоп... Следовательно тип ордера проверяется и выполняется независимо от времени исполнения.

 
Alexey Kozitsyn:

А если во время какого-либо цикла работы с ордерами на каждом витке проверять, было ли изменение OrdersTotal() и OrdersHistoryTotal()? 

И анализировать полученные значения в зависимости от ситуации?

Вот было аналогичное предложение


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql4, тонкости и приёмы работы

Alexey Viktorov, 2017.09.15 07:24

Во-первых, ситуация представлена нестандартная и мало кто эту ситуацию уже разруливал, если вообще есть такие.

Чисто теоретически:

Для OrderModify организовывать обратный цикл не обязательно, поэтому пусть будет прямой

int i, total = OrdersTotal();
for(i = 0; i < total; i++)

И дальше поставить проверку на изменение списка ордеров

if(total != OrdersTotal())
 {
  i = 0;
  total = OrdersTotal();
  continue;
 }

Если произошло изменение количества, начнём цикл заново с новым количеством ордеров.

И ещё вопрос:

Понятно, что если были добавлены, то они или другие будут пропущены. А если просто были удалены??? Не получится выход за границы списка ордеров?


только без проверки OrdersHistoryTotal()
 
Alexey Viktorov:

Вот было аналогичное предложение



только без проверки OrdersHistoryTotal()
Да, я прочитал, как раз и сделал упор на то, что также проверять ордера истории, для случая, если одновременно произошло открытие+закрытие.
 
Alexey Kozitsyn:

А если во время какого-либо цикла работы с ордерами на каждом витке проверять, было ли изменение OrdersTotal() и OrdersHistoryTotal()

И анализировать полученные значения в зависимости от ситуации?

Его может не быть при переиндексации.
 
Alexey Viktorov:

1. Такой вариант на грани фантастики. Ну, в конце-концов ничего не произойдёт если всё встанет на свои места на следующем тике.

Следующий тик стал гэпом. Зачем откладывать на завтра то, что можно сделать сегодня?

2. Как я понимаю, отложники по алгоритму должны быть передвинуты, а рыночным ордерам передвинут стоп... Следовательно тип ордера проверяется и выполняется независимо от времени исполнения.

Ну тип ордера никак помочь здесь не может.

 
fxsaber:
Его может не быть при переиндексации.

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

Хотя, не думаю, что эта ветка лучшее место для обсуждения. Эта ветка для особенностей.