Обсуждение статьи "Обработчик события "новый бар"" - страница 6

 

Всем доброго дня и хорошего настроения!

Интересно, а такой код:

bool IsNewBar()
  {
   static datetime TimeOld;
   datetime TimeNew[1];
   CopyTime(_Symbol,PERIOD_CURRENT,0,1,TimeNew);
   if(TimeNew[0]!=TimeOld)
     {
      TimeOld=TimeNew[0];
      return(true);
     }
   return(false);
  }

будет работать? Нашёл его на сайте MQL5 очень давно и уже не помню у кого скопировал.

С уважением, Владимир.

 
MrBrooklin #:

Всем доброго дня и хорошего настроения!

Интересно, а такой код:

будет работать? Нашёл его на сайте MQL5 очень давно и уже не помню у кого скопировал.

С уважением, Владимир.

Кстати да я то же использую этот код и вполне работает, только он у меня чуть шире, можно использовать для любого ТФ!

bool isNewBar(string INST,int K, ENUM_TIMEFRAMES timeFrame)
  {
//----
   bool res=false;               // переменная результата анализа  
   int  i=0;                     // номер ячейки массива old_Times[]     
   datetime new_Time[1];         // время нового бара

   switch(K)
     {
      case 0:  i= 0; break;
      case 1:  i= 1; break;
      case 2:  i= 2; break;
      case 3:  i= 3; break;
      case 4:  i= 4; break;
      case 5:  i= 5; break;
      case 6: i= 6; break;
      case 7: i= 7; break;
      case 8: i= 8; break;
      case 9: i= 9; break;
      case 10: i=10; break;
      case 11:  i=11; break;
      case 12:  i=12; break;
      case 13:  i=13; break;
     }
   // скопируем время последнего бара в ячейку new_Time[0]   
   int copied=CopyTime(INST,timeFrame,0,1,new_Time);
   
   if(copied>0) // все ок. данные скопированы
      {
      if(old_Times[i]!=new_Time[0])       // если старое время бара не равно новому
         {
         if(old_Times[i]!=0) res=true;    // если это не первый запуск, то истина = новый бар
         old_Times[i]=new_Time[0];        // запоминаем время бара          
         }
      }      
//----
   return(res);
  }
 
switch(K)
     {
      case 0:  i= 0; break;
      case 1:  i= 1; break;
      case 2:  i= 2; break;
      case 3:  i= 3; break;
      case 4:  i= 4; break;
      case 5:  i= 5; break;
      case 6: i= 6; break;
      case 7: i= 7; break;
      case 8: i= 8; break;
      case 9: i= 9; break;
      case 10: i=10; break;
      case 11:  i=11; break;
      case 12:  i=12; break;
      case 13:  i=13; break;
     }

ну вааще))

 
Dmitry Fedoseev #:

ну вааще))

а кто в К? вроде все посмотрел

массив сравнение

, я чето вообще разочаровался в новом баре, не совпадение сделок, по не понятной мне причине, тупо принта нет, т.е. не сработка или сериесластбар или просто по времени лаг, пинг у меня высокий (140), может в этом дело

перепробовал много вариантов Newbar, везде затуп был, тестировал в 3 терминалах на одном компьютере.

убрал newbar и все терминалы несколько дней торговали на сервере 1в1 100%

 
Fast235 #:

а кто в К? вроде все посмотрел

массив сравнение

, я чето вообще разочаровался в новом баре, не совпадение сделок, по не понятной мне причине, тупо принта нет, т.е. не сработка или сериесластбар или просто по времени лаг, пинг у меня высокий (140), может в этом дело

В параметрах К. 

Потому что с этой функцией нет второй попытки в случае ошибки с ордером.

 

причем торговля не в OnTick, а по OnChartEvent(spy), причем в максимально быстрой реализации, только через id, остальные не передаются

7 символов, прохождение одного символа на большое кол-во условий и подсчетов, в американской сессии, 0,5-0,7% ryzen 3700x

пробовал даже новый бар через новый бар с индикатора, тоже расходятся сделки, 5 нормально и то в одном, то в другом затуп.

 
выбросил это вообще, все равно алгоритм смотрит на прошлый бар, и в этом случае есть даже преимущество, если отмена сделки, никуда она не денется в пределах ограничения спреда и "отклонения"
 
Mihail Marchukajtes #:

Кстати да я то же использую этот код и вполне работает, только он у меня чуть шире, можно использовать для любого ТФ!

Спасибо, Михаил! Добавлю в свою библиотеку функций.

С уважением, Владимир.

 
Armen Shahinyan #:

Проще данного метода у меня нет.
Отслеживает время открытия текущего бара и при каждом тике сравнивает их.


Первую функцию выкиньте из кода. И жизнь наладится. 

 

Вообще, интересны 2 обстоятельства: 

1. Всех зачем-то забанили. 

2. Новый бар всегда отличается по времени от предыдущего. По любому времени, потому, как оно всегда слева направо идёт. Берите любое. Если не совпадёт с таким - же предыдущим, то бар - новый.