Обсуждение статьи "Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов"
было бы полезно в таких индикаторах еще и сортировать вот это
в зависимости от их значений. Если есть такая функция, поделитесь,что бы не изобретать велосипед.
было бы полезно в таких индикаторах еще и сортировать вот это
в зависимости от их значений. Если есть такая функция, поделитесь,что бы не изобретать велосипед.
Функции готовой нет, но думаю набросать не составит особого труда.
19.05.2010
Вот реализовал
Спасибо.
Единственное хочу обратить ваше внимание, что способ синхронизации не всегда работает. Вот картинка. Дыра в котировках сутки, но все синхронизировано (((.
Это очень плохо. Почему так не могу понять, и самое главное, что с этим делать?
Спасибо.
Единственное хочу обратить ваше внимание, что способ синхронизации не всегда работает. Вот картинка. Дыра в котировках сутки, но все синхронизировано (((.
Это очень плохо. Почему так не могу понять, и самое главное, что с этим делать?
В индикаторе используется 2 вида синхронизации
1 по количеству баров (на графике баров должно быть больше чем требуемая история по умолчанию 500 баров) это условие видимо у вас выполнено.
2 по времени открытия нулевого бара на каждой валютной паре- это условие видимо тоже выполнено.
думаю стоит добавить третий вид синхронизации по проверке времени открытия каждого бара на каждой паре по аналогии с вторым видом синхронизации.
Как буду чуть по свободнее - сделаю и этот вид.
....
думаю стоит добавить третий вид синхронизации по проверке времени открытия каждого бара на каждой паре по аналогии с вторым видом синхронизации.
По вашему образу и подобию сделал функцию 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 будет сброшен в ноль.
А вот как узнать что по другим символам произошла подкачка истории или данные просто пришли с большой задержкой ?
А дыры будут. Обязательно будут. С ними нужно как то бороться. В принципе можно также как и рассказано в статье. Но у меня возникает один вопрос.
Индикатор висит на каком то одном графике. И если произошла подкачка истории по этому символу, я могу об этом узнать, 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
это будет позиция бара на текущем инструменте и ТФ, который проверяем на синхронизацию с другими инструментами
что то у меня никак не получается определить что есть дыра в истории
https://www.mql5.com/ru/forum/1111/8747#comment_8747
единственный выход получается. копировать время и в цикле проходиться по всему массиву, но тут опять могут быть грабли, замкнутый круг какойто получается ((
если разработчики не поменяют концепцию https://www.mql5.com/ru/articles/1407 делать графики без дыр, то может получиться так что синхронизировать всё невозможно
что то у меня никак не получается определить что есть дыра в истории
https://www.mql5.com/ru/forum/1111/8747#comment_8747
единственный выход получается. копировать время и в цикле проходиться по всему массиву, но тут опять могут быть грабли, замкнутый круг какойто получается ((
если разработчики не поменяют концепцию https://www.mql5.com/ru/articles/1407 делать графики без дыр, то может получиться так что синхронизировать всё невозможно
Используйте синхронизацию по буферам time[], и путаницы не будет.
Просто вызов котировки должен быть сопровождён предпроверкой по тайму, и тогда всё сростается.
Хотя согласен что путь не лёгкий и ошибок может быть куча.
Здравствуйте!
У меня возникают сомнения по правильности формулы индекса доллара, может они и ложны
Может, кто-нибудь поподробнее объяснит эту формулу, и как она появилась?
"Индекс доллара - значение типа double рассчитанное по формуле, любезно предоставленной мне Neutron"
Зачем приводить формулы и ссылаться на чье то имя? У него что семь пядей во лбу? Получается, что сначало нужно статью прочитать, потом к авторам формул пораспрашивать? Если он автор, то дайти сылку, где он ее получает.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Построение мультивалютного индикатора с применением множества промежуточных индикаторных буферов:
В последнее время возрос интерес к кластерному анализу рынка FOREX. MQL5 открывает новые возможности исследования закономерностей движения валютных пар. Важной преимуществом MQL5, по сравнению с MQL4, является возможность использования неограниченного количества индикаторных буферов. В данной статье описан пример построения мультивалютного индикатора.
Автор: Alexey