Что не даёт советнику заработать. - страница 5

 
Roman.:

ДО ТАЛОГО. Пока не будет выбран в цикле:



думаю это не правильно, ведь он может уже закрыт. И будешь висеть в цикле. А после таких зависаний зачастую терминал приходится переустанавливать.
 
valenok2003:

с этим всё понятно

только эти две причины или может быть что-то ещё?
Ордер может быть закрыт частично, переоткрыт с другим тикетом, поменять тип... для этого необходимо вести их учет - правильно. Через массивы.
 
valenok2003:


думаю это не правильно, ведь он может уже закрыт. И будешь висеть в цикле. А после таких зависаний зачастую терминал приходится переустанавливать.

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

for (int orderIndex = (OrdersTotal() - 1); orderIndex >= 0; orderIndex--)
 
Roman.:
Ордер может быть закрыт частично, переоткрыт с другим тикетом, поменять тип... для этого необходимо вести их учет - правильно. Через массивы.

у меня к учёту несколько другой подход, хотя без масивов всё же не обойтись, это правда

однако к нашим баранам...

если ордер не выбран, чему, например, будет равен OrderType() или OrderTicket() ? это как-то предусмотрено в МОКЛе?

 
valenok2003:

однако к нашим баранам...

если ордер не выбран, чему, например, будет равен OrderType() или OrderTicket() ? это как-то предусмотрено в МОКЛе?


Жесть! В анналы напрашивается!

 
valenok2003:

у меня к учёту несколько другой подход, хотя без масивов всё же не обойтись, это правда

однако к нашим баранам...

если ордер не выбран, чему, например, будет равен OrderType() или OrderTicket() ? это как-то предусмотрено в МОКЛе?

Вы не ищите "подвохов" там, где их нет. Ставьте этот код в сова к себе и радуйтесь жизни.

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

С массивами - также торговал - все работает.

 
Roman.:

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



Рома, не лукавь, в первый раз ты написал

while(OrderSelect(ticket,SELECT_BY_TICKET)==false)
 
PapaYozh:


Жесть! В анналы напрашивается!

переформулирую, при попытке выбора несуществующего ордера что происходит с этими данными?
 

Эта конструкция изначально была в чьем-то посте с вопросом: Как узнать цену ордера? ответ я использовал в этом цикле - см. выше.

Вот тот ответ на этот вопрос:

    int ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,5,0,0,"OrderOpenOne",14774,0,CLR_NONE);
    if (ticket>0)                                               // Если позиция открылась
    {
       while(OrderSelect(ticket,SELECT_BY_TICKET)==false)       // Если ордер выбран
       {
          Sleep(100);
       }
       double OpenPrice=OrderOpenPrice();
    }

 
valenok2003:



Рома, не лукавь, в первый раз ты написал

Как и все последующие разы. Я - предельно честен, как никогда. :-)

Эта конструкция используется в цикле - см. внимательнее - там все есть... и в первый и во второй и в третий разы - все везде - ОДИНАКОВО!

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