Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 703

 
-Aleks-:

Я понимаю, но пока не осознаю...

 

Такой вопрос, при подключении к торговому серверу, как сильно грузиться у Вас процессор? У меня инструментов 10, роботов и индикаторов нет - нагрузка до 35% Phenom II 960T 5 ядер 3500Mhz. Если терминал такой прожорливый, то я вообще утрачу смысл с ним ковыряться... 

g посмотри здесь: https://www.mql5.com/ru/forum/99230

может поможет 

Загрузка процессора на МТ5 = 15-50 %, SVChost, Обновление Windows: РЕШЕНО
Загрузка процессора на МТ5 = 15-50 %, SVChost, Обновление Windows: РЕШЕНО
  • www.mql5.com
Всем привет друзья. Хотелось бы узнать у Вас. в каких случаях у Вас загрузка процессора от терминала мт5 достигает до 50...
 
-Aleks-:

Наверное я плохо объясняюсь... объект я рисую с учетом времени, т.е. первая точка - начала дня, а вторая начало следующего дня.

Мне нужно узнать для любых верхних ТФ:

1. Сколько можно нарисовать объектов на текущем ТФ всего, с учетом что на один бар с верхнего ТФ приходиться один объект

2. Где начинается и заканчивается объект

 

Да, изучал, но это ж муторно использовать  CopyTime() - неужели нет более простого варианта?

Аналог iTime() нужен. 

Очень плохо объясняете. Ничего не понял, Вы может картинками, по шагам, нарисуйте?

  1. Ответ: ноль. Так как на верхнем (как я понял это PERIOD_D1) у Вас один объект: "...  первая точка - начала дня, а вторая начало следующего дня".
  2. См. п.1.

Функция получения времени открытия баров:

//+------------------------------------------------------------------+
//| Get Time for specified bar index                                 |
//+------------------------------------------------------------------+
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0;
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0) time=Time[0];
   return(time);
  }


Пример вызова (если для текущего  символа и ткущего таймфрейма)

datetime time=iTime(0); // врем открытия бара №1
 
Vladislav Andruschenko:

g посмотри здесь: https://www.mql5.com/ru/forum/99230

может поможет 

Точно, была же у Вас проблема - даже в избранное занес тогда - забыл - спасибо - попробую!
 
Vladimir Karputov:

Очень плохо объясняете. Ничего не понял, Вы может картинками, по шагам, нарисуйте?

  1. Ответ: ноль. Так как на верхнем (как я понял это PERIOD_D1) у Вас один объект: "...  первая точка - начала дня, а вторая начало следующего дня".
  2. См. п.1.

Как же ноль то???

Вот скрин, как должно быть:

 

 
Vladimir Karputov:

Функция получения времени открытия баров:

//+------------------------------------------------------------------+
//| Get Time for specified bar index                                 |
//+------------------------------------------------------------------+
datetime iTime(const int index,string symbol=NULL,ENUM_TIMEFRAMES timeframe=PERIOD_CURRENT)
  {
   if(symbol==NULL)
      symbol=Symbol();
   if(timeframe==0)
      timeframe=Period();
   datetime Time[1];
   datetime time=0;
   int copied=CopyTime(symbol,timeframe,index,1,Time);
   if(copied>0) time=Time[0];
   return(time);
  }


Пример вызова (если для текущего  символа и ткущего таймфрейма)

datetime time=iTime(0); // врем открытия бара №1
Спасибо - опробую - как только отойду от чувства фрустрации.
 
-Aleks-:

Как же ноль то???

Вот скрин, как должно быть:

 

Картинка не соответствует описанию "первая точка - начала дня, а вторая начало следующего дня".

Судя по картинке Вам на любом таймфрейме (на любом таймфрейме меньше, чем PERIOD_D1) нужно рисовать ДВА объекта - причём по временным координатам эти два объекта должны быть внутри ОДНИХ суток:

Набросок

Я правильно понял? 

 
Vladimir Karputov:

Картинка не соответствует описанию "первая точка - начала дня, а вторая начало следующего дня".

Судя по картинке Вам на любом таймфрейме (на любом таймфрейме меньше, чем PERIOD_D1) нужно рисовать ДВА объекта - причём по временным координатам эти два объекта должны быть внутри ОДНИХ суток:

Я правильно понял? 

Не суть, сколько там объектов - их больше двух. Не обязательно период ограничивается D1 - он ограничивается временным интервалом кратным любому верхнему TF. Объекты должны быть внутри временного интервала - тут Вы правы.
 
-Aleks-:

Я понимаю, но пока не осознаю...

 

Такой вопрос, при подключении к торговому серверу, как сильно грузиться у Вас процессор? У меня инструментов 10, роботов и индикаторов нет - нагрузка до 35% Phenom II 960T 5 ядер 3500Mhz. Если терминал такой прожорливый, то я вообще утрачу смысл с ним ковыряться... 

Да не, не грузит сильно. Просто заметно отличие в скорости работы математики от 4-рки. Понравилось то что есть как бэ автоматическая подгрузка истории.

Однако не очень то мне такое нравится пока.

Ничего это по сути не дает. Всё равно надо синхронизировать разные валютные пары, всё равно дыры.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Где скачать нормальный MT4? Без онлайн установщика.".
 

В советнике вот такой код (лонг после растущей свечи, закрытие позиции после снижающейся свечи):

         if (Close[1]>Open[1])
                 {
                     printf("Сигнал на покупку");
                     trade.Buy(1);
                  }
         if (PositionsTotal()>0 && Close[1]<Open[1]) trade.PositionClose(Symbol());

 trade - объект класса CTrade

Происходит множество сделок (в тестере). Но некоторые сделки выполняются по нереальным ценам.

Например, при текущей цене 131540, максимуме свечи 131630, покупка происходит по цене 134570.

Записи в логе: 

2016.12.18 05:27:03.086 Core 1 2013.04.22 10:01:00   Сигнал на покупку

2016.12.18 05:27:03.086 Core 1 2013.04.22 10:01:00   exchange buy 1.00 RTS-6.13 at 134570 (131540 / 134570 / 131540)

2016.12.18 05:27:03.086 Core 1 2013.04.22 10:01:00   deal #6 buy 1.00 RTS-6.13 at 134570 done (based on order #6)

2016.12.18 05:27:03.086 Core 1 2013.04.22 10:01:00   deal performed [#6 buy 1.00 RTS-6.13 at 134570]

2016.12.18 05:27:03.087 Core 1 2013.04.22 10:01:00   order performed buy 1.00 at 134570 [#6 buy 1.00 RTS-6.13 at 134570]

2016.12.18 05:27:03.087 Core 1 2013.04.22 10:01:00   CTrade::OrderSend: exchange buy 1.00 RTS-6.13 [done]


Почему такое происходит? откуда берется левая цена (134570 в данном случае)? Подавляющее большинство сделок происходит по нормальным ценам, но одна из 20-30 сделок - по каким-то левым ценам. На графике такие сделки тоже отображаются сильно выше свечи.