Ошибки, баги, вопросы - страница 347

 
Так что это или баг терминала, или серверной истории. Но скорее терминала, тк отчёты на чемпе скорее с серверной истории восстанавливались.
 

Urain:
Так что это или баг терминала, или серверной истории. Но скорее терминала, тк отчёты на чемпе скорее с серверной истории восстанавливались.

Прикольно. Не обращал внимания. Наглядно объяснили.
 
Yedelkin:
Прикольно. Не обращал внимания. Наглядно объяснили.
Вот так, кому прикольно, а кому 2 недели отлова бага :о)
 
Нашёл, там по умолчанию стоит сортировка по времени, а нужно по номеру сделки. Тогда всё правильно.
 
Urain:
Нашёл, там по умолчанию стоит сортировка по времени, а нужно по номеру сделки. Тогда всё правильно.

То есть, ошибок нет?  Все дело в том, что надо сделки учитывать/сортировать по тикетам, а не по времени.

Я лишь поверхностно просмотрел отчеты, а не высчитывал состояния позиций.

 
Renat:

То есть, ошибок нет?  Все дело в том, что надо сделки учитывать/сортировать по тикетам, а не по времени.

Я лишь поверхностно просмотрел отчеты, а не высчитывал состояния позиций.

Да именно, просто при сохранении отчёта автоматизации этого процесса нет, и его нужно внимательно отслеживать. Не думаю что каждый пользователь будет на это обращать внимание и как результат будут баги при парсинге отчёта.

ЗЫ Я добавил сортировку после парсинга отчёта. В результате у меня всё заработало,  но предсказываю что ещё не один программист запарится с этой фичей.

 

При оптимизации в правом верхнем углу графика оптимизации отображается название параметра оптимизации.


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

Ренат, давайте передвинем её в ЛЕВЫЙ верхний угол!  Или в правый нижний. Или в левый нижний... Куда угодно, только уберите ради бога из правого верхнего.  Пожалуйста!  :)

// Или по крайней мере сделайте её бледной и поместите в фон, чтоб не закрывала информацию.

 
MetaDriver:

При оптимизации в правом верхнем углу графика оптимизации отображается название параметра оптимизации.

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

Ренат, давайте передвинем её в ЛЕВЫЙ верхний угол!  Или в правый нижний. Или в левый нижний... Куда угодно, только уберите ради бога из правого верхнего.  Пожалуйста!  :)

// Или по крайней мере сделайте её бледной и поместите в фон, чтоб не закрывала информацию.

Левый нижний, и как фон.
 

Пожалуйста подскажите, где я ошибся. Пытаюсь написать простой скрипт, который удаляет позицию и отложенные ордера по текущему инструменту. Вот:

//+------------------------------------------------------------------+
//|                                                        clean.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick current_tick;
   MqlTradeRequest close_request;
   MqlTradeResult  close_result;
   SymbolInfoTick(_Symbol,current_tick);
   int counter01;
   while(check_position()==true);
     {
      PositionSelect(_Symbol);
      close_request.action=TRADE_ACTION_DEAL; close_request.symbol=_Symbol; close_request.volume=PositionGetDouble(POSITION_VOLUME); close_request.type_filling=ORDER_FILLING_AON;
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         close_request.price=current_tick.bid; close_request.type=ORDER_TYPE_SELL;
        }
      else
        {
         close_request.price=current_tick.ask; close_request.type=ORDER_TYPE_BUY;
        }
      OrderSend(close_request,close_result);
     }
   do
     {
      for(counter01=1; counter01<=OrdersTotal(); counter01++)
        {
         close_request.order=OrderGetTicket(counter01-1);
         if(OrderGetString(ORDER_SYMBOL)==_Symbol)
           {
            close_request.action=TRADE_ACTION_REMOVE;
            OrderSend(close_request,close_result);
           }
        }
     }
   while(check_order()==true);
   if(GetLastError()!=0)
      Print("ошибка код ",GetLastError()," функция ",__FUNCTION__," строка ",__LINE__);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_position() // функция проверяет наличие позиции
  {
   int counter01;
   bool position_exsist=false;
   for(counter01=0; counter01<PositionsTotal(); counter01++)
     {
      if(PositionGetSymbol(counter01)==_Symbol)
        {
         position_exsist=true;
         break;
        }
     }
   return(position_exsist);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool check_order() // функция проверяет наличие ордеров
  {
   int counter01;
   bool order_exsist=false;
   for(counter01=0; counter01<OrdersTotal(); counter01++)
     {
      OrderGetTicket(counter01);
      if(OrderGetString(ORDER_SYMBOL)==_Symbol)
        {
         order_exsist=true;
         break;
        }
     }
   return(order_exsist);
  }
//+------------------------------------------------------------------+
Скрипт зависает при наличии позиции. При отладке выяснилось, что зависание происходит при проверке наличия позиции. Когда начинает проверяться условие цикла while(check_position()==true) управление передается в функцию check_position(), и в первый раз функция выполняется нормально, возвращает true. Но потом тело цикла не выполняется, а опять начинается проверка условия, и управление попадает опять в check_position(), и после выполнения оператора return(order_exsist) уже не возвращаясь к условию цикла переходит в начало функции check_position(). Подскажите пожалуйста, где я ошибся.
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Основы языка / Операторы / Оператор возврата return - Документация по MQL5
 
molotkovsm:

Пожалуйста подскажите, где я ошибся. Пытаюсь написать простой скрипт, который удаляет позицию и отложенные ордера по текущему инструменту. Вот:

Скрипт зависает при наличии позиции. При отладке выяснилось, что зависание происходит при проверке наличия позиции. Когда начинает проверяться условие цикла while(check_position()==true) управление передается в функцию check_position(), и в первый раз функция выполняется нормально, возвращает true. Но потом тело цикла не выполняется, а опять начинается проверка условия, и управление попадает опять в check_position(), и после выполнения оператора return(order_exsist) уже не возвращаясь к условию цикла переходит в начало функции check_position(). Подскажите пожалуйста, где я ошибся.

В случае наличия позиции Вы получите бесконечный цикл, потому что

while(check_order()==true);

равносильно

while(check_order()==true)
{
 //  пустой оператор
}
В коде нет возможности вырваться из цикла, потому что в теле оператора нет break;
Причина обращения: