Скачать MetaTrader 5

Обсуждение статьи "Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Не понимаешь, как работает сервис Торговых Сигналов? Прочти соответствующую статью!
MetaQuotes Software Corp.
Модератор
181040
MetaQuotes Software Corp. 2010.05.17 13:07 

Опубликована статья Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов:

В последнее время возрос интерес к кластерному анализу рынка FOREX. MQL5 открывает новые возможности исследования закономерностей движения валютных пар. Важной преимуществом MQL5, по сравнению с MQL4, является возможность использования неограниченного количества индикаторных буферов. В данной статье описан пример построения мультивалютного индикатора.

Автор: Alexey

Prival
4547
Prival 2010.05.18 11:10  

было бы полезно в таких индикаторах еще  и сортировать вот это

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

 

Alexey Klenov
1883
Alexey Klenov 2010.05.18 16:24  
Prival:

было бы полезно в таких индикаторах еще  и сортировать вот это

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

 

Функции готовой нет, но думаю набросать не составит особого труда.

19.05.2010

Вот реализовал

Файлы:
Prival
4547
Prival 2010.05.19 19:31  

Спасибо.

Единственное хочу обратить ваше внимание, что способ синхронизации не всегда работает. Вот картинка. Дыра в котировках сутки, но все синхронизировано (((.

Это очень плохо. Почему так не могу понять, и самое главное, что с этим делать?

 


Alexey Klenov
1883
Alexey Klenov 2010.05.20 08:06  
Prival:

Спасибо.

Единственное хочу обратить ваше внимание, что способ синхронизации не всегда работает. Вот картинка. Дыра в котировках сутки, но все синхронизировано (((.

Это очень плохо. Почему так не могу понять, и самое главное, что с этим делать?

 


В индикаторе используется 2 вида синхронизации

1 по количеству баров (на графике баров должно быть больше чем требуемая история по умолчанию 500 баров) это условие видимо у вас выполнено.

2 по времени открытия нулевого бара на каждой валютной паре- это условие видимо тоже выполнено.

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

Как буду чуть по свободнее - сделаю и этот вид.

Prival
4547
Prival 2010.05.30 17:12  
olyakish:

....

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

По вашему образу и подобию сделал функцию bool init_tf(…) 

//+------------------------------------------------------------------+
//| инициализация графиков задействованных валютных пар              |
//| и проверка синхронности данных                                   |
//+------------------------------------------------------------------+
//| вход                                                             |
//| mas[]  - массив имен необходимых символов                        |
//| time_0 - текущее время бара time[0]                              |
//| count_Bars - необходимое количество баров                        |
//+------------------------------------------------------------------+
bool init_tf(string &mas[], datetime time_0, int count_Bars) { 
   bool     rez=false;              // флаг успешного завершения
   int      copied=0,               // количество скопированных данных
            counter=0,              // счетчик ошибок
            tmp_bars=0;             // для проверки количества доступных баров
   datetime tmp_time[1];            // массив для проверки времени бара
   
   f_comment("Идет сихронизация");
     
   for(int i=0; i<count_symbol; i++)  {
      //Print("i=",i," ",count_symbol," ",mas[i]);
      tmp_bars=Bars(mas[i],PERIOD_CURRENT);
      if(tmp_bars<count_Bars) { // проверка количества баров
         Print("i=",i," Недостаточно баров (", mas[i],"-",fTimeFrameName(_Period),") MaxBars=",MaxBars," > Bars=",tmp_bars);
         counter++;
      }
      ResetLastError();
      copied = CopyTime(mas[i],PERIOD_CURRENT,0,1,tmp_time);
      if(copied < 1) { // ошибка копирования
         Print("i=",i," Ошибка копирования (", mas[i],"-",fTimeFrameName(_Period),") №",_LastError," (",ErrorDescription(_LastError),")");
         counter++;
      }
      if(tmp_time[0]!=time_0) { // не совпало время
         Print("i=",i," Нет синхронизации времени (", mas[i],"-",fTimeFrameName(_Period),") дельта =",(long)(time_0-tmp_time[0])/60," мин");
         counter++;
      }
   }// end for(int i=0; i<k; i++)
   
   if(counter==0) {  // все ок. нет ни одной ошибки
      rez=true;
      f_comment("Все. ок ");
   } 
   else f_comment("Нет сихронизации "+(string)counter);

   ChartRedraw( );
   return(rez);
}

 Выбрал 12 пар, что будут на чемпионате. Сделал индикатор RVI_ALL только в целях изучения синхронизации. Запустил. Результат.

2010.05.30 16:55:26   RVI_ALL (EURUSD,M1)      i= 10  Нет синхронизации времени ( GBPJPY - M1 ) дельта = 1  мин

2010.05.30 16:55:26   RVI_ALL (EURUSD,M1)      i= 5  Нет синхронизации времени ( AUDUSD - M1 ) дельта = 1  мин

2010.05.30 16:55:26   RVI_ALL (EURUSD,M1)      i= 1  Нет синхронизации времени ( GBPUSD - M1 ) дельта = 1  мин

 

Сейчас воскресенье, по этим символам нет баров (последнего бара). Следующий тик, только в понедельник. Потом вспомнилось вот эта статья график без дыр https://www.mql5.com/ru/articles/1407.  

А дыры будут. Обязательно будут. С ними нужно как то бороться. В принципе можно также как и рассказано в статье. Но у меня возникает один вопрос.

Индикатор висит на каком то одном графике. И если произошла подкачка истории по этому символу, я могу об этом узнать, prev_calculated будет сброшен в ноль.

А вот как узнать что по другим символам произошла подкачка истории или данные просто пришли с большой задержкой ?

Alexey Klenov
1883
Alexey Klenov 2010.06.07 16:10  
Prival:

А дыры будут. Обязательно будут. С ними нужно как то бороться. В принципе можно также как и рассказано в статье. Но у меня возникает один вопрос.

Индикатор висит на каком то одном графике. И если произошла подкачка истории по этому символу, я могу об этом узнать, prev_calculated будет сброшен в ноль.

А вот как узнать что по другим символам произошла подкачка истории или данные просто пришли с большой задержкой ?


1 Либо не давать индикатору отрисовываться если есть дыра в истории и периодически опрашивать историю на момент "залатывания" дыры. (Новый тик на текущем графике либо таймером)

2.Либо отрисовывать индикатор только до дыры, при условии что дыра в истории достаточно далеко. 

и немного изменить функцию эту

bool init_tf(string &mas[], datetime time_0, int count_Bars, int shift) 
и далее по тексту 
copied = CopyTime(mas[i],PERIOD_CURRENT,shift,1,tmp_time);


После чего вызывать эту функцию в цикле (от 0 до shiftbars)

В данном случае

shift

это будет позиция бара на текущем инструменте и ТФ, который проверяем на синхронизацию с другими инструментами

Prival
4547
Prival 2010.07.15 10:29  

что то у меня никак не получается определить что есть дыра в истории

https://www.mql5.com/ru/forum/1111/8747#comment_8747

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

если разработчики не поменяют концепцию https://www.mql5.com/ru/articles/1407 делать графики без дыр, то может получиться так что синхронизировать всё невозможно

Nikolay Demko
12461
Nikolay Demko 2010.07.15 16:38  
Prival:

что то у меня никак не получается определить что есть дыра в истории

https://www.mql5.com/ru/forum/1111/8747#comment_8747

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

если разработчики не поменяют концепцию https://www.mql5.com/ru/articles/1407 делать графики без дыр, то может получиться так что синхронизировать всё невозможно

 

Используйте синхронизацию по буферам time[], и путаницы не будет.

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

Хотя согласен что путь не лёгкий и ошибок может быть куча.

Mikhail Simakov
2239
Mikhail Simakov 2010.09.09 15:32  

Здравствуйте!

У меня возникают сомнения по правильности формулы индекса доллара, может они и ложны

 

Может, кто-нибудь поподробнее объяснит эту формулу, и как она появилась? 

Mikhail Simakov
2239
Mikhail Simakov 2010.09.12 04:46  


"Индекс доллара - значение типа double рассчитанное по формуле, любезно предоставленной мне Neutron"

Зачем приводить формулы и ссылаться на чье то имя? У него что семь пядей во лбу? Получается, что сначало нужно статью прочитать, потом к авторам формул пораспрашивать? Если он автор, то дайти сылку, где он ее получает.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий