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

 
Здравствуйте,

Спасибо за ваш ответ, это помогает решить проблему с декларированием.

Кстати нашел возможно один баг связанный с отладкой:

Когда вы отлаживаете индикатор, то будучи в режиме остановки на breakpoint, нажмите indicator list в MetaTrader.
Приложение замерзает и останавливается только task manager'ом (kill)


Примите пожалуйста к сведению.
 
speedy:


Примите пожалуйста к сведению.
Приняли, спасибо.
 

Функция OnTimer() в тестере стратегий, достаточно сильно тормозит выполнение, при запросе каждую секунду. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Эксперт, с двумя внешними индикаторами и при прогоне по всем тикам, выполняется 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 70418 ms (total bars in history 6270, total time 70528 ms) При комментировании функция OnTimer(), выполнение значительно ускоряется 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 22730 ms (total bars in history 6270, total time 22870 ms) Такие задержки из-за особенностей работы тестера получаются, или как-то можно ускорить выполнение?

P.S. Предварительный просмотр сообщения реализовали бы чтоль( 

 
sion:

Функция OnTimer() в тестере стратегий, достаточно сильно тормозит выполнение, при запросе каждую секунду. void OnInit() { EventKillTimer(); EventSetTimer(1); } void OnTimer() { } Эксперт, с двумя внешними индикаторами и при прогоне по всем тикам, выполняется 2012.04.11 14:32:07 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 70418 ms (total bars in history 6270, total time 70528 ms) При комментировании функция OnTimer(), выполнение значительно ускоряется 2012.04.11 14:36:22 Core 1 EURUSD,H1: 8083516 ticks (4557 bars) generated within 22730 ms (total bars in history 6270, total time 22870 ms) Такие задержки из-за особенностей работы тестера получаются, или как-то можно ускорить выполнение?

P.S. Предварительный просмотр сообщения реализовали бы чтоль( 

Код лучше вставлять через кнопочку "SRC" на панели редактора.
 
papaklass:

Что означает эта запись в тестере?

Это системное сообщение о подкачке истории.
 

Не смешно.

struct Test
  {
   double      data[];
   int         size;
   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}
   double &operator[] (int i) {return &data[i];} // ERROR :  '&' - reference cannot be used

private:
   static int  Max;
  };
//+------------------------------------------------------------------+

int Test::Max=1024;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test t;  
   t.Init(16);
   for(int i=0;i<t.size;i++)
     {
      t[i]=i*i; // ERROR :'=' - l-value required
     }
  }

Я какбэ понимаю, что ссылки в общем случае в mql5 из функций не  возвращаются (кстати, почему низя?), но надо ж чего-то сделать тогда взамен, чтоб l-value индексаторы были возможны.  Например, сделать конкретно для левых индексаторов синтаксическое исключение из общего правила. Или ключевое слово какое-то.

Хромота явно не красит mql5....

 
MetaDriver:

Хромота явно не красит mql5....

Не обижай mql5, он ещё "махонький", но очень быстро взрослеет от билда к билду.
 
MetaDriver:

Хромота явно не красит mql5....

Так для этого надо полноценные ссылки мутить :)

ЗЫ: течееееет :)

 

Баг?


Код приведенный ниже генерирует что-то типа вечного цикла в компиляторе. Нажатие на Cancel (отмена компиляции)

срабатывает не сразу, а когда стабатывает, возвращает контроль над редактором.

При этом сама кнопка Cancel  не исчезает, но и не остается доступной.. 

Кнопка Compile теряется навсегда (нужно перезагружать редактор чтобы вернуть)

 

 


#include <Object.mqh>

class B;

class A: B {
   CObject* b;
   void a();
};

class B: A {

   CObject* a;
   void b();
   
};
 
MetaDriver:

Не смешно.

Я какбэ понимаю, что ссылки в общем случае в mql5 из функций не  возвращаются (кстати, почему низя?), но надо ж чего-то сделать тогда взамен, чтоб l-value индексаторы были возможны.  Например, сделать конкретно для левых индексаторов синтаксическое исключение из общего правила. Или ключевое слово какое-то.

Хромота явно не красит mql5....

"Выдавать" внутренние не базовые элементы класса в наружу (а в данном примере не сам атрибут, а только элемент массива !) тем более с возможностью изменить его значение - не безопасно.

К тому же это противоречит "духу" обьектного ориентированного програмирования: всю работу с данными обьекта нужно стараться выполнять внутри обьекта, его же методами..


 

 А как насчет того чтобы просто использовать Setter для аттрибута data ?

Код только выиграет по читабельности. В конечном итоге эта "простота" с l-value индексатором сделает так что никто включая вас не будет понимать как этот код работает..

Потратите больше времени на поиск ошибок чем на написание Setter.

 

Пример:

Если код типа   while ( (double)date[++i -1] < 10)  можно заменить на что нибудь более длинное но удобоваримое, то лучше это так и сделать..

 

 

 struct Test

  {

   double      data[];

   int         size;

   void        Init(int Size) {size=Size; ArrayResize(data,fmin(size,Max));}

   

   

   void  setDataElement (int index, double value)

     {

       data[index] = value;

     }


private:

   static int  Max;

  };

//+------------------------------------------------------------------+


int Test::Max=1024;

//+------------------------------------------------------------------+

//| Script program start function                                    |

//+------------------------------------------------------------------+

void OnStart()

  {

   Test t;  

   t.Init(16);

   for(int i=0;i<t.size;i++)

     {

      //t[i]=i*i; // ERROR :'=' - l-value required

      t.setDataElement(i, i*i);

     }

  } 

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