Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй программу в Маркете и продавай ее миллионам трейдеров!
Ronen Kagan
807
Ronen Kagan 2007.11.06 19:08 
Тестирую эксперта,а результаты сохраняю в файл запуская код по сохранению данных в файл в deinit(),
но что - то не придумывается простой способ как узнать номер прохода :(
не открывать же файл с результатами программно и считать в нем количество строчек??!!

Или я чтото упустил? Есть какаято функция такая??
Dmitry Fedoseev
41262
Dmitry Fedoseev 2007.11.06 19:10  
нет такой функуции. сделайте еще один файл и пишите в него номер прохода.
Ronen Kagan
807
Ronen Kagan 2007.11.06 19:13  
Хмм... ужасный способ конечно,но походу так и придется делать, если чтото более нормальное не подскажут :(
хотя можно через Excel но это тоже коряво как-то...
Ronen Kagan
807
Ronen Kagan 2007.11.06 19:25  
А нее,придумал... через
GlobalVariableSet("passNo",pass);
все работает отлично.... всем спасибо :)
ReasonMan
91
ReasonMan 2011.08.10 17:05  

Может кому пригодится:

#import "winmm.dll"
int timeGetTime();  // Returns the system time (time elapsed since Windows was started), in milliseconds.
 



int iPassNum;       // Глобальный счётчик проходов, может использоваться внутри советника
 

int init()
{
   int iPassTime; // Время последнего изменения глобального счётчика проходов
   
   if (IsOptimization() == true) {
      iPassTime = timeGetTime();
      // Сколько времени прошло с момента последнего вызова init, больше 5 секунд?
      if (iPassTime - GlobalVariableGet("PassTime") > 5000) {  // Тестов давно не было (больше 5000 милисекунд)
         iPassNum = 1;
      } else {           // Тесты недавно были - продолжаем счёт
         iPassNum = GlobalVariableGet("PassNum");
         iPassNum++;
      }
      GlobalVariableSet("PassTime", iPassTime);
      GlobalVariableSet("PassNum", iPassNum);
   }
}

Идея: Запоминаем системное время Windows (через API) и сравниваем его с новым временем при каждом проходе. Если разница больше, чем, например, 5 секунд (5000 милисекунд), значит это новая оптимизация, если меньше, значит ещё идёт текущая. Использовать время терминала нельзя, так как оно эмулируется по тикам и на каждом проходе одинаковое. Последние время и номер хранятся в глобальных переменных терминала.

В переменной iPassNum - номер текущего прохода.

Условия правильной работы:

1. Должен быть разрешён импорт DLL.

2. Должно быть отключено "Пропустить бесполезные результаты", иначе будет несовпадение номеров из-за пропущеных проходов.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий