Да что ж это творится то??? - страница 5

 
Andrey F. Zelinsky:

объявите переменную глобально и инициализируйте её при объявлении, например, int kk=0;

затем в OnTick() распринтуйте и поменяйте значение, например, Print("kk=",kk); ++kk;

затем поменяйте ТФ -- и посмотрите на результат.

это понятно, что глобальная переменная сохранит своё значение и при смене ТФ - но ничего подобного не происходит в тестере.

 
Andrey Dik:

это понятно, что глобальная переменная сохранит своё значение и при смене ТФ - но ничего подобного не происходит в тестере.

вот вы и нашли ответ на причину разности результатов.

при оптимизации идёт перебор параметров, т.е. перезапуск советника с другими настройками.

 
Andrey F. Zelinsky:

вот вы и нашли ответ на причину разности результатов.

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

 
Andrey F. Zelinsky:

проверьте, проще проверить, чем гадать.

Ренат выше написал, что оптимизатор работает "как часы" и что причина в коде -- он несколько раз порекомендовал сделать распринтовку -- допускаю, что её никто не делал.

проверял сам? есть четкие примеры, в каких случаях одиночный прогон отработает иначе, чем в составе оптимизации?

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

 
Andrey Dik:

проверял сам? есть четкие примеры, в каких случаях одиночный прогон отработает иначе, чем в составе оптимизации?

в данном случае не одиночный прогон.

 
Andrey F. Zelinsky:

проверьте инициализацию переменных, объявленных глобально.

если инициализации не в OnInit(), а при объявлении и если в коде идёт изменение их значений.

  1. Проверял.
  2. Переменные на то и переменные, что могут изменяться.
  3. Поправьте, если я ошибаюсь.
  • Если объявлена переменная, то под неё резервируется память.
  • Если она не инициализирована, то в ней может быть что угодно.
  • Какая разница, сразу её инициализировать нулём, или в нужном месте присвоить результат вычислений?
  • Если пытаться использовать непроинициализированную переменную, то компилятор выдаст предупреждение.

Простой пример:

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

Хотя.... Компилятор почему то уже не предупреждает, если вынести объявление в глобальную область (((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

Я ожидал другого...

 
Сергей Таболин:

  1. Проверял.
  2. Переменные на то и переменные, что могут изменяться.
  3. Поправьте, если я ошибаюсь.
  • Если объявлена переменная, то под неё резервируется память.
  • Если она не инициализирована, то в ней может быть что угодно.
  • Какая разница, сразу её инициализировать нулём, или в нужном месте присвоить результат вычислений?
  • Если пытаться использовать непроинициализированную переменную, то компилятор выдаст предупреждение.

Простой пример:

Хотя.... Компилятор почему то уже не предупреждает, если вынести объявление в глобальную область (((

Я ожидал другого...

Шла пятая страница, но mql5 кода всё не было... Также остается тайна покрытая мраком относительно тестирования: символа(символов), таймфрейма (таймфреймов), настроек тестирования.

 

Ну и ещё вопрос, прежде чем я начну распринтовку.

К примеру, записал результаты:

оптимизатор - buy;sell;sell;buy;buy;sell

тестер          - buy;sell;sell;buy;buy;sell;sell;buy;buy;sell

Каким образом данные об этих "лишних" сделках помогут понять с какого потолка они свалились? Наверное, нужно писать и цены предыдущих баров, или что ещё?

 
Vladimir Karputov:

Шла пятая страница, но mql5 кода всё не было... Также остается тайна покрытая мраком относительно тестирования: символа(символов), таймфрейма (таймфреймов), настроек тестирования.

С возвращением из отпуска )))

Тут всё видно.

 
Сергей Таболин:

  1. Проверял.
  2. Переменные на то и переменные, что могут изменяться.
  3. Поправьте, если я ошибаюсь.
  • Если объявлена переменная, то под неё резервируется память.
  • Если она не инициализирована, то в ней может быть что угодно.
  • Какая разница, сразу её инициализировать нулём, или в нужном месте присвоить результат вычислений?
  • Если пытаться использовать непроинициализированную переменную, то компилятор выдаст предупреждение.

Простой пример:

Хотя.... Компилятор почему то уже не предупреждает, если вынести объявление в глобальную область (((

Я ожидал другого...

если 'x' будет иметь тип double то приведённые примеры в корне неверны и состояние 'y' неопределено в обоих случаях

то есть возможно что где-то в глубинах нейросетей получаются или специальные значения double - inf-ы, nan-ы или сходные до eps величины 

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...