неправильно работает.

 

пробую написать первый советник по очень простым условиям.

вход в в лонг если 1ая свеча открытия бычья. 

на данный момент трудность составляет обьяснить сове где есть первая свеча. 

было реализованно такое решение:

void OnTick()
  {
       datetime time = D'10:01:00';
   //Print(time);    
    datetime timeCurrent = TimeCurrent();
    //Print (timeCurrent);
    
    if (timeCurrent == time);
      { 
        Print("не работает");
      }
  }

когда впервый раз так сделала, то при тестировании на реальных котировках все работало, а при тесте на истории нет. даже если поставить if (timeCurrent > time); то на истории все равно не выводились надпись в журнал. после пробовала через iBarShift но и там не все получилось. и вот попробовала снова этот  вариант, а он сейчас вообще всегда выводит в журнал "не работает" почему понять не могу. 

может подскажете другие варианты решения этой задачи? напомню ТЗ если  1ая  свеча на открытии бычья то вход в лонг  

 
А разве Ваша тема индикатор XLO1 не помогла?
 

В Вашем случае (работа с Биржей) и контроль времени (я вижу Вы неправильно задали время - прочтите справку Тип 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" будет равен начальному бару на текущем таймфрейме. 

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

 
Vladimir Karputov:
А разве Ваша тема  индикатор XLO1 не помогла?

этот индикатор использую позже. если сказать честно, то советник хотела сделать на примере другого советника из видеоурока, но не вышло и приходится учиться и тут. хотя так итак осваивать mql надо)). пыталась на примере XLO1 также выполнить это ТЗ, но код индикатора понятен не весь

 
sofi563:

этот индикатор использую позже. если сказать честно, то советник хотела сделать на примере другого советника из видеоурока, но не вышло и приходится учиться и тут. хотя так итак осваивать mql надо)). пыталась на примере XLO1 также выполнить это ТЗ, но код индикатора понятен не весь

Начните с малого: реализуйте шаг 1:

1: получить (при помощи CopyRates

Обращение по начальной позиции и количеству требуемых элементов

int  CopyRates( 
   string           symbol_name,       // имя символа 
   ENUM_TIMEFRAMES  timeframe,         // период 
   int              start_pos,         // откуда начнем  
   int              count,             // сколько копируем 
   MqlRates         rates_array[]      // массив, куда будут скопированы данные 
   );

с таймфрейма D1 один бар в массив MqlRates - теперь Вы знаете время открытия бара на таймфрейме D1

 
sofi563:

этот индикатор использую позже. если сказать честно, то советник хотела сделать на примере другого советника из видеоурока, но не вышло и приходится учиться и тут. хотя так итак осваивать 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);
     }

и защита: если получили менее двух баров - значит у нас нет ещё сформированного первого бара за текущую торговую сессию и просто выходим.


 
Vladimir Karputov:

Написал для Вас советник - First Day Bar - Вам нужно смотреть в реализацию  SearchTradingSignals(), на остальное не смотрите.

Цитата описания:

ого, благодарю)) буду пробовать на этом примере делать