Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1782

 
Artyom Trishkin #:

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

не уверен.

у меня еще 2 советника с аналогичной конструкцией проверки лотности и оба замечательно в тестере проходят всю историю минут за 15-20

 
законопослушный гражданин #:

не уверен.

у меня еще 2 советника с аналогичной конструкцией проверки лотности и оба замечательно в тестере проходят всю историю минут за 15-20

Ну как знаете. Спорить не собираюсь.

 
MakarFX #:

поменяй перебор ордеров

аналогично

 
законопослушный гражданин #:

да любую пару. 

я AUD/USD использую М15.

у меня такие же проблемы с вашим индикатором были (приложил)

там я выяснил, методом исключения, что тормозит процесс вот эта штука:

Кешировать надо результаты (в переменные). И обновлять кэш, если список ордеров изменился. А если ничего не поменялось, то просто возвращать значения из кэша.

 
Artyom Trishkin #:

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

Всегда нужно думать, что вырубят электричество и тд...

Советник из истории в любой момент должен сконфигуривать и работать.

 
Volodymyr Zubov #:

Всегда нужно думать, что вырубят электричество и тд...

Советник из истории в любой момент должен сконфигуривать и работать.

Для того, чтобы свет не вырубили существует VPS.

 
Да, для то что найти ордер - ненужна локальная переменная
 

в общем примерно понял почему есть проблемы.

теперь хочу сделать так:

вычистить void OnTick

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
   {
  
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
   }
}

сигнал сделать таким:

bool bSignalBuy()
  {
   if (openPrice > Open[1] && openPrice < Close[1]) //Open[1] и Close[1]- цены открытия и закрытия каждого бара текущего графика.
   
  return(true);
   
  return(false);
  }
//+-----------------------------------------------------------------------------------------------+
//|                                                             Функция поиска сигнала на продажу |
//+-----------------------------------------------------------------------------------------------+
bool bSignalSell()
  {
   if(openPrice< Open[1] && openPrice > Close[1])

   return(true);

   return(false);
  }

где  openPrice пробую выразить так, однако выдает ошибку:

possible loss of data due to type conversion

правильно ли я применяю функцию void ? 

  void openPrice()
  {
  int OP=0;
  
  if (GetLotSize()>LotControl) OP = dMA + Deviation * _Point;
  else OP = dMA;
  }
 

Сделал чтобы после нажатия на кнопку за курсором мыши следовала линия через отрисовку и удаление

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
  {    
    if(ObjectGetInteger(0,"button_bs",OBJPROP_STATE)){
      int      x     =(int)lparam;
      int      y     =(int)dparam;
      datetime dt    =0;
      double   price =0;
      int      window=0;
     
      if(id == CHARTEVENT_MOUSE_MOVE){
        if(ChartXYToTimePrice(0,x,y,window,dt,price)){
            ObjectDelete(0,"H Line");
            ObjectCreate(0,"H Line",OBJ_HLINE,window,dt,price);
            ChartRedraw(0);
        }
      }
    }
    else{
      ObjectDelete(0,"H Line");
    }
  }

Может есть другой способ? А то кулер процессора начинает шуметь :)

 
Volodymyr Zubov #:

Всегда нужно думать, что вырубят электричество и тд...

Советник из истории в любой момент должен сконфигуривать и работать.

Должен. И что, как запоминание индекса цикла помешает ему пройтись по истории после перезапуска?
Причина обращения: