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

У меня было такое, что оптимизация кода ускоряла выполнение в 450 раз :).
Igor Makanu:

хороший вариант, протестирую

ЗЫ: код в очередной раз переписываю, чтобы в оптимизаторе быстрее работал (результаты было 5ч, сейчас 1,5 ч !!!)

вот сейчас наткнулся в справке на printf(), и решил проверить все свои принты, где нужно заменить....ну заменил и стала оптимизация  22 ч ....нашел где накосячил, но естественно сразу мысли, что дело все в  printf()  !!!

)))


попробовал проверить работу printf() в оптимизаторе так:

пока сразу получил, что ожидал: 

2019.09.20 11:29:16.611 Core 1 genetic pass (0, 607) tested with error "critical runtime error 503 in OnTick function (zero divide, module Experts\)" in 0:00:00.048


ожидалось, что если написано "PrintFormat() не выполняется." то и должен это получить

Аха. И получите разное значение переменной xx при одиночном тестировании и при оптимизации.

Не выполняется только вызов функции printf.

Slava:

Аха. И получите разное значение переменной xx при одиночном тестировании и при оптимизации.

Не выполняется только вызов функции printf.

да понятно, что пользователь может и так поступить

но проверить то как printf() ? 

ЗЫ: хотя, если Разработчик сказал, что не выполняется, тогда можно и не проверять

Igor Makanu:


но проверить то как printf() ? 

Сравнить время одного прохода из оптимизации и время одиночного прохода

[Удален]
Slava:

Продублирую:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Alexey Kozitsyn, 2019.09.18 09:34

Несколько вопросов по платформе:

1. Будет ли добавлен допустимый диапазон торговли для ВП через MOEX (например, EURRUB_TOM)? Сейчас нельзя точно узнать, будет ли выставлена лимитка, т.к. нет доступа к диапазону (макс. и мин. возможным ценам). Добавьте, пожалуйста.

2. Можно ли добавить в терминал и метаэдитор автосохранение состояния каждые N минут? Очень не хватает, т.к. при внезапном разрыве связи возвращаешься к состоянию на момент старта программы с потерей всех изменений! Очень напрягает!

По первому пункту: поймите, что невозможно нормально торговать, если не знать ограничений! Почему у каких-то инструментов эти ограничения можно получить, а у каких-то нет!?

справка опять некорректная, читаю: https://www.mql5.com/ru/docs/math/mathmax

Функция возвращает максимальное из двух числовых значений.

double  MathMax(
   double  value1,     // первое число
   double  value2      // второе число
   );

вижу, что вариантов нет, тип функции  fmax() double , ищу где мог потерять дробное значение, после поисков всего и вся, провожу тест:

void OnStart()
{
   long slvl = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
   int sl = 300;
   Print(typename(fmax(slvl,sl)));
}

2019.09.20 18:06:34.194 tst (EURUSD,H1) long

ЗЫ: отвечаю сразу, я справку дочитал до конца и вижу фразу: "Тип возвращаемого значения соответствует старшему типу." ...имхо, это не серьезно, что в 99% случаев достаточно посмотреть в справке описание функции, чем искать потаенный смысл между строк - написано тип результата fmin() --> double - значит вариантов как бы нет
Что означает предупреждение в журнале экспертов, после завершения скрипта?
2 leaked strings left

Как это можно полечить?
Переводчик переводит, две утечки строк слева. Но не понятно, слева чего, строки?

В скрипте используется  JAson  библиотека.
Из dll принимается Json строка через memcpy_s, в dll эта строка имеет тип const wchar_t*
В #import параметр экспортированной функции, объявлен как  string & str, то есть по ссылке, а сама строка объявлена как string str;
Далее строка str десериализуется 

js.Deserialize(str); 

Проблема именно в десериализации пришедшей строки из memcpy_s.

Так как если в скрипте создать проверочную json строку 

string str = "{\"s\":\"1000\"}";

то предупредительное сообщение не появляется.
Десериализую пришедшую строку из dll, снова появляется предупреждение после завершения скрипта, 2 leaked strings left 

Пробовал пришедшею строку преобразовать в char массив StringToCharArray, и десериализовать char массив.
Но проблема остаётся, и так же появляется 2 leaked strings left.
В чём может быть причина?

Из dll попробовал явно передать проверочную json строку 
L"{\"s\":\"1000\"}"
Предупреждение 
2 leaked strings left исчезло.
Получается, что в dll функция которая читает сетевые данные, вызывает такое поведение.
Но не понятна сама трактовка 
2 leaked strings left, что она конкретно означает и куда дальше копать?
Roman:
Из dll попробовал явно передать проверочную json строку 
Предупреждение 
2 leaked strings left исчезло.
Получается, что в dll функция которая читает сетевые данные, вызывает такое поведение.
Но не понятна сама трактовка 
2 leaked strings left, что она конкретно означает и куда дальше копать?

Если в недословном переводе, то: "2 строки вызывают утечку памяти".

А дословно - примерно так: остались 2 текущие строки.

в последнем билде мт4 в тестере не работают функции iHigh,iTime для тамйм фреймов выше дневного

iHigh(NULL,PERIOD_W1,0) = 0
iTime(NULL,PERIOD_W1,0) = NULL