Скачать MetaTrader 5

#property strict

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Опубликуй торговый сигнал. Получи доступ к миллионам трейдеров!
Anton Sokolov
1071
Anton Sokolov 2016.04.06 14:01 

Всем привет.

У меня такая проблема: когда в индикатор добавляешь #property strict, он почему-то не отображается на графике, причем при компиляции никаких ошибок и предупреждений не выдает. Без этой строчки все работает. Может кто знает в чем тут проблема или сталкивался с подобным? 

Vladimir Karputov
Модератор
46186
Vladimir Karputov 2016.04.06 14:08  
Anton Sokolov:

Всем привет.

У меня такая проблема: когда в индикатор добавляешь #property strict, он почему-то не отображается на графике, причем при компиляции никаких ошибок и предупреждений не выдает. Без этой строчки все работает. Может кто знает в чем тут проблема или сталкивался с подобным? 

Здесь как раз наоборот :) . В Вашем MQL4 индикаторе явная ошибка, а опция #property strict даёт команду компилятору на строгий режим проверки ошибок (см. Обновленный MQL4). Другими словами - приводите свой код к обновлённому MQL4 и найдёте ошибку.
Обновленный MQL4 - Справочник MQL4
Обновленный MQL4 - Справочник MQL4
  • docs.mql4.com
Обновленный MQL4 - Справочник MQL4
Dmitry Fedoseev
42923
Dmitry Fedoseev 2016.04.06 14:10  

Надо в журнал смотреть, там могут быть сообщения об ошибках

С #property strict нельзя выходить за границы массива, в этом основная проблема. Раньше, когда не было strict никто не заботился о точном вычисления границ. 

Artyom Trishkin
Модератор
75872
Artyom Trishkin 2016.04.06 14:19  
Anton Sokolov:

Всем привет.

У меня такая проблема: когда в индикатор добавляешь #property strict, он почему-то не отображается на графике, причем при компиляции никаких ошибок и предупреждений не выдает. Без этой строчки все работает. Может кто знает в чем тут проблема или сталкивался с подобным? 

Как сказал Дмитрий выше, и вероятнее всего, у вас именно ошибка выхода за пределы массива. Это критическая ошибка, потому индикатор выгружается и ничего не отображает.

Вообще конечно в первую очередь при непонятном поведении вашей программы, именно вы в первую очередь должны глянуть в журнал. Это первый шаг в выявлении причины неверного поведения собственного кода.

Anton Sokolov
1071
Anton Sokolov 2016.04.06 15:47  
В журнале я смотрел, там пишет что индикатор загружен успешно..
Taras Slobodyanik
13289
Taras Slobodyanik 2016.04.06 16:09  
Anton Sokolov:
В журнале я смотрел, там пишет что индикатор загружен успешно..
В журнале редактора, при компиляции индикатора.
Dmitry Fedoseev
42923
Dmitry Fedoseev 2016.04.07 08:02  
Anton Sokolov:
В журнале я смотрел, там пишет что индикатор загружен успешно..
Во вкладке "Эксперты" надо смотреть. 
Anton Sokolov
1071
Anton Sokolov 2016.04.07 11:34  

Спасибо, теперь понял) 

пишет: 2016.04.07 12:34:07.706 NewBands USDCHF,H1: array out of range in 'NewBands.mq4' (54,21)

Что означают цифры в скобках? 

Vladimir Zubov
4328
Vladimir Zubov 2016.04.07 11:39  
Anton Sokolov:

Спасибо, теперь понял) 

пишет: 2016.04.07 12:34:07.706 NewBands USDCHF,H1: array out of range in 'NewBands.mq4' (54,21)

Что означают цифры в скобках? 

Номер строки и позиции в коде.
Anton Sokolov
1071
Anton Sokolov 2016.04.07 12:19  

Не могу понять в чем ошибка и как ее исправить?

Код

#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);

}

 Посмотрите пожалуйста кому не трудно.

Vladimir Karputov
Модератор
46186
Vladimir Karputov 2016.04.07 12:35  

Пройдитесь по коду Стилизатором, перейдите на написание в новом стиле MQL4 - так будет легче находить ошибки.

И, пожалуйста, Правильно вставляем код на форуме 

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий