Советник открывает несколько параллельных сделок на одном баре, вместо одной

 

Привет Всем!

Мой советник открывает несколько параллельных сделок на одном баре,

вместо одной, что хорошо видно на графике результатов тестирования. Он выглядит примерно так:

// -----------------------------------------------------------------------------------------
start() {

// ------------------
if(a>b) {     // Buy
   Buy = true;
}
// ------------------

// ---------------------------------------------------------------------------------
   while(true)                                  // Цикл закрытия орд.
     {
      if (Buy==true) {                                       // критерий откр. Buy
         RefreshRates();                        // Обновление данных
         Ticket=OrderSend(Symb,OP_BUY,MyLots,Ask,Slippage,0,0);//Открытие Buy
         Sleep(2000);

         if (Ticket > 0)                        // Получилось :)
           {
            Alert ("Открыт ордер Buy ",Ticket,",   ", MyLots, " Лота");
            return;                             // Выход из start()
           }
         if (Fun_Error(GetLastError())==1)      // Обработка ошибок
            continue;                           // Повторная попытка
         return;                                // Выход из start()
        }

      break;                                    // Выход из while
     }
// ---------------------------------------------------------------------------------
}
// -----------------------------------------------------------------------------------------

- Может кто-то сталкивался с подобным, в чем проблема?

Спасибо!

 

// -----------------------------------------------------------------------------------------
start() {

// ------------------
if(a>b) { // Buy
  Buy = true;
}
// ------------------

// ---------------------------------------------------------------------------------
  while(true) // Цикл закрытия орд.
  {
  if (Buy==true) { // критерий откр. Buy
  RefreshRates(); // Обновление данных
  Ticket=OrderSend(Symb,OP_BUY,MyLots,Ask,Slippage,0,0);//Открытие Buy
  Sleep(2000);

  if (Ticket > 0) // Получилось :)
  {
  Alert ("Открыт ордер Buy ",Ticket,", ", MyLots, " Лота");
  return; // Выход из start()
  }
  if (Fun_Error(GetLastError())==1)            // Обработка ошибок
  continue; // Повторная попытка
  return;                                      // Выход из start()
  }

  break; // Выход из while
  }
// ---------------------------------------------------------------------------------
}
// -----------------------------------------------------------------------------------------

Навено потому что ты выходишь из старт прежде чем заканчиваеться цикл break;

и еще; где у тебя ограничения по открытию лота?

 
chief2000 >>:

Привет Всем!

Мой советник открывает несколько параллельных сделок на одном баре,

вместо одной, что хорошо видно на графике результатов тестирования. Он выглядит примерно так:

- Может кто-то сталкивался с подобным, в чем проблема?

Спасибо!

if (Ticket > 0)                        // Получилось :)
{
   Alert ("Открыт ордер Buy ",Ticket,",   ", MyLots, " Лота");
   Buy = false;
   return;                             // Выход из start()
}
 

mozg - MyLots это глобальная переменная, содержащая кол-во лотов.

"Навено потому что ты выходишь из старт прежде чем заканчиваеться цикл break;"

- Каково решение?

TheXpert - Изменил, но это не помогло:(

Я так понимаю, на каждом тике в пределах одного и того же бара срабатывает условие "Buy" и необходимо его прекратить до начала следующего бара..

Если да, как это сделать в этом случае?

Спасибо!

 

Предположение подтвердилось.

"isNewBar() && " в начале цикла для "Buy" помогло.

if(isNewBar() &&    a>b) { // Buy
  Buy = true;
}

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