Функция OrderSelect, оператор while и удаление скрипта с чарта - страница 2

 

Я бы так сделал:

void start() {
  double v=0.01;
  string symb=Symbol();
  int magic_multi=111;
   
  //Открываем тестовый ордер   
  OrderSend(symb,OP_BUY,NormalizeDouble(v,2),NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS)),6,NormalizeDouble(0,MarketInfo(symb,MODE_DIGITS)),NormalizeDouble(0,MarketInfo(symb,MODE_DIGITS)),"TEST_BUY",magic_multi,0);
  Sleep(60000);

  //Закрываем тестовый ордер
  int ticket;
  int ord_ticket;
   
  for (ticket=0; ticket<OrdersTotal(); ticket++) {
    if (OrderSelect(ticket, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderMagicNumber()==magic_multi) {
        if (OrderType()==OP_BUY) {
          Print("ЗАКРЫВАЕМ TEST_BUY");
          RefreshRates();
          OrderClose(OrderTicket(), OrderLots(), MarketInfo(symb,MODE_BID), 5); 
          Sleep(1000);
        }
      }
    }
  }
}
//+------------------------------------------------------------------+
2008.07.18 00:54:16 while_select_test EURUSD,H1: removed
2008.07.18 00:54:16 while_select_test EURUSD,H1: uninit reason 1
2008.07.18 00:54:16 while_select_test EURUSD,H1: close #6178251 buy 0.01 EURUSD at 1.5815 at price 1.5812
2008.07.18 00:54:14 while_select_test EURUSD,H1: ЗАКРЫВАЕМ TEST_BUY
2008.07.18 00:53:13 while_select_test EURUSD,H1: open #6178251 buy 0.01 EURUSD at 1.5815 ok
2008.07.18 00:53:11 while_select_test EURUSD,H1: close #6178239 buy 0.01 EURUSD at 1.5819 at price 1.5814
2008.07.18 00:53:09 while_select_test EURUSD,H1: ЗАКРЫВАЕМ TEST_BUY
2008.07.18 00:52:08 while_select_test EURUSD,H1: open #6178239 buy 0.01 EURUSD at 1.5819 ok
2008.07.18 00:51:44 while_select_test EURUSD,H1: close #6178208 buy 0.01 EURUSD at 1.5817 at price 1.5816
2008.07.18 00:51:41 while_select_test EURUSD,H1: ЗАКРЫВАЕМ TEST_BUY
2008.07.18 00:50:39 while_select_test EURUSD,H1: open #6178208 buy 0.01 EURUSD at 1.5817 ok
2008.07.18 00:50:06 while_select_test EURUSD,H1: loaded successfully
2008.07.18 00:49:57 Compiling 'while_select_test'
 
solandr писал (а) >>

Прошу объяснить где ошибка именно в этом коде советника?

Ниже справки из хелпа:

bool OrderSelect( int index, int select, int pool=MODE_TRADES)

Дальше в справке написано :

The function selects an order for further processing. It returns TRUE if the function succeeds. It returns FALSE if the function fails. To get the error information, one has to call the GetLastError() function.
The pool parameter is ignored if the order is selected by the ticket number.

Буквально это означает следующее: Вы каждый раз удачно выбираете ордер с указанным тикетом (неважно, что он уже закрыт) и пытаетесь его закрыть. Естественно, бесконечный цикл обеспечен. Проанализируйте OrderCloseTime() перед закрытием.