Ошибки, баги, вопросы - страница 1234

 
Tapochun:
Еще вопрос. Функция BarsCalculated() ведет себя одинаково при вызове из советника и индикатора?
А что не так?
[Удален]  
Renat:
А что не так?

Просто экспериментально я получил другие сведения. Как я понимаю, должны работать они одинаково. Но это не так. Так как сегодня воскресенье, проверить в текущем времени не получится. Но в тестере тоже работают по разному. Привожу два примера кода. Суть в следующему. Пытаемся получить данные с семи ТФ. Запускаем (и советник, и индикатор) не с самого старшего ТФ. Например, с М15. Если на текущем тике произошла синхронизация образования новой свечи и получения данных по этой свече через BarsCalculated() - производим запись количества рассчитанных баров по BarsCalculated() и время образования текущей свечи. Подробности в коде.

Индикатор.

Первый тик.

По каждому ТФ образуется новая свеча. Однако, на ТФ М1, М5, М15 - BarsCalculated() возвращает 0. Но, на ТФ М30, Н1, Н4, D1 - возвращает -1. Тут сразу возникает вопрос почему функция работает по-разному? Соответственно, если мы запускаем на ТФ М30 - для ТФ М1, М5, М15, М30 - BarsCalculated() возвращаем 0. И, соответственно, для ТФ Н1, Н4, D1 - возвращает -1. Из этого можно сделать вывод, что для старших ТФ данные изначально недоступны.

Второй тик. 

По логике кода - происходит синхронизация, т.е. запись параметров (все по логам примеров);

Третий и последующий тики.

Мы получаем новый бар по индикатору для ТФ М30, Н1, Н4, D1. Хотя, данные уже, вроде, были получены. А получается, что количество по ТФ, большим текущего больше на 1. Очень странное поведение. В дальнейшем (с использованием текущего примера) синхронизацию мы получить не сможем.

Советник.

Первый тик. 

Синхронизация происходит сразу же. Получение нового значения по BarsCalculated() происходит синхронно с образованием новой свечи.

Второй и последующие тики.

Логичное поведение функции. Все синхронизируется.

 

Запустите оба примера по тикам в тестере, сами все поймете. Текущее поведение функции разнится для советников и индикаторов. Также получение данных из индикаторов для старших ТФ запаздывает. Таким образом, я думаю что при запросе данных для М15 и М30 они не будут доступны в один и тот же момент. Актуальные данные - точно нет!

Если я все же ошибаюсь, подскажите как правильно получать данные индикатора со старшего ТФ? Спасибо.

 
//+------------------------------------------------------------------+
//| Search position of an element in a sorted list                   |
//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
  {
   int      i,j,m;
   CObject *t_node=NULL;
//--- check
   if(m_data_total==0)
      return(NULL);
//--- check the pointer is not needed
   i=0;
   j=m_data_total;
   while(j>=i)
     {
      //--- ">>1" is quick division by 2
      m=(j+i)>>1;
      if(m<0 || m>=m_data_total)
         break;
      t_node=GetNodeAtIndex(m);
      if(t_node.Compare(element,m_sort_mode)==0)
         break;
      if(t_node.Compare(element,m_sort_mode)>0)
         j=m-1;
      else
         i=m+1;
      t_node=NULL;
     }
//--- result
   return(t_node);
  }
Стандартная библиотека  CList
Зачем два раза вызывать Compare ??? Это может быть дорогая операция (если надо проверить равенство больших объектов, а не эквивалентность по некоторым полям).
Можно ведь просто сохранить результат после первого вызова Compare.
[Удален]  
Renat:
Мне стоит здесь ждать от Вас ответа? Или лучше оформить в сервисдеск?
 

Откуда берутся эти значки снизу на графике?

Никакого индикатора на графике нет, а значки появляются каждый раз.  Я уже замучался их удалять.  Как отключить эту хрень?  В настройках терминала не нашёл ничего связанного с этим.

 
meat:

Откуда берутся эти значки снизу на графике?

Никакого индикатора на графике нет, а значки появляются каждый раз.  Я уже замучался их удалять.  Как отключить эту хрень?  В настройках терминала не нашёл ничего связанного с этим.

Это события из вкладки "Календарь". Для удаления: правой кнопкой мышки внутри вкладки "Календарь" -> "Показать на графиках" -> "Удалить все события.

P. S. И снимите галочку с пункта "Автообновление". Теперь новые события Календаря не будут отображаться на графике.

 
crOss:
Возьмите любой эксперт (из примеров от MetaQuotes),запустите под билдом 975 на определённом периоде и с параметрами,
получите результаты работы, т.е. график кривой доходности и таблицу сделок.


Теперь запустите этот же эксперт под билдом 1010 на этом же периоде и с этими же параметрами, получите совершенно другие результаты...

P.S. Метатестер 32-разрядный

Какие из результатов являются верными? В билде 975 или в билде 1010?
 

Всем здрасте) Помогите пожалуйста запустить таймер:

 

 int OnInit()

{

   bool setTimer=EventSetTimer(60);

   Print("Установка таймера"); 

 }

void OnTimer()

{

   Print("Прохождение времени"); 

} 

 

 Вопрос: почему не работает? Весь мозг себе вынес...(((

 

В какой программе запускаете? может вы в скрипте пробуете? Измените на индикатор или эксперт.
И добавьте 

   Print("Установка таймера"); 
   return INIT_SUCCEEDED;

 
JAG_MistR:

 Вопрос: почему не работает? Весь мозг себе вынес...(((

Возможно у вас не хватило терпения подождать 60 секунд? %)

ALXIMIKS

В скрипте таймер не работает.