У меня стоит Макс. число баров в окне - 50000.
При запуске МТ грузит в окно (конкретно - EURUSD,M1) 50000 баров. Дальше (по идее)
число баров может со временем только расти. Но это только по идее.
МТ работает без перерывов все 5 рабочих суток недели. За это время по несколько раз
в сутки возникает ситуация, когда количество баров на графике подрезается.
При запуске МТ грузит в окно (конкретно - EURUSD,M1) 50000 баров. Дальше (по идее)
число баров может со временем только расти. Но это только по идее.
МТ работает без перерывов все 5 рабочих суток недели. За это время по несколько раз
в сутки возникает ситуация, когда количество баров на графике подрезается.
не было ли запрошено обновление данных (например, через контекстное меню графика - Refresh)?
хотелось бы узнать сопутствующие обстоятельства перед подрезанием количества баров
У меня стоит Макс. число баров в окне - 50000.
При запуске МТ грузит в окно (конкретно - EURUSD,M1) 50000 баров. Дальше (по идее)
число баров может со временем только расти. Но это только по идее.
МТ работает без перерывов все 5 рабочих суток недели. За это время по несколько раз
в сутки возникает ситуация, когда количество баров на графике подрезается.
При запуске МТ грузит в окно (конкретно - EURUSD,M1) 50000 баров. Дальше (по идее)
число баров может со временем только расти. Но это только по идее.
МТ работает без перерывов все 5 рабочих суток недели. За это время по несколько раз
в сутки возникает ситуация, когда количество баров на графике подрезается.
не было ли запрошено обновление данных (например, через контекстное меню графика - Refresh)?
хотелось бы узнать сопутствующие обстоятельства перед подрезанием количества баров
Абсолютно никаких обстоятельств. Просто МТ работает (кроме него больше никаких программ не
запущено) и в какой-то момент это происходит. Несколько раз мне повезло - наблюдал это своими
глазами. Никаких действий до этого не предпринимал, Refresh не нажимал, просто наблюдал процесс
на форексе. Часто это событие происходит ночью, когда к компьютеру вообще никто не касается.
Если обратите внимание на приведенные мной сообщения индикатора, то увидите, что какое-то время
подрезание происходит всегда до одного и того же числа баров. Потом это "магическое чило" как-то преодолевается и возникает новое, которое держится некоторое время. Потом опять.
В приведенном куске подрезание происходило после 50767 баров и всегда до 50639 баров. Но в числах этих нет никакого смысла, поскольку 50767 было в конце концов преодолено и возникла новая пара. Да и в других случаях возникали другие числа.
Простейший способ проверить это - повесить индикатор на график, чтобы он поработал достаточное время без перезагрузки. Нужно только чтобы в файле истории было больше, чем 50000 баров, а параметр Макс. число баров в окне был равен 50000.
АУ, ЭНТУЗИАСТЫ ! Поддержите разработчиков, потестируйте ситуацию на своих компьютерах.
Разве трудно повесить простенький индикатор туда же, где непрерывно трудятся ваши экспетры ? :-)
Кроме графика ЗигЗага, ничего при этом событии не пострадает.
Попробовал ситуацию на сервере реального брокера (Брезан) на реальном счету.
Все то же самое. Вот сообщения индикатора за неделю:
Перезапуск ZZ. Bars: 49999 Текущее начало: 2005.09.12 18:56:00 Текущее время: 2005.11.14 01:00:00
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.12 18:56:00 Текущее время: 2005.11.16 00:50:04
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.12 21:50:00 Текущее время: 2005.11.16 00:50:29
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.12 21:50:00 Текущее время: 2005.11.16 03:55:33
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 00:58:00 Текущее время: 2005.11.16 03:55:58
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 00:58:00 Текущее время: 2005.11.16 07:38:32
Перезапуск ZZ. Bars: 51030 Текущее начало: 2005.09.13 04:11:00 Текущее время: 2005.11.16 07:38:43
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 04:11:00 Текущее время: 2005.11.16 10:18:01
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 06:59:00 Текущее время: 2005.11.16 10:18:01
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 06:59:00 Текущее время: 2005.11.16 12:41:17
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 09:53:00 Текущее время: 2005.11.16 12:41:31
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 09:53:00 Текущее время: 2005.11.16 14:54:15
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 12:03:00 Текущее время: 2005.11.16 14:54:17
Изменение Bars. Было: 53377 Прежнее начало: 2005.09.13 12:03:00 Текущее время: 2005.11.18 14:04:01
Перезапуск ZZ. Bars: 53250 Текущее начало: 2005.09.13 14:18:00 Текущее время: 2005.11.18 14:04:21
Видно, что подрезание долго происходило при 51157 барах на графике и всегда на 128 баров.
Потом, 18 числа, этот барьер как-то был преодолен и возник новый - 53377. А единственное
случившееся подрезание было на 127 баров, то есть практически то же число.
Разработчики, что-нибудь в этом направлении происходит или это никому не нужно ?
Если не нужно так я и надоедать не буду.
Все то же самое. Вот сообщения индикатора за неделю:
Перезапуск ZZ. Bars: 49999 Текущее начало: 2005.09.12 18:56:00 Текущее время: 2005.11.14 01:00:00
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.12 18:56:00 Текущее время: 2005.11.16 00:50:04
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.12 21:50:00 Текущее время: 2005.11.16 00:50:29
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.12 21:50:00 Текущее время: 2005.11.16 03:55:33
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 00:58:00 Текущее время: 2005.11.16 03:55:58
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 00:58:00 Текущее время: 2005.11.16 07:38:32
Перезапуск ZZ. Bars: 51030 Текущее начало: 2005.09.13 04:11:00 Текущее время: 2005.11.16 07:38:43
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 04:11:00 Текущее время: 2005.11.16 10:18:01
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 06:59:00 Текущее время: 2005.11.16 10:18:01
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 06:59:00 Текущее время: 2005.11.16 12:41:17
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 09:53:00 Текущее время: 2005.11.16 12:41:31
Изменение Bars. Было: 51157 Прежнее начало: 2005.09.13 09:53:00 Текущее время: 2005.11.16 14:54:15
Перезапуск ZZ. Bars: 51029 Текущее начало: 2005.09.13 12:03:00 Текущее время: 2005.11.16 14:54:17
Изменение Bars. Было: 53377 Прежнее начало: 2005.09.13 12:03:00 Текущее время: 2005.11.18 14:04:01
Перезапуск ZZ. Bars: 53250 Текущее начало: 2005.09.13 14:18:00 Текущее время: 2005.11.18 14:04:21
Видно, что подрезание долго происходило при 51157 барах на графике и всегда на 128 баров.
Потом, 18 числа, этот барьер как-то был преодолен и возник новый - 53377. А единственное
случившееся подрезание было на 127 баров, то есть практически то же число.
Разработчики, что-нибудь в этом направлении происходит или это никому не нужно ?
Если не нужно так я и надоедать не буду.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня стоит Макс. число баров в окне - 50000.
При запуске МТ грузит в окно (конкретно - EURUSD,M1) 50000 баров. Дальше (по идее)
число баров может со временем только расти. Но это только по идее.
МТ работает без перерывов все 5 рабочих суток недели. За это время по несколько раз
в сутки возникает ситуация, когда количество баров на графике подрезается. В результате
графики непрерывных индикаторов не страдают, но вот график ЗигЗага сбивается совершенно.
В принципе решить эту проблему можно было бы внутри самого индикатора через его
перезапуск. Что я и сделал. Однако это не помогло. Почему-то после этого график ЗигЗага
начинает отрисовываться неправильно.
Имею подозрение, что вся эта ситуация (и подрезание числа баров, и последующая
неправильная отрисовка ЗигЗага) каким-то образом связаны с опцией DRAW_SECTION.
Можно было бы, конечно, на все это закрыть глаза - в конце концов ЗигЗаг на практике
полезен мало, но все это говорит о проблемах в самой системе МТ. Если не убрать их
сейчас, то они вылезут в реальной торговле, причем неизвестно каким боком.
Вот часть сообщений индикатора на прошлой неделе:
Изменение Bars. Прежнее Bars: 50767 Прежнее начало: 2005.09.12 10:26:00 Текущее время: 2005.11.04 13:28:20
Перезапуск ZZ. Текущее Bars: 50639 Текущее начало: 2005.09.12 12:52:00 Текущее время: 2005.11.04 13:28:21
Изменение Bars. Прежнее Bars: 50767 Прежнее начало: 2005.09.12 12:52:00 Текущее время: 2005.11.04 15:42:16
Перезапуск ZZ. Текущее Bars: 50639 Текущее начало: 2005.09.12 15:14:00 Текущее время: 2005.11.04 15:42:21
Изменение Bars. Прежнее Bars: 50767 Прежнее начало: 2005.09.12 15:14:00 Текущее время: 2005.11.04 17:50:10
Перезапуск ZZ. Текущее Bars: 50639 Текущее начало: 2005.09.12 17:23:00 Текущее время: 2005.11.04 17:50:14
Перезапуск ZZ. Текущее Bars: 50676 Текущее начало: 2005.09.12 17:23:00 Текущее время: 2005.11.04 18:27:17
Изменение Bars. Прежнее Bars: 50767 Прежнее начало: 2005.09.12 17:23:00 Текущее время: 2005.11.04 20:05:04
Перезапуск ZZ. Текущее Bars: 50639 Текущее начало: 2005.09.12 20:20:00 Текущее время: 2005.11.04 20:05:07
Ниже выкладываю код ЗиЗага. Алгоритм примерно тот же, что выкладывал когда-то Quark. Может чуть лучше, поскольку работает на всех ТФ, при всех значениях параметра и в реальном времени. Хотя все равно несовершенен, поскольку, как уже обсуждалось на этом форуме, нет возможности нарисовать максимум и минимум на одном баре. Дело не в индикаторе, а в той ошибке, которую он инициирует.
Просто повесьте его в том окне, где число баров превышает ваш параметр "Макс. число баров в окне".
Как только ЗигЗаг оторвется от баров - это случилось, можете проверить по первому бару в окне.
//+------------------------------------------------------------------+ //| MY_ZigZag Index.mq4 | //| Copyright © 2005, yurixx| //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, yurixx" #property link "yurixx" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red //---- indicator parameters extern int ZZ_Range=5; // Minimum Points Range for High,Low apexes //---- indicator buffers double ZZ_Buffer[]; //---- variables int Flag, Dig, Mult, NumBars, handle, limit, cntBars, oldBars, tikBar; double lastLow,lastHigh,delLow,delHigh; bool OnStart; //+------------------------------------------------------------------+ //| MY_ZigZag Index initialization function | //+------------------------------------------------------------------+ int init() { //---- indicator buffers mapping SetIndexBuffer(0,ZZ_Buffer); SetIndexEmptyValue(0,0.0); //---- drawing settings SetIndexStyle(0,DRAW_SECTION); //,STYLE_SOLID,2,Blue); SetIndexDrawBegin(0,0); //---- name for DataWindow IndicatorShortName("ZZ("+ZZ_Range+")"); if (ZZ_Range < 1) ZZ_Range = 1; Dig = Digits; Mult = 1/Point; OnStart = true; cntBars = 0; oldBars = 1; //---- initialization done return(0); } //+------------------------------------------------------------------+ //| MY_ZigZag Index indicator function | //+------------------------------------------------------------------+ int start() { if (OnStart) { NumBars = Bars-1; lastLow = Low[NumBars]; lastHigh = High[NumBars]; ArrayInitialize(ZZ_Buffer,0.0); for (tikBar=NumBars-1; tikBar>=0; tikBar--) { if ((Low[tikBar]<lastLow)&&(High[tikBar]<lastHigh)) { ZZ_Buffer[NumBars] = lastLow; Flag = -1; break; } if ((Low[tikBar]>lastLow)&&(High[tikBar]>lastHigh)) { ZZ_Buffer[NumBars] = lastHigh; Flag = 1; break; } } OnStart = false; } limit = Bars-1-cntBars; cntBars += limit; for (tikBar=limit; tikBar>0; tikBar--) { delLow = NormalizeDouble(Low[tikBar]-lastLow,Dig); delHigh = NormalizeDouble(High[tikBar]-lastHigh,Dig); if (Flag > 0) { if ((delHigh>0)||(delHigh==0 && MathRound(Mult*(lastHigh-Low[tikBar]))<ZZ_Range)) { lastHigh = High[tikBar]; if (delLow>0) lastLow = Low[tikBar]; ZZ_Buffer[tikBar] = lastHigh; ZZ_Buffer[Bars - oldBars] = 0.0; oldBars = Bars - tikBar; } else if (MathRound(Mult*(lastHigh-Low[tikBar]))>=ZZ_Range) { Flag = -1; lastLow = Low[tikBar]; lastHigh = High[tikBar]; ZZ_Buffer[tikBar] = lastLow; oldBars = Bars - tikBar; } } else { if ((delLow<0)||(delLow==0 && MathRound(Mult*(High[tikBar]-lastLow))<ZZ_Range)) { lastLow = Low[tikBar]; if (delHigh<0) lastHigh = High[tikBar]; ZZ_Buffer[tikBar] = lastLow; ZZ_Buffer[Bars - oldBars] = 0.0; oldBars = Bars - tikBar; } else if (MathRound(Mult*(High[tikBar]-lastLow))>=ZZ_Range) { Flag = 1; lastLow = Low[tikBar]; lastHigh = High[tikBar]; ZZ_Buffer[tikBar] = lastHigh; oldBars = Bars - tikBar; } } } //---- done return(0); }