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

 
Vladimir Pastushak:

Интересно, это брокер так делает или какой то баг мт 4 ?

Зарегистрируйте по нему реальный сигнал, если пройдет значит это ДЦ. Есть центовые счета, которые отображаются как обычные(чем многие сигнальщики пользуются), но у вас круче вариант ))).

 

Стал много запускать кроссплатформенный код на MT4. Там отладчика что ли нет? Запускаю по F5, но нигде не тормозится.

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

 

fxsaber:Стал много запускать кроссплатформенный код на MT4. Там отладчика что ли нет? Запускаю по F5, но нигде не тормозится.Пока приходится отладкой заниматься под пятеркой, что костыльно в некоторых случаях.

точка останова в МТ4 точно срабатывает, слева на поле в метаэдиторе клик


 
Igor Makanu:

точка останова в МТ4 точно срабатывает, слева на поле в метаэдиторе клик

Запустите.

 
fxsaber:

Запустите.

проверил, да Вы правы - не работает в МТ4 точка останова при тестировании на исторических данных, проверял на стандартном советнике Moving Average - не работает!

ЗЫ: пробовал добавить в код DebugBreak(); - результата нет, все равно не получается остановить тестирование и выйти в отладчик

ЗЫЗЫ: точка останова при тестирование на реальных данных, работает

 
Igor Makanu:

ЗЫЗЫ: точка останова при тестирование на реальных данных, работает

У меня и на реальных данных не работает.

 
pavlick_:

Скомпилировать не удаётся, ошибки:
   'a' - too complex, simplify the macro    temp.mq5    24    10
   's' - struct member undefined    temp.mq5    24    10
   ...

Т.е. препроцессор,  видимо, пытается рекурсивно раскрыть a.М

Возвращаюсь к теме подсветки

#define a       s.a

Если                              .a не подсвечивается - значит компилятор не считает её макросом. В тоже время ошибка. Получается подсветка сама по себе... а фактическая компиляция сама по себе, при том что они должны работать синхронно в паре как в следующих примерах:

#define b       b.x

void OnStart()
{
        int b = 1;
#define b   b + 2
        Print( b ); //Error: 'b' - too complex, simplify the macro
}
Сама по себе такая работа неправильная (потому что в C++ компилируется без ошибок и результат: 3), но по крайней мере синхронная (и подсветка и компилятор руководствуются единой логикой)
 
fxsaber:

У меня и на реальных данных не работает.

создал тестового эксперта:

#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
input int BreakTick = 5;
int OnInit()
  {
   count = 0;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
static int count = 0;
void OnTick()
  {
   if(count++>5) DebugBreak();
   Print("count = ",count," , Ask = ",Ask);
   
  }
//+------------------------------------------------------------------+

не работает останов по DebugBreak() если нажать кнопку в Метаэдиторе "Запуск профилирования на реальных данных", но работает останов если нажать "Начало/продолжение отладки на реальных данных F5"

в тестере вообще ничего ничего работает - невозможно остановить выполнение  программы и выйти в отладчик, лог:

2018.12.05 14:46:19.413 tst EURUSD,H1: count = 6 , Ask = 1.13397

2018.12.05 14:46:18.740 tst EURUSD,H1: count = 5 , Ask = 1.13396

2018.12.05 14:46:09.004 tst EURUSD,H1: count = 4 , Ask = 1.13396

2018.12.05 14:46:03.079 tst EURUSD,H1: count = 3 , Ask = 1.13395

2018.12.05 14:46:02.830 tst EURUSD,H1: count = 2 , Ask = 1.13395

2018.12.05 14:46:02.595 tst EURUSD,H1: count = 1 , Ask = 1.13394

2018.12.05 14:45:53.889 tst EURUSD,H1: initialized

2018.12.05 14:45:53.869 tst EURUSD,H1 inputs: BreakTick=5; 

2018.12.05 14:45:52.131 Expert tst EURUSD,H1: loaded successfully

2018.12.05 14:45:45.899 Expert tst EURUSD,H1: removed

2018.12.05 14:45:45.814 tst EURUSD,H1: uninit reason 1

2018.12.05 14:45:44.510 tst EURUSD,H1: count = 14 , Ask = 1.13393

2018.12.05 14:45:44.177 tst EURUSD,H1: count = 13 , Ask = 1.13392

2018.12.05 14:45:42.966 tst EURUSD,H1: count = 12 , Ask = 1.13393

2018.12.05 14:45:42.152 tst EURUSD,H1: count = 11 , Ask = 1.13393

2018.12.05 14:45:41.996 tst EURUSD,H1: count = 10 , Ask = 1.13392

2018.12.05 14:45:39.544 tst EURUSD,H1: count = 9 , Ask = 1.13393

2018.12.05 14:45:39.345 tst EURUSD,H1: count = 8 , Ask = 1.13392

2018.12.05 14:45:35.605 tst EURUSD,H1: count = 7 , Ask = 1.13394

2018.12.05 14:45:32.049 tst EURUSD,H1: count = 6 , Ask = 1.13394

2018.12.05 14:45:29.085 tst EURUSD,H1: count = 5 , Ask = 1.13393

2018.12.05 14:45:27.735 tst EURUSD,H1: count = 4 , Ask = 1.13393

2018.12.05 14:45:27.580 tst EURUSD,H1: count = 3 , Ask = 1.13393

2018.12.05 14:45:26.212 tst EURUSD,H1: count = 2 , Ask = 1.13393

2018.12.05 14:45:25.853 tst EURUSD,H1: count = 1 , Ask = 1.13392

2018.12.05 14:45:25.684 tst EURUSD,H1: initialized

2018.12.05 14:45:25.664 tst EURUSD,H1 inputs: BreakTick=5; 

2018.12.05 14:45:24.163 Expert tst EURUSD,H1: loaded successfully

сначала был запуск из метаэдитора через "Запуск профилирования на реальных данных" - удалил эксперта руками, лишь тогда попал в редактор, затем запуск по F5 -  тут все сработало, но смущает, что был выполнен Print("count = ",count," , Ask = ",Ask); который после точки останова
 
Igor Makanu:

создал тестового эксперта:

не работает останов по DebugBreak() если нажать кнопку в Метаэдиторе "Запуск профилирования на реальных данных", но работает останов если нажать "Начало/продолжение отладки на реальных данных F5"

в тестере вообще ничего ничего работает - невозможно остановить выполнение  программы и выйти в отладчик, лог:

сначала был запуск из метаэдитора через "Запуск профилирования на реальных данных" - удалил эксперта руками, лишь тогда попал в редактор, затем запуск по F5 -  тут все сработало

Спасибо, действительно, работает. Что-то пугающе часто стал публиковать ошибочные утверждения...

 
fxsaber:

Спасибо, действительно, работает. Что-то пугающе часто стал публиковать ошибочные утверждения...

дедушка мой всегда говорил: не ошибается лишь тот кто ничего не делает!

;)

мой пример вот так должен был работать, вернее задумывалось, что останов после 5-ти тиков:

void OnTick()
  {
   if(++count>5) DebugBreak();
   Print("count = ",count," , Ask = ",Ask);
  }

лог:

2018.12.05 15:27:06.815 tst EURUSD,H1: count = 5 , Ask = 1.13563

2018.12.05 15:27:06.488 tst EURUSD,H1: count = 4 , Ask = 1.13563

2018.12.05 15:27:05.469 tst EURUSD,H1: count = 3 , Ask = 1.13563

2018.12.05 15:27:04.795 tst EURUSD,H1: count = 2 , Ask = 1.13563

2018.12.05 15:27:04.288 tst EURUSD,H1: count = 1 , Ask = 1.13563

2018.12.05 15:27:03.057 tst EURUSD,H1: initialized

2018.12.05 15:27:03.024 tst EURUSD,H1 inputs: BreakTick=5; 

2018.12.05 15:27:01.376 Expert tst EURUSD,H1: loaded successfully