Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 255

 
Alexey Viktorov:
В текущее время 17:08 показывает 33. То-есть номер бара с временем 01:00 будет 32.
datetime t=StringToTime("01:00");

Не правильное решение. Если тест начать в 00.00, то такое вариант выдает 0 баров, а до ближайшего 01.00 часа должно быть 46 баров М30.

 
Nauris Zukas:

Не правильное решение. Если тест начать в 00.00, то такое вариант выдает 0 баров, а до ближайшего 01.00 часа должно быть 46 баров М30.

Я дал направление мысли, а как сделать Чтобы в 00:59 на минутках давал ближайший бар 01:00 это уж сам должен суметь. Ничего сложного в этом нет.

 
Alexey Viktorov:

Я дал направление мысли, а как сделать Чтобы в 00:59 на минутках давал ближайший бар 01:00 это уж сам должен суметь. Ничего сложного в этом нет.

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

 
Alexey Viktorov:
Единственная проблема, я никогда не забиваю свою ячейку памяти такими ненужностями как чему будет равно полученное значение, с учётом бара с указанным временем или меньше на 1. Я просто каждый раз проверяю.


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

 

Уважаемые знатоки, подскажите как вытащить в файл результаты тестирования в мт-4

для последующей обработки как рассказано тут https://www.mql5.com/ru/articles/1467?

Автоматическая оптимизация торгового робота в процессе реальной торговли
Автоматическая оптимизация торгового робота в процессе реальной торговли
  • 2007.04.16
  • Igor Malcev
  • www.mql5.com
В статье описана и представлена библиотека функций, позволяющая проводить оптимизацию входных параметров советника, запуская оптимизацию непосредственно из советника.
 
Nauris Zukas:


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

..... просто слов нет....

Как-же трудно догадаться, что если время меньше искомого, то надо убавить на сутки это искомое время.

 string st = "1:00";// можно и так писать "01:00"
 datetime t = StringToTime(st);

 if(TimeCurrent() < t)
  {
   MqlDateTime mqlDateTime; 
   TimeToStruct(t, mqlDateTime);
   mqlDateTime.day -= 1;
   t = StructToTime(mqlDateTime);
  }
 int b = Bars(_Symbol, PERIOD_M30, t, TimeCurrent());

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

 
Alexey Viktorov:

Как-же трудно догадаться, что если время меньше искомого, то надо убавить на сутки это искомое время.

Догадаться трудно как раз из за этого:

Alexey Viktorov:

Сделано без учёта выходных и проверок возможных ошибок выполнения.

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

 
Nauris Zukas:

Догадаться трудно как раз из за этого:

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

А почему-бы и нет? И этот вариант имеет право на жизнь. И даже заинтересовал меня. С некоторыми исправлениями получилась такая функция возвращающая номер бара указанного времени и периода.

int findBar(string strTime, ENUM_TIMEFRAMES period = PERIOD_CURRENT)
 {
  MqlDateTime mqlTime, mqlFindTime;
  TimeToStruct(StringToTime(strTime), mqlFindTime);
  datetime arrTime[];
  int copy = PeriodSeconds(PERIOD_D1)/PeriodSeconds(period);
  CopyTime(_Symbol, period, 0, copy, arrTime);
  ArraySetAsSeries(arrTime, true);
   for(int i = 0; i < copy; i++)
    {
     TimeToStruct(arrTime[i], mqlTime);
      if(mqlTime.hour == mqlFindTime.hour && mqlTime.min <= mqlFindTime.min)
      return(i);
    }
  return(-1);
}/********************************************************************/

.

 
Alexey Viktorov:

А почему-бы и нет? И этот вариант имеет право на жизнь. И даже заинтересовал меня. С некоторыми исправлениями получилась такая функция возвращающая номер бара указанного времени и периода.

.

Большое спасибо!
Вы упоминали о "ячейку памяти ", мои знания пока ограничены на этот счет. Это, на сколько я понимаю, влияет на скорость тестов эксперта? Это как-то измеряется или просто по скорости тестирование определяется?

 
Nauris Zukas:

Большое спасибо!
Вы упоминали о "ячейку памяти ", мои знания пока ограничены на этот счет. Это, на сколько я понимаю, влияет на скорость тестов эксперта? Это как-то измеряется или просто по скорости тестирование определяется?

Я говорил о своей собственной микросхеме памяти. :)))

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

Причина обращения: