И снова про OrderSelect...

 
Inter:
Открыл ордер вручную, как скрипт может его выбрать? Всё, вот так вот тупо и понятно...

ну как по позиции его заселекти и все будет ок, хотя это не самый сок.  Если у тебя их будет много явно накосячиш.  
 
if ( OrderSelect (i, SELECT_BY_POS) == true )  continue;
      if ( OrderSymbol()==Symbol())  continue;
      
      if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP))
          {
...

Что то вроде этого?... Если да, то не выбирает он нифига.

 
OrderSelect(0,SELECT_BY_POS,MODE_TRADES);
Попробуй это, если у тебя 1 ордер!
 

cloud666 писал (а):

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

Попробуй это, если у тебя 1 ордер!


cloud666

Не думаю, что это решит проблему, не важно сколько у меня ордеров, предположим, что один, то в цикле из предпологаемого множества - один он должен выбрать? Даже если у меня один ордер...

 

Inter

писал (а):

if ( OrderSelect (i, SELECT_BY_POS) == true )  continue;
      if ( OrderSymbol()==Symbol())  continue;
      
      if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP))
          {
...

Что то вроде этого?... Если да, то не выбирает он нифига.


Попробуй вот так.

if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;
if(OrderSymbol()!=Symbol()) continue;
 

Не знаю почему, но не работает...

Вот в принципе сам код:

for(int ior=0;ior<OrdersTotal();ior++) // перебор начинаем ордеров 
           {
     if ( OrderSelect (ior, SELECT_BY_POS) == true )  continue;      
     if ( OrderSymbol()==Symbol())  continue;  //нам нужно что бы он соответствовал символу
      
      if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP))
          {
           buystat=1;  //открыт ордер в BUY
          }
             
      if((OrderType() == OP_SELL || OrderType() == OP_SELLSTOP))
          {
            sellstat =1; //открыт ордер в SELL
          }
        }
 
Inter:

Не знаю почему, но не работает...

Вот в принципе сам код:

for(int ior=0;ior<OrdersTotal();ior++) // перебор начинаем ордеров 
           {
     if ( OrderSelect (ior, SELECT_BY_POS) == true )  continue;      
     if ( OrderSymbol()==Symbol())  continue;  //нам нужно что бы он соответствовал символу
      
      if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP))
          {
           buystat=1;  //открыт ордер в BUY
          }
             
      if((OrderType() == OP_SELL || OrderType() == OP_SELLSTOP))
          {
            sellstat =1; //открыт ордер в SELL
          }
        }


Так и не будет работать конструкция с OrderSelect() если ордер выбран, возвращает true и оператор continue начинает следующую итеррацию цикла for.

Скопируй аналогичные строки из моего примера выше в свой код и посмотри внимательно чем они отличаются.

 
Не знаю, заменил, вставил,... не работает. Ну не показывают мне переменные buystat и sellstat еденицу!
 
Inter:

Не знаю почему, но не работает...

Обратите внимание на оператор continue.

В MQL4 оператор continue прекращает исполнение текущей итерации ближайшего оператора цикла while или for. Результатом выполнения оператора continue является переход к следующей итерации ближайшего оператора цикла while или for.

В некоторых других языках оператор continue передаёт управление следующему ниже оператору.

 
Inter:
Не знаю, заменил, вставил,... не работает. Ну не показывают мне переменные buystat и sellstat еденицу!


У меня работает только, что проверил. Смотрите у себя внимательнее. Есть ли по символу открытые/отложенные ордера?

int start()
  {
    int buystat,sellstat;
//----
    for(int ior=0;ior<OrdersTotal();ior++) // перебор начинаем ордеров 
       {
     if ( !OrderSelect (ior, SELECT_BY_POS) == true )  continue;      
     if ( OrderSymbol()!=Symbol())  continue;  //нам нужно что бы он соответствовал символу
      
      if((OrderType() == OP_BUY || OrderType() == OP_BUYSTOP))
          {
           buystat=1;  //открыт ордер в BUY
          }
             
      if((OrderType() == OP_SELL || OrderType() == OP_SELLSTOP))
          {
            sellstat =1; //открыт ордер в SELL
          }
        }
Print("buystat=",buystat,"; sellstat=",sellstat);
//----
   return(0);
  }
Причина обращения: