Всем привет.
У меня такая проблема: когда в индикатор добавляешь #property strict, он почему-то не отображается на графике, причем при компиляции никаких ошибок и предупреждений не выдает. Без этой строчки все работает. Может кто знает в чем тут проблема или сталкивался с подобным?
Надо в журнал смотреть, там могут быть сообщения об ошибках.
С #property strict нельзя выходить за границы массива, в этом основная проблема. Раньше, когда не было strict никто не заботился о точном вычисления границ.
Всем привет.
У меня такая проблема: когда в индикатор добавляешь #property strict, он почему-то не отображается на графике, причем при компиляции никаких ошибок и предупреждений не выдает. Без этой строчки все работает. Может кто знает в чем тут проблема или сталкивался с подобным?
Как сказал Дмитрий выше, и вероятнее всего, у вас именно ошибка выхода за пределы массива. Это критическая ошибка, потому индикатор выгружается и ничего не отображает.
Вообще конечно в первую очередь при непонятном поведении вашей программы, именно вы в первую очередь должны глянуть в журнал. Это первый шаг в выявлении причины неверного поведения собственного кода.
В журнале я смотрел, там пишет что индикатор загружен успешно..
В журнале я смотрел, там пишет что индикатор загружен успешно..
Спасибо, теперь понял)
пишет: 2016.04.07 12:34:07.706 NewBands USDCHF,H1: array out of range in 'NewBands.mq4' (54,21)
Что означают цифры в скобках?
Не могу понять в чем ошибка и как ее исправить?
Код
#property strict
#property version "2.5"
#property indicator_chart_window
#property indicator_buffers 500
#property indicator_color1 DeepSkyBlue
#property indicator_color2 Tomato
#property indicator_color3 Teal
#property indicator_color4 Teal
#property indicator_color5 Black
extern int Amplitude = 2;
bool nexttrend;
double minh, maxl, up[], down[], trend[], atrlo[], atrhi[];
int init () {
SetIndexBuffer (0, up);
SetIndexStyle (0, DRAW_LINE);
SetIndexBuffer (1, down);
SetIndexStyle (1, DRAW_LINE);
SetIndexBuffer (2, atrlo);
SetIndexStyle (2, DRAW_LINE);
SetIndexBuffer (3, atrhi);
SetIndexStyle (3, DRAW_LINE);
SetIndexBuffer (4, trend);
SetIndexEmptyValue (0, 0.0);
SetIndexEmptyValue (1, 0.0);
SetIndexEmptyValue (4, 0.0);
nexttrend = 0;
minh = High[Bars - 1];
maxl = Low[Bars - 1];
return (0);
}
int start () {
double atr, ll, hh, lma, hma;
int workbar = 1;
int c = IndicatorCounted ();
if (c < 0) {
return (- 1);
}
for (int i = Bars - 1 - c; i >= workbar; i --) {
ll = iLow (Symbol (), Period (),
iLowest (Symbol (), Period (), MODE_LOW, Amplitude, i));
hh = iHigh (Symbol (), Period (),
iHighest (Symbol (), Period (), MODE_HIGH, Amplitude, i));
lma = iMA (NULL, 0, Amplitude, 0, MODE_SMA, PRICE_LOW, i);
hma = iMA (NULL, 0, Amplitude, 0, MODE_SMA, PRICE_HIGH, i);
trend[i] = trend[i + 1];
atr = iATR (Symbol (), 0, 100, i) / 2;
if (nexttrend == 1) {
maxl = MathMax (ll, maxl);
if (hma < maxl
&& Close[i] < Low[i + 1]) {
trend[i] = 1;
nexttrend = 0;
minh = hh;
}
}
if (nexttrend == 0) {
minh = MathMin (hh, minh);
if (lma > minh
&& Close[i] > High[i + 1]) {
trend[i] = 0;
nexttrend = 1;
maxl = ll;
}
}
if (trend[i] == 0.0) {
if (trend[i + 1] != 0.0) {
up[i] = down[i + 1];
up[i + 1] = up[i];
} else {
up[i] = MathMax (maxl, up[i + 1]);
}
atrhi[i] = up[i] + atr;
atrlo[i] = up[i] - atr;
down[i] = 0.0;
} else {
if (trend[i + 1] != 1.0) {
down[i] = up[i + 1];
down[i + 1] = down[i];
} else {
down[i] = MathMin (minh, down[i + 1]);
}
atrhi[i] = down[i] + atr;
atrlo[i] = down[i] - atr;
up[i] = 0.0;
}
}
return (0);
}
Посмотрите пожалуйста кому не трудно.
Пройдитесь по коду Стилизатором, перейдите на написание в новом стиле MQL4 - так будет легче находить ошибки.
И, пожалуйста, Правильно вставляем код на форуме
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет.
У меня такая проблема: когда в индикатор добавляешь #property strict, он почему-то не отображается на графике, причем при компиляции никаких ошибок и предупреждений не выдает. Без этой строчки все работает. Может кто знает в чем тут проблема или сталкивался с подобным?