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

 

Возникла проблемка даже не знаю к чему отнести.

вот интересующий участок кода:

      Print("itogo do=",itogo);
      if(itogo>1000)
        {
         Print("itogo>1000 =",itogo);
         itogo=500;
         Print("vsego_if=",itogo);
        }
      Print("itogo posle=",itogo);
      Print("+-----------------------------------------------------------+");

В нём написано что вначале нужно распринтовать значение переменной itogo с текстом "itogo do",

далее если itogo больше 1000 то принтуем itogo с текстом "itogo>1000 "

                  itogo присваиваем 500 

                  принтуем itogo с текстом"vsego_if=" далее покидаем защищённуй условием зону

принтуем itogo с текстом "itogo posle="

принтуем черту.

Зачем я так подробно расписывю?,

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

Сами понимаете что при срабатывании условия значение переменной меняеться.

вот распринтовка из которой видно что принта два а значит срабатывания условия небыло но при этом значение переменной изменилось

как такое может быть ?????????


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

никаких крашей в этом коде не происходит, компилится без проблем а вот работать как задано не хочет.

Переменная обьявлена глобально интом, сам код большой но принтов в коде больше нигде нет.

ЗЫ И самое интересное с дебагером работает норм, а вот при запуске в штатном режиме вот такие выкрутасы

и это не принты бочат по логике программы вижу что чтото не то лепит.

 

Воспроизвести на других примерах пока не получилось но по этому вроде обрисовалось решение

В тексте ранее был DebugBreak(); и код проганялся через дебагер, познее DebugBreak() был удалён и всё перекомпилировано

но вот видимо МЕ помнит что дебагер использовался и без прогона на нём после компиляции работать правильно отказывается.

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

 
Urain:

Воспроизвести на других примерах пока не получилось но по этому вроде обрисовалось решение

В тексте ранее был DebugBreak(); и код проганялся через дебагер, познее DebugBreak() был удалён и всё перекомпилировано

но вот видимо МЕ помнит что дебагер использовался и без прогона на нём после компиляции работать правильно отказывается.

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


И они называют это релизом?

Написал потенциальный участник Чемпионата 2010 советник, отладил, но остались в коде "debugger'ные штучки". А советник-то хорошо работает. Но хорошо работает только со "штучками", однако, участник об этом не подозревает, - откуда ему знать о такой недокументированной особенности?

И вот, отправил тот участник исходный код советника своего в MetaQuotes для участия в Чемпионате 2010, а там просто откомпилировали, и код, естественно, получился чистым, без "debugger'ных штучек".

Идёт Чемпионат 2010, а советник в MetaQuotes почему-то совсем не так торгует, как у участника на его компьютере. И недоумевает участник, и мысли всякие ему в голову лезут...

 
Urain:

Возникла проблемка даже не знаю к чему отнести.

Я для примера сделал такой код (поставил Ваши значения):

void Check(int itogo)
  {
   Print("itogo do=",itogo);
   if(itogo>1000)
     {
      Print("itogo>1000 =",itogo);
      itogo=500;
      Print("vsego_if=",itogo);
     }
   Print("itogo posle=",itogo);
   Print("+-----------------------------------------------------------+");  
  }
void OnStart()
  {
   Check(158);
   Check(179);
   Check(202);
   Check(222);
   Check(243);
   Check(261);
   Check(288);
   Check(301);
  }

Он нормально отработал:

2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=301
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=301
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=288
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=288
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=261
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=261
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=243
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=243
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=222
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=222
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=202
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=202
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=179
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=179
2010.07.08 07:00:22     size (EURUSD,D1)        +-----------------------------------------------------------+
2010.07.08 07:00:22     size (EURUSD,D1)        itogo posle=158
2010.07.08 07:00:22     size (EURUSD,D1)        itogo do=158

Как видно, никаких ошибок и несоответствий значений переменной нет.

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

Что нужно сделать:

  • с нуля перекопилировать свой код, перезапустить терминал (для гарантии) и проверить
  • если ошибка осталась, то выслать нам полный код через сервисдеск (или даже в форуме) - мы обязательно проверим
 
simpleton:

Хватит уже истерить.

Если эта ошибка подтвердится, то будет сразу же исправлена. Разработка программного обеспечения не может идти без ошибок.

 
Renat:

Хватит уже истерить.

Если эта ошибка подтвердится, то будет сразу же исправлена. Разработка программного обеспечения не может идти без ошибок.

Renat, предлагаю открыть тему "Критика MQL5" или что-то в этом роде. А все сообщения подобного типа из других тем (веток) удалять как офф-топ. 

Тем самым и критикам будет, где высказаться, и тематика  веток будет соблюдаться.

 

Хотел бы узнать судьбу заявки #18261 по поводу вызова индикатора из советника (значение не совпадает с индикатором).

Было бы не плохо если бы както реагировали...

Способы вызова индикаторов в MQL5
Способы вызова индикаторов в MQL5
  • 2010.03.09
  • KlimMalgin
  • www.mql5.com
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
 
ddd06:

Хотел бы узнать судьбу заявки #18261 по поводу вызова индикатора из советника (значение не совпадает с индикатором).

Было бы не плохо если бы както реагировали...

На вашу заявку ответили. Дали рекомендации. 

Почему она не обновилась в вашем профиле - разберемся. 

 
Renat:

Я для примера сделал такой код (поставил Ваши значения):

Он нормально отработал:

Как видно, никаких ошибок и несоответствий значений переменной нет.

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

Что нужно сделать:

  • с нуля перекопилировать свой код, перезапустить терминал (для гарантии) и проверить
  • если ошибка осталась, то выслать нам полный код через сервисдеск (или даже в форуме) - мы обязательно проверим

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

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

Поэтому я и писал выше что воспроизвести ошибку пока не могу(вернее она воспроизводиться но только в рамках локализованного проэкта).

Видимо тут какаято особенность дебагера или МЕ запоминать историю правок, возможно была критическая ошибка до инцидента на которую я не обратил внимания.

Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Программы MQL5 / Ошибки выполнения - Документация по MQL5
 
Urain:

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

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

Поэтому я и писал выше что воспроизвести ошибку пока не могу(вернее она воспроизводиться но только в рамках локализованного проэкта).

Видимо тут какаято особенность дебагера или МЕ запоминать историю правок, возможно была критическая ошибка до инцидента на которую я не обратил внимания.

Не помните, где именно был установлен DebugBreak()?

Пока никак не получается повторить.