В Вашем случае (работа с Биржей) и контроль времени (я вижу Вы неправильно задали время - прочтите справку Тип datetime) - что-то около 10 часов одна минута лучше такой алгоритм:
1: получить (при помощи CopyRates)
Обращение по начальной позиции и количеству требуемых элементов
int CopyRates( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период int start_pos, // откуда начнем int count, // сколько копируем MqlRates rates_array[] // массив, куда будут скопированы данные );
с таймфрейма D1 один бар в массив MqlRates - теперь Вы знаете время открытия бара на таймфрейме D1
2: получить (при помощи CopyRates)
Обращение по начальной и конечной датам требуемого интервала времени
int CopyRates( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период datetime start_time, // с какой даты datetime stop_time, // по какую дату MqlRates rates_array[] // массив, куда будут скопированы данные );
с текущего таймфрейма бары в массив MqlRates. start_time - это время открытия бара на D1, stop_time - последнее известное время сервера (TimeCurrent()). К массиву текущего таймфрейма применить ArraySetAsSeries false - в таком случае индекс "0" будет равен начальному бару на текущем таймфрейме.
Имеет смысл проверять сколько элементов скопировано в массив текущего таймфрейма - если два и более - значит гарантированна есть сформированный бар сегодня на текущем таймфрейме.
этот индикатор использую позже. если сказать честно, то советник хотела сделать на примере другого советника из видеоурока, но не вышло и приходится учиться и тут. хотя так итак осваивать mql надо)). пыталась на примере XLO1 также выполнить это ТЗ, но код индикатора понятен не весь
этот индикатор использую позже. если сказать честно, то советник хотела сделать на примере другого советника из видеоурока, но не вышло и приходится учиться и тут. хотя так итак осваивать mql надо)). пыталась на примере XLO1 также выполнить это ТЗ, но код индикатора понятен не весь
Начните с малого: реализуйте шаг 1:
1: получить (при помощи CopyRates)
Обращение по начальной позиции и количеству требуемых элементов
int CopyRates( string symbol_name, // имя символа ENUM_TIMEFRAMES timeframe, // период int start_pos, // откуда начнем int count, // сколько копируем MqlRates rates_array[] // массив, куда будут скопированы данные );
с таймфрейма D1 один бар в массив MqlRates - теперь Вы знаете время открытия бара на таймфрейме D1
этот индикатор использую позже. если сказать честно, то советник хотела сделать на примере другого советника из видеоурока, но не вышло и приходится учиться и тут. хотя так итак осваивать mql надо)). пыталась на примере XLO1 также выполнить это ТЗ, но код индикатора понятен не весь
Написал для Вас советник - First Day Bar - Вам нужно смотреть в реализацию SearchTradingSignals(), на остальное не смотрите.
Цитата описания:
Идея торговой стратегии
Советник ориентируется на торговлю на бирже - на торговых счетах, где торговая сессия открывается утром, а не в полночь.
На текущем таймфрейме ожидаем пока окончательно сформируется первый бар и тогда принимает решение: если бар бычий - открываем BUY, если бар медвежий - открываем SELL (торговые сигналы можно переворачивать - подробнее в разделе "Дополнительные возможности").
Как формируется сигнал в функции SearchTradingSignals:
1. получаем с таймфрейма D1 текущий бар в массив MqlRates (rates_d1): копируем от начальной позиции ( start_pos) равной "0" один бар (count равен "1")
//--- bar opening time on D1 if(CopyRates(m_symbol.Name(),PERIOD_D1,start_pos,count,rates_d1)!=count) { return(false); }
2. сразу защита: в один день только одна сделка
datetime time_d1=rates_d1[0].time; if(time_d1==ExtLastDeal) // one deal on day return(true);
3. остаётся получить бары с текущего таймфрейма - копируем бары от времени time_d1 до текущего времени
//--- get bars on the current timeframe int copy=CopyRates(m_symbol.Name(),Period(),time_d1,TimeCurrent(),rates_current); if(copy<2) { return(true); }
и защита: если получили менее двух баров - значит у нас нет ещё сформированного первого бара за текущую торговую сессию и просто выходим.
Написал для Вас советник - First Day Bar - Вам нужно смотреть в реализацию SearchTradingSignals(), на остальное не смотрите.
Цитата описания:
ого, благодарю)) буду пробовать на этом примере делать
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
пробую написать первый советник по очень простым условиям.
вход в в лонг если 1ая свеча открытия бычья.
на данный момент трудность составляет обьяснить сове где есть первая свеча.
было реализованно такое решение:
когда впервый раз так сделала, то при тестировании на реальных котировках все работало, а при тесте на истории нет. даже если поставить if (timeCurrent > time); то на истории все равно не выводились надпись в журнал. после пробовала через iBarShift но и там не все получилось. и вот попробовала снова этот вариант, а он сейчас вообще всегда выводит в журнал "не работает" почему понять не могу.
может подскажете другие варианты решения этой задачи? напомню ТЗ если 1ая свеча на открытии бычья то вход в лонг