Скачать MetaTrader 5

Как определить приближение окончания теста

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Как заработать на MQL5.community? Зайди и узнай!
Forex Trader
114257
Forex Trader 2005.12.19 08:12 
Мне нужен бар, на котором заканчивается прогон по истории. Можно предыдущий бар, а можно и предпредыдущий. Лишь бы хоть как-то узнать о приближении окончания прогона по истории котировок. Возможно-ли это?
Forex Trader
114257
Forex Trader 2005.12.19 08:17  
Это мне нужно, чтобы реализовать совет Роша "Возможен-ли одновременный прогон по нескольким символам?"
Forex Trader
114257
Forex Trader 2005.12.19 09:24  
А так не сгодится if(LocalTime()-zaderjka<0) ...., где задержка больше длительности одного бара?
Forex Trader
114257
Forex Trader 2005.12.19 09:41  
А так не сгодится if(LocalTime()-zaderjka<0) ...., где задержка больше длительности одного бара?

хм... а как задержку определять? Например, для часиков. Как-то высчитывать или забить константу?
Forex Trader
114257
Forex Trader 2005.12.19 09:55  
Для часов берешь zaderjka=3700; (т.е. больше 3600 сек)
Тогда на начале последнего бара обязательно условие выполнится.
Forex Trader
114257
Forex Trader 2005.12.19 10:00  
определяю вне функций
datetime zaderjka=3700;

в конце функции start()
if(LocalTime()-zaderjka<0) Print(TimeToStr(Time[0]));

В журнале никаких намёков.
Forex Trader
114257
Forex Trader 2005.12.19 10:03  
У меня есть мысль. Задать дату, меньше даты последнего бара и сравнивать с датой текущего бара. Но как-то не очень красиво это...
Forex Trader
114257
Forex Trader 2005.12.19 10:06  
Выложу весь код
//+------------------------------------------------------------------+
//|                                                    b-Account.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|   19.12.2005  Библиотека функций сбора информации о счёте.       |
//|                                                                  |
//|  Для использования добавить строки в функции start:              |
//|  if (prevTimeBar!=Time[0]) WriteAccountInfo();                   |
//|  prevTimeBar=Time[0];                                            |
//+------------------------------------------------------------------+

//------- Внешние параметры модуля -----------------------------------
extern string _Parameters_b_Account = "----- Параметры модуля";
extern string acOutFileName = "Account.csv";
extern int    acOutGroup    = 1;    // 1-мес, 2-кв, 3-год

//------- Глобальные переменные модуля сбора статистики --------------
bool   acFirstRun=True;
double acPrevBalance;
int    acPrevMonth, acPrevQuarter, acPrevYear;
datetime zaderjka=3700;

//+------------------------------------------------------------------+
//| Сбор и запись в файл информации о торговом счёте.                |
//+------------------------------------------------------------------+
void WriteAccountInfo() {
  string text="";

  if (acFirstRun) {
    text=";Прибыль;Баланс";
    WritingLineInFile(acOutFileName, text);
    acPrevBalance=AccountBalance();
    acPrevMonth=Month();
    acPrevQuarter=Quarter();
    acPrevYear=Year();
    acFirstRun=False;
  }

  if (acOutGroup==1) {
    if (acPrevMonth!=Month()) {
      text=acPrevYear+"."+acPrevMonth+";"+
           (AccountBalance()-acPrevBalance)+";"+
           AccountBalance();
      WritingLineInFile(acOutFileName, text);
      acPrevBalance=AccountBalance();
    }
  }
  if (acOutGroup==2) {
    if (acPrevQuarter!=Quarter()) {
      text=acPrevYear+" кв."+acPrevQuarter+";"+
           (AccountBalance()-acPrevBalance)+";"+
           AccountBalance();
      WritingLineInFile(acOutFileName, text);
      acPrevBalance=AccountBalance();
    }
  }
  if (acOutGroup==3) {
    if (acPrevYear!=Year()) {
      text=acPrevYear+";"+
           (AccountBalance()-acPrevBalance)+";"+
           AccountBalance();
      WritingLineInFile(acOutFileName, text);
      acPrevBalance=AccountBalance();
    }
  }
  acPrevMonth=Month();
  acPrevQuarter=Quarter();
  acPrevYear=Year();
  if(LocalTime()-zaderjka<0) Print(TimeToStr(Time[0]));
}

//+------------------------------------------------------------------+
//| Возвращает номер квартала                                        |
//+------------------------------------------------------------------+
int Quarter() {
  if (Month()>0 && Month()<4)  return(1);
  if (Month()>3 && Month()<7)  return(2);
  if (Month()>6 && Month()<10) return(3);
  if (Month()>9 && Month()<13) return(4);
}

//+------------------------------------------------------------------+
//| Запись строки в файл                                             |
//+------------------------------------------------------------------+
void WritingLineInFile(string FileName, string text) {
  int file_handle=FileOpen(FileName, FILE_READ|FILE_WRITE, " ");

	if (file_handle>0) {
		FileSeek(file_handle, 0, SEEK_END);
		FileWrite(file_handle, text);
		FileClose(file_handle);
	}
}
//+------------------------------------------------------------------+



Проблема в том, что ента штука не пишет данные последнего периода. Может есть обходной манёвр?

Forex Trader
114257
Forex Trader 2005.12.19 10:14  
а в deinit() нельзя вставить нужные действия?
Forex Trader
114257
Forex Trader 2005.12.19 10:22  
а в deinit() нельзя вставить нужные действия?

Наверно, можно. Только вот прийдётся одну функцию WriteAccountInfo() разбивать на две. Одна будет в старте, а другая в деините. Хреновато, хотя тоже решение. Хочется обеспечить лёгкость внедрения такой приблуды в любой советник.
Forex Trader
114257
Forex Trader 2005.12.19 10:35  
Это тоже можно отжельной функцией сделать, чтобы юзер не думал ;)
void NoDoubt()
{
if (prevTimeBar!=Time[0]) WriteAccountInfo();                   |
 prevTimeBar=Time[0];                           
}
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий