Ошибки, баги, вопросы - страница 541

 
220Volt:

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

Запустил на M15 следующий код:

Во время работы скрипта подключался и отключался от интернета. На рисунки результат. 

Понятно. Исправим.
 

Это в сервисдеск или ошибка в коде?

Индикатор должен строить 5 уровней точек от цены закрытия вниз красным цветом.

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

Проверьте плиз кто нибудь, это только у меня такая лажа или вообще?...


#define  N      5
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots   5
#property indicator_color1 clrRed
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrRed
#property indicator_color5 clrRed

#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3

#property indicator_type1 DRAW_COLOR_ARROW
#property indicator_type2 DRAW_COLOR_ARROW
#property indicator_type3 DRAW_COLOR_ARROW
#property indicator_type4 DRAW_COLOR_ARROW
#property indicator_type5 DRAW_COLOR_ARROW

//------------------------------------------------------------------    class CClrHist
class CClrHist
{
public:
        double buf[];
        CClrHist() { };
};

CClrHist bufs[N]; // массив буферов

//------------------------------------------------------------------    OnInit
int OnInit()
{
        for (int i=0; i<N; i++) SetIndexBuffer(i, bufs[i].buf, INDICATOR_DATA);
        return(0);
}
//------------------------------------------------------------------    OnCalculate
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
        for (int i=0; i<N; i++) for (int j=rates_total-1; j>=0; j--)
        {
                bufs[i].buf[j]=close[j];
                bufs[i].buf[j]-=i*100*Point();
        }
        return(rates_total);
}
 
sergeev:

Это в сервисдеск или ошибка в коде?

Индикатор должен строить 5 уровней точек от цены закрытия вниз красным цветом.

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

Проверьте плиз кто нибудь, это только у меня такая лажа или вообще?...

#property indicator_type1 DRAW_ARROW
#property indicator_type2 DRAW_ARROW
#property indicator_type3 DRAW_ARROW
#property indicator_type4 DRAW_ARROW
#property indicator_type5 DRAW_ARROW
 
masharov:

...Полагаю, что стандартные библиотеки - это идеальный код, который должен служить образцом для других.

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

Ничего против стандартных библиотек не имею, но доверять чужому коду "для облегчения написания программ", не проверив его? - Разве только на этапе первоначальных набросков эксперта. Для ускорения рутинных процессов, так сказать.  

 

У меня довольно часто в журнале встречается сообщение: Abnormal termination. Не замечал ли кто, в каких случаях может быть такой конфликт?

 Причину найти не получается пока. Могу только сказать, что если я не трогаю терминал в течении какого-то времени или просто пользуюсь какой либо другой программой в этот момент (например Excel), то переключившись потом опять в терминал, эксперт, которого я тестирую, начинает работать некорректно. То есть торговые операции выполняются без проблем. Проблема только во взаимодействии с торговыми и информационными панелями. Похоже, что подглючивает OnChartEvent(). Переключение между панелями начинает очень сильно тормозить, как будто процесс, чем-то очень сильно другим занят. Вечных циклов не использую. Да и загрузка процессора в этот момент не показывает, что что-то активно используется. Помогает перекомпиляция эксперта. В момент перекомпиляции перед тем видимо, как происходит деинициализация эксперта в журнале появляется сообщение  Abnormal termination. Затем программа успешно инициализируется и всё начинает работать, как часы. 

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
tol64:

У меня довольно часто в журнале встречается сообщение: Abnormal termination. Не замечал ли кто, в каких случаях может быть такой конфликт?

 Причину найти не получается пока. Могу только сказать, что если я не трогаю терминал в течении какого-то времени или просто пользуюсь какой либо другой программой в этот момент (например Excel), то переключившись потом опять в терминал, эксперт, которого я тестирую, начинает работать некорректно. То есть торговые операции выполняются без проблем. Проблема только во взаимодействии с торговыми и информационными панелями. Похоже, что подглючивает OnChartEvent(). Переключение между панелями начинает очень сильно тормозить, как будто процесс, чем-то очень сильно другим занят. Вечных циклов не использую. Да и загрузка процессора в этот момент не показывает, что что-то активно используется. Помогает перекомпиляция эксперта. В момент перекомпиляции перед тем видимо, как происходит деинициализация эксперта в журнале появляется сообщение  Abnormal termination. Затем программа успешно инициализируется и всё начинает работать, как часы. 

IsStopped() в циклах используем?

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

Вообще как я понял, эта ошибка возникает в случае "досрочного" завершения программы (когда чарт/терминал закрывают или эксперта перекомпилируют) и при этом экспертом производится определенная работа.

 
Interesting:

IsStopped() в циклах используем?

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

Вообще как я понял, эта ошибка возникает в случае "досрочного" завершения программы (когда чарт/терминал закрывают или эксперта перекомпилируют) и при этом экспертом производится определенная работа.

Спасибо. По ссылкам видно та же ситуация была.  IsStopped() в циклах не использую нигде, только break, continue и return.

Я пока не увидел связи между  IsStopped() и притормаживанием программы. Ведь, если бы программа зациклилась, то никакие другие операции бы не происходили. Или я ошибаюсь? 

И ещё. Ведь IsStopped() полезно использовать, когда нужно прервать выполнение программы принудительно, например, закрыть терминал или удалить эксперта с графика. А мне нужно дальше пользоваться экспертом.

 
tol64:

Спасибо. По ссылкам видно та же ситуация была.  IsStopped() в циклах не использую нигде, только break, continue и return.

Я пока не увидел связи между  IsStopped() и притормаживанием программы. Ведь, если бы программа зациклилась, то никакие другие операции бы не происходили. Или я ошибаюсь? 

И ещё. Ведь IsStopped() полезно использовать, когда нужно прервать выполнение программы принудительно, например, закрыть терминал или удалить эксперта с графика. А мне нужно дальше пользоваться экспертом.

IsStopped(), это по поводу ошибки. По чему терминал/эксперт тормозит даже предположений нет (условий выполнения неизвестно, про эксперт тоже ничего).
 
tol64:

У меня довольно часто в журнале встречается сообщение: Abnormal termination. Не замечал ли кто, в каких случаях может быть такой конфликт?

 Причину найти не получается пока. Могу только сказать, что если я не трогаю терминал в течении какого-то времени или просто пользуюсь какой либо другой программой в этот момент (например Excel), то переключившись потом опять в терминал, эксперт, которого я тестирую, начинает работать некорректно. То есть торговые операции выполняются без проблем. Проблема только во взаимодействии с торговыми и информационными панелями. Похоже, что подглючивает OnChartEvent(). Переключение между панелями начинает очень сильно тормозить, как будто процесс, чем-то очень сильно другим занят. Вечных циклов не использую. Да и загрузка процессора в этот момент не показывает, что что-то активно используется. Помогает перекомпиляция эксперта. В момент перекомпиляции перед тем видимо, как происходит деинициализация эксперта в журнале появляется сообщение  Abnormal termination. Затем программа успешно инициализируется и всё начинает работать, как часы. 

Abnormal termination означает что вы вступили в половую связь с программой неестественны способом, а именно перекомпилировали её во время выполнения что привело к прерыванию программы и переинициализации.

Тоже самое будет если наскочить на деление нулём или просто прервать программу во время расчёта, если же программа вышла по ретурну то такой записи не будет. Поэтому вам советуют ставить проверку на IsStopped чтоб программа могла выходить по собственному ретурну, а не принудительно.

 

Планируется ли добавления след. штук:

Двойной клик по позиции на графике   чтоб вызвать меню управления позицией.

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

????

Спасибо. 

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