- Как вычислить уровень Stop Out ?
- Вопросы от начинающих MQL5 MT5 MetaTrader 5
- Как можно сформировать более старшие графики, из минутного в МТ4
int iBarShift( string symbol, int timeframe, datetime time, bool exact=false) Поиск бара по времени. Функция возвращает смещение бара, которому принадлежит указанное время. Если для указанного времени бар отсутствует ("дыра" в истории), то функция возвращает, в зависимости от параметра exact, -1 или смещение ближайшего бара. Параметры: symbol - Символьное имя инструмента. NULL означает текущий символ. timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика. time - Значение времени для поиска. exact - Возвращаемое значение если бар не найден. FALSE - iBarShift возвращает ближайший. TRUE - iBarShift возвращает -1. Пример: datetime some_time=D'2004.03.21 12:00'; int shift=iBarShift("EUROUSD",PERIOD_M1,some_time); Print("shift of bar with open time ",TimeToStr(some_time)," is ",shift);
Грубо говоря - я знаю так:
1. Определяешь datetime начала суток на дневках. Пусть это DT.
2. Вызываешь iBarShift(), указывая PERIOD_M15, DT и последний параметр false.
3. Проверяешь, входит ли найденный бар в твои сутки. Если да -
нужный бар найден, и затем ищешь внутри него свои экстремумы.
4. Если нет, то, значит, первый тик поступил поздне чем в 00:15, и
"первой" 15-минутки с открытием в 00:00 нет. Значит, тебе вернулась
последняя 15-минутка предыдущих суток. Вычитаешь из полученного
индекса единицу, получаешь искомый первый 15-минутный внутри
твоих суток (у него время открытия больше 00:00). А дальше ищешь
внутри него экстремумы.
Если кто подскажет способ попроще, буду рад.
P.S. Можно и попроще - просто тупо сделать цикл с добавлением 15*60
к DT и проверять существование 15-минутного бара с таким временем
открытия. Концептуально это уже не так навороченно. Тут уже
в iBarShift() последний параметр true.
А почему не работает такая конструкция? Или может она не работает только в тестере? if(Hour()==0 && Minute()>15 && Minute()16) { double High15_1 = iHigh(NULL,15,1); double Low15_1 = iLow(NULL,15,1); } Мне нужно определять High и Low первого 15-бара не в истории, а каждые сутки в реальном времени и установливать отложенные ордера BuyStop и SellStop в момент открытия второго с начала суток 15-минутного бара.
А объявлять переменные надо вне условия.
Это знак "меньше" почему то на сайт не проходит, я два раза пробовал-не получается. Проверил, объявил переменные вне условия if, однако такой код не работает.
Сделайте Minute()==15 и всё заработает.
Можно и попроще.
datetime OpenTime = iOpen(NULL,PERIOD_D1,0); int BarM15 = iBarShift(NULL,PERIOD_M15,OpenTime,true); double MyHigh = iHigh(NULL,PERIOD_M15,BarM15); double MyLow = iLow(NULL,PERIOD_M15,BarM15);
Увеличил интервал для срабатывания до трёх минут, сделал для опыта советник с Comment() и посадил его на график реального счёта. Срабатывает. Но вот в тестере в визуальном режиме не работает. Видимо это связано с особенностями моделирования серверного времени в тестере. Спасибо всем кто откликнулся на мой вопрос!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования