посл. сделку за 24 часа - дальше не надо перебирать историю.
Значит так:
Индикатор использует код создания, перемещения и удаления вертикальной линии из справки OBJ_VLINE. (пока в индикаторе работает только создание линии). Имя линии задаётся во входном параметре "Vertical line name"
Для минимизации нагрузки опрашиваем истории раз в минуту. Для этих целей в области глобальных переменных нашей программы (в данном случае индикатора) объявим переменную ExtLastMove
- в этой переменной будет хранится время последнего обращения к торговой истории.
Дальше в OnCalcalculate() от текущего времени (времени последней котировки по любому символу TimeCurrent) отнимаем сохранённое время ExtLastMove и если разница менее 60 секунд - выходим
если разница окажется больше - значит записываем в ExtLastMove новое время.
Обращение к торговой истории происходит в LastProfitForPeriod().
Здесь используются две даты: от и до. "До" выставляем в будущее (текущее время плюс одни сутки), а "от" получаем вычитанием суток из текущего времени
datetimefrom_date = time_current-60*60*24; // time one day agodatetimeto_date = time_current+60*60*24; // time from the future :)double last_profit = LastProfitForPeriod(from_date,to_date);
Comment("Last profit: ",DoubleToString(last_profit,2));
Владимир, большое спасибо за ваш код и особенно за комментарии к его фрагментам! Не понял только, зачем нам to_date равное стуки в будущее? Может все-таки до текущего момента? В будущем результат сделки вроде не определить :) Или нам эти сутки в будущее необходимы, чтобы в будущем времени рисовать линию? Еще по циклу вопрос. Как я понял, мы подгружаем массив с данными по сделкам и перебираем массив с нулевой сделки к последней, сравнивая время с последним записанным и перезаписываем переменную last_time, если deal_time оказывается более поздней. А может быть можно наоборот массив перебирать с конца? Собственно самый последний элемент массива и будет последней закрытой сделкой, по которой нам нужны данные? Возможно, я допускаю какие-то логические ошибки - прошу строго не судить :)
Не понял только, зачем нам to_date равное стуки в будущее?
Так нужно. Чтобы гарантированно получить "от" и до текущего времени.
А может быть можно наоборот массив перебирать с конца?
Если стоит задача найти последнюю сделку, то Массив необходимо перебирать и искать именно время - мало ли как чего случится или внутренняя логика ядра поменяется и сделки будут скинуты вразнобой.
Так нужно. Чтобы гарантированно получить "от" и до текущего времени.
Если стоит задача найти последнюю сделку, то Массив необходимо перебирать и искать именно время - мало ли как чего случится или внутренняя логика ядра поменяется и сделки будут скинуты вразнобой.
Ок, понял. В принципе с учетом ограничения истории в 24 часа сколь-либо существенной нагрузки явно не будет при переборе данных :)
Я правильно понял, что переменные last_time и result - это и есть искомые значения, с которыми работаем. А имено result определяет, на сколько по времени будет смещена (перерисована) линия в будущее. Тогда и блок кода "Profit for the period" надо поставить перед блоком "Move the vertical line", чтобы двигать линию уже с учетом полученных данных по последней сделке. Всё верно или что-то путаю?
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Хочу уточнить термин "последняя сделка".
Искать нужно последнюю сделку внутри текущего дня? Или на последние N-дней?
посл. сделку за 24 часа - дальше не надо перебирать историю.
посл. сделку за 24 часа - дальше не надо перебирать историю.
Значит так:
Индикатор использует код создания, перемещения и удаления вертикальной линии из справки OBJ_VLINE. (пока в индикаторе работает только создание линии). Имя линии задаётся во входном параметре "Vertical line name"
Вертикальная линия создаётся в OnOnit():
Для минимизации нагрузки опрашиваем истории раз в минуту. Для этих целей в области глобальных переменных нашей программы (в данном случае индикатора) объявим переменную ExtLastMove
- в этой переменной будет хранится время последнего обращения к торговой истории.
Дальше в OnCalcalculate() от текущего времени (времени последней котировки по любому символу TimeCurrent) отнимаем сохранённое время ExtLastMove и если разница менее 60 секунд - выходим
если разница окажется больше - значит записываем в ExtLastMove новое время.
Обращение к торговой истории происходит в LastProfitForPeriod().
Здесь используются две даты: от и до. "До" выставляем в будущее (текущее время плюс одни сутки), а "от" получаем вычитанием суток из текущего времени
Пока всё, итак много букофф...
Не понял только, зачем нам to_date равное стуки в будущее? Может все-таки до текущего момента? В будущем результат сделки вроде не определить :) Или нам эти сутки в будущее необходимы, чтобы в будущем времени рисовать линию?
Еще по циклу вопрос.
Как я понял, мы подгружаем массив с данными по сделкам и перебираем массив с нулевой сделки к последней, сравнивая время с последним записанным и перезаписываем переменную last_time, если deal_time оказывается более поздней. А может быть можно наоборот массив перебирать с конца? Собственно самый последний элемент массива и будет последней закрытой сделкой, по которой нам нужны данные?
Возможно, я допускаю какие-то логические ошибки - прошу строго не судить :)
Так нужно. Чтобы гарантированно получить "от" и до текущего времени.
А может быть можно наоборот массив перебирать с конца?
Если стоит задача найти последнюю сделку, то Массив необходимо перебирать и искать именно время - мало ли как чего случится или внутренняя логика ядра поменяется и сделки будут скинуты вразнобой.
Так нужно. Чтобы гарантированно получить "от" и до текущего времени.
Если стоит задача найти последнюю сделку, то Массив необходимо перебирать и искать именно время - мало ли как чего случится или внутренняя логика ядра поменяется и сделки будут скинуты вразнобой.
Ок, понял. В принципе с учетом ограничения истории в 24 часа сколь-либо существенной нагрузки явно не будет при переборе данных :)
Ок, понял. В принципе с учетом ограничения истории в 24 часа сколь-либо существенной нагрузки явно не будет при переборе данных :)
Итак, остаётся последний штрих - в зависимости от полученной прибыли перемещать линию.
НАпомните какие там правила перемещения?
Всё верно или что-то путаю?
Вот нашёл пояснение, почему параметр "до" нужно делать в будущее:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Renat Fatkhullin, 2016.11.04 12:43
Никогда не делайте TimeCurrent() как конечную дату, делайте TimeCurrent()+86400, чтобы гарантированно захватить все оконечные сделки.
TimeCurrent - это не точное последнее время, а "последнее известное при апдейтах время сервера", что не есть 100% точное время. Особенно на старте.