Индикатор повреждается

 

Все,

Я разработал индикатор, который отлично работает первые 16 часов или около того, после чего он повреждается и начинает рисовать линии по всему графику. Я также проверяю значение IndicatorCounted(), и его значение не становится отрицательным, когда я получаю поврежденные линии. Я не хочу заново инициализировать буферы индикаторов, так как история "правильных движений/линий" будет потеряна. Есть ли какие-либо предложения по устранению проблемы?

Изображения нормального и поврежденного индикатора доступны в прикрепленном zip-файле.

Файлы:
images.zip  61 kb
 
Здесь нет читателей мыслей - нет кода = нет помощи
 
WHRoeder:
Здесь нет читателей мыслей - нет кода = нет помощи

Спасибо большое.
 

дорогие,

может ли кто-нибудь прислать мне ссылку для скачивания metaEditor 4?

спасибо.

 
tiger961:

дорогие,

может ли кто-нибудь прислать мне ссылку для скачивания metaEditor 4?

спасибо.


Tiger вам нужно начать новую тему, а не наваливаться на другие темы.

Редактор доступен при бесплатной загрузке терминала MT4 у любого брокера.

 

Дополнительная информация -

a) Повреждение индикаторов происходит только на платформе Windows 64 bit

б) Я сделал дамп массива индикаторов до повреждения и после повреждения - то же самое доступно в прилагаемом xls файле с комментариями.

c) Настройка "Max Bars in Chart" применяется только при открытии графика? Количество баров и связанное с ними количество индикаторов увеличивается с каждым добавленным баром.

г) Код используется следующим образом

Декларации

<code>

#property indicator_chart_window

#property indicator_buffers 8

#property indicator_color1 Red

#property indicator_width1 2

</code>

Для инициализации индикатора -

<code>

SetIndexBuffer(0, Down1);

SetIndexStyle(0, DRAW_LINE);

SetIndexEmptyValue(0, EMPTY_VALUE);

</code>

Для добавления данных о линии

<code>

void DrawMoveEx(double& serie[], int start, int end, double startlevel, double endlevel) {

double a = (endlevel - startlevel) / (start - end);

double y;

int bar;


for(int x = 0; x <= start - end; x++) {

y = a * x;

bar = start - x;

serie[bar] = startlevel + y;

}

}

</code>

 
AnkaSoftware:
a) Повреждение индикаторов происходит только на платформе Windows 64 бит
Не устанавливайте \программные файлы* на Vista/Win7
 
WHRoeder:
Не устанавливайте \программные файлы* на Vista/Win7
Верно, установка происходит в C:/metatrader4/<дир терминала>. Я считаю, что эта проблема не из-за проблем с путями, а из-за повреждения памяти. Индикатор работает нормально первые 3-4 часа, после чего начинается повреждение.
 

Я подозреваю, что в этом нет ничего такого...

Я наблюдал нечто подобное, когда новые исторические данные добавляются на график при прокрутке графика вправо.

 
RaptorUK:

Я подозреваю, что в этом нет ничего такого...

Я наблюдал нечто подобное, когда новые исторические данные добавляются на график при прокрутке графика вправо.

Хм, "новые исторические данные добавляются на график", как? Индикатор запускается и не трогается. У нас есть фиксированная обратная перспектива в 1000 баров. Индикатор не загружает никаких исторических данных.

Может ли кто-нибудь из команды разработчиков взглянуть на это?

 
AnkaSoftware:

Хм, "новые исторические данные добавляются на график", как? Индикатор запускается и не трогается. У нас фиксированная обратная история в 1000 баров. Индикатор не загружает никаких исторических данных.

Может ли кто-нибудь из команды разработчиков взглянуть на это?

Я согласен с RaptorUK: колоссально маловероятно, что это ошибка в MT4, а не в вашем коде, или что-то связанное с 64-битной Windows. Я видел сообщения о проблемах производительности и стабильности MT4, которые оказались вполне обоснованными (например, https://www.mql5.com/en/forum/135355), но я никогда не видел сообщения о языковой ошибке MT4, которая оказалась верной.

Позвольте мне указать на одно различие между вашими скриншотами "Move Normal" и "Move Error". В "Move Normal" нет явных пропущенных баров. В то время как в "Переместить ошибку", похоже, отсутствуют данные графика. Большинство маркеров на оси X находятся на расстоянии 16 минут друг от друга, но разрыв между вторым и третьим маркерами составляет 21 минуту (06:08 - 06:29). Это может быть проблемой, а может и не быть, но я бы начал искать в вашем коде места, которые предполагают, что будет непрерывная серия баров. Например, если сейчас 8 утра, в коде не должно быть ничего, что предполагает, что (а) бар для 7 утра был 60 баров назад, или даже (б) что бар для 07:00 вообще существует.

Причина обращения: