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

 
Alexey Viktorov:

Кому стало плохо от того что ордер выбран повторно?

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

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

fxsaber, 2017.10.06 06:26

может привести к ситуации, когда какой-то тикет будет пропущен или тикет через одного повторится и т.д.

И речь не про модификацию даже, а про простой AmountOrders.

 
fxsaber:

Для чего, если IsChange - это пять строк? 

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

 
fxsaber:

И речь не про модификацию даже, а про простой AmountOrders.

Просто нужно не перебирать списки из окружения, которые тасуются при изменении окружения, а иметь свой список - он не тасуется, и в нём есть все (или в избытке, но не в недостаточности) тикеты, нужные для закрытия/удаления/модификации. При их физическом отсутствии не нужно заново цикл начинать, а просто переходить к следующему по списку. И всё - не нужно изменять индекс цикла и ещё как-то пытаться повторить цикл. Прсто идём по своему списку и пытаемся делать что нужно. Нет уже тикета в рынке - ничего страшного (уже и не вернёшь) - идём к следующему и делаем с ним что задумано. А таймер в свою очередь скорректирует список на следующем тике.

 
fxsaber:

И речь не про модификацию даже, а про простой AmountOrders.

Конечно может. Может случиться всё что угодно, когда угодно. Идёшь, идёшь, всё ровненько и вдруг оступился... На все случаи жизни не придумаешь подстраховку. Именно поэтому я не стараюсь писать максимально универсальные функции "на все случаи жизни". Ну и что от того что выбран ордер дважды для простого AmountOrders? Какова вероятность что ордер будет вручную закрыт/удалён именно в момент выполнения цикла? Ведь в приведённом примере кода, ордер закрывается в том-же самом цикле. Такое можно написать только для эксперимента, в реале я не могу представить чтобы надо было модифаить ордер или ещё что-то сделать и тут-же закрывать...

 
Artyom Trishkin:

Просто нужно не перебирать списки из окружения, которые тасуются при изменении окружения, а иметь свой список - он не тасуется, и в нём есть все (или в избытке, но не в недостаточности) тикеты, нужные для закрытия/удаления/модификации. При их физическом отсутствии не нужно заново цикл начинать, а просто переходить к следующему по списку. И всё - не нужно изменять индекс цикла и ещё как-то пытаться повторить цикл. Прсто идём по своему списку и пытаемся делать что нужно. Нет уже тикета в рынке - ничего страшного (уже и не вернёшь) - идём к следующему и делаем с ним что задумано. А таймер в свою очередь скорректирует список на следующем тике.

Представим, что нужно отключить советник, если количество ордеров по заданному символу превышает указанное количество. Ну и как?

 
Alexey Viktorov:

Конечно может. Может случиться всё что угодно, когда угодно. Идёшь, идёшь, всё ровненько и вдруг оступился... На все случаи жизни не придумаешь подстраховку. Именно поэтому я не стараюсь писать максимально универсальные функции "на все случаи жизни". Ну и что от того что выбран ордер дважды для простого AmountOrders? Какова вероятность что ордер будет вручную закрыт/удалён именно в момент выполнения цикла? Ведь в приведённом примере кода, ордер закрывается в том-же самом цикле. Такое можно написать только для эксперимента, в реале я не могу представить чтобы надо было модифаить ордер или ещё что-то сделать и тут-же закрывать...

А это смотреть не стали? Воспроизводится на раз!

 
fxsaber:

Представим, что нужно отключить советник, если количество ордеров по заданному символу превышает указанное количество. Ну и как?

Там же - в таймере при записи ордеров в список - превышено - отправили событие или взвели флаг.

 
Artyom Trishkin:

Там же - в таймере при записи ордеров в список - превышено - отправили событие или взвели флаг.

Впрочем, так лучше не делать - всё должно быть на своих местах.

В в таймере советника берём список по нужным критериям и при list.Total()>xxx делаем что задумано.

 
fxsaber:

А это смотреть не стали? Воспроизводится на раз!

Именно это я и смотрел.

    
  // Закрыли позиции
  for (int i = 0; i < Total; i++)
    OrderClose(Tickets[i], 1, SymbolInfoDouble(_Symbol, SYMBOL_BID), 100);
}


И мой пост

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

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

Alexey Viktorov, 2017.10.06 08:49

 Какова вероятность что ордер будет вручную закрыт/удалён именно в момент выполнения цикла?


И ещё, какой такой глубокий смысл в реальной торговле беспрерывно гонять цикл перебора ордеров? Самое главное впустую...

 
Alexey Viktorov:

И ещё, какой такой глубокий смысл в реальной торговле беспрерывно гонять цикл перебора ордеров?

В боевом окружении это нужно делать всегда! Поэтому вероятность нарваться на сторонее закрытие позиции внутри цикла - проценты.

Причина обращения: