Нкжна помощь в завершении бота. - страница 3

 
Алексей Тарабанов:

Мало. Цикл есть? Если есть, покажите. Если за тик советник отрабатывает один раз линейный алгоритм на текущих данных, то моё предположение неверно. 

Нет цикла нет, я так понимаю перед закрытием ордера необходимо проверить наличие ордера в предыдущих тиках. Но не доганяю зачем. Если есть выбранный ордер на продажу или на покупку. И цена тика текущая без изменений.
 
Алексей Тарабанов:

Кстати, почему, если ордеров нет, то ищем открытые; а иначе - ищем закрытые? 

Я бы не стал делать даже наоборот, я бы вообще не стал думать так. Извините. 

Если ордеров нет выполняет функцию  ordersend  иначе orderclose. Ну так у меня называется модуль отправки ордера 😁 а в этих модулях уже проверки
 
Помножьте на ноль эту Вашу работу и начните новую. В которой действия Вашей программы будут соответствовать Вашим мыслям. 
 
Алексей Тарабанов:
Помножьте на ноль эту Вашу работу и начните новую. В которой действия Вашей программы будут соответствовать Вашим мыслям. 
Обнадеживающе😁
 
Можно пока без торговых функций. Просто, чтобы рисовалось то, что Вы задумывали. 
 
Алексей Тарабанов:
Можно пока без торговых функций. Просто, чтобы рисовалось то, что Вы задумывали. 
Он берет ставку правильно на длинных позициях, не правильные ордера отбивает с минималками. Приходится в ручную отбивать ставку когда наступает нужное условие. Причем  t/p  не вариант. Нужно именно отбитие ставки по условию. Работает в принципе однотипно что на М1 что на М30.
 
void OnTick()
  {
//---
   int orders = 0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;
      if(OrderMagicNumber() != Magic)
         continue;
      if(OrderSymbol() != _Symbol)
         continue;
      switch(OrderType())
        {
         case OP_BUY:
            orders++;
            if(MaCurrent20H<Ask)
               break;
            if(OrderClose(OrderTicket(),OrderLots(),Bid,1,White))
              {
               Print("Ордер закрыт ",GetLastError());
               break;
              }
            Print("Ошибка закрытия Buy",GetLastError());
            break;

         case OP_SELL:
            orders++;
            if(MaCurrent20H>Ask)
               break;
            if(OrderClose(OrderTicket(),OrderLots(),Bid,1,Black))
              {
               Print("Ордер закрыт ",GetLastError());
               break;
              }
            Print("Ошибка закрытия Buy",GetLastError());
            break;
        }
     }
//---
     if(orders == 0)
     {
          /* условия открытия позиции */
     }

  }

Похоже вам что-то вроде этого нужно. А вот с логикой уже разбирайтесь сами.

 
Konstantin Nikitin:

Похоже вам что-то вроде этого нужно. А вот с логикой уже разбирайтесь сами.

Спасибо немного лишних модулей прийдется выкинуть
 
1leprecon1:
Спасибо немного лишних модулей прийдется выкинуть

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

 
1leprecon1:
Он берет ставку правильно на длинных позициях, не правильные ордера отбивает с минималками. Приходится в ручную отбивать ставку когда наступает нужное условие. Причем  t/p  не вариант. Нужно именно отбитие ставки по условию. Работает в принципе однотипно что на М1 что на М30.

Какую ставку, где берёт, какие ордера неправильные и что такое минималка? Продолжать? 

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