Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1791

 
MakarFX #:

Чтоб ты мог себе написать напоминалку - что за функция такая

:)) как будто я не могу это сделать сам когда потребуется: вставить два слэша и написать пару слов. Ты пробовал в эту рамочку написать что-то? Тот прямой слэш справа съедет на кол-во введенных символов вправо, а что делать если нужно больше одной строки написать? Мне вместо того чтобы делом заниматься, надо тратить время на рисование рамочек. Просто ide навязывает какое-то свое больное видение как должно быть.

 
Nerd Trader #:

:)) как будто я не могу это сделать сам когда потребуется: вставить два слэша и написать пару слов. Ты пробовал в эту рамочку написать что-то? Тот прямой слэш справа съедет на кол-во введенных символов вправо, а что делать если нужно больше одной строки написать? Мне вместо того чтобы делом заниматься, надо тратить время на рисование рамочек. Просто ide навязывает какое-то свое больное видение как должно быть.

Поставь два слеша перед функцией и будет тебе счастье

//
int OnCalculate (const int rates_total,
                 const int prev_calculated,
                 const datetime& time[],
                 const double& open[],
                 const double& high[],
 
MakarFX #:

Поставь два слеша перед функцией и будет тебе счастье

я уже писал выше, что если будет пустая строка между коментом и функцией - вставится рамка.
 

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

Логическое НЕ тут на своём месте, то есть вместо того чтобы писать == 0.

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
  ...
  ...
  ...
  if(ObjectGetInteger(0,"Button Stop Order",OBJPROP_STATE)){
    int x = (int)lparam;
    int y = (int)dparam;
    //Переведём координаты X, Y в дату и время
    if(ChartXYToTimePrice(0,x,y,window,dt,price)){
      //Линия меняет цвет с зелёного на желтый
      if(price < Bid){
        if(!ObjectFind("Buy Stop") || !ObjectFind("not allowed")){
          ObjectDelete(line_name);
          line_name = "Sell Stop";
          CreateLine(line_name, clrYellow);
        }      
      }
      //Линия меняет цвет с желтого на зелёный
      if(price > Ask){
        if(!ObjectFind("Sell Stop") || !ObjectFind("not allowed")){
          ObjectDelete(line_name);
          line_name = "Buy Stop";
          CreateLine(line_name, clrGreen);
        }
      }
      //Линия меняет цвет на серый если в зоне спреда
      if(price > Bid && price < Ask){
        if(!ObjectFind("Buy Stop") || !ObjectFind("Sell Stop")){
          ObjectDelete(line_name);
          line_name = "not allowed";
          CreateLine(line_name, clrGray);
        }
      }
      //Прикрепляем линию к курсору
      if(id == CHARTEVENT_MOUSE_MOVE)
        if(ObjectMove(0,line_name,0,0,price))
          ChartRedraw(0);
    }
  }else if(ObjectFind(line_name) == window) Print(ObjectDelete(line_name));
 
Nerd Trader #:

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

Логическое НЕ тут на своём месте, то есть вместо того чтобы писать == 0.

ObjectFind - это int, а не bool
 
Nerd Trader #:

Потому что сильно выбешивает, когда решил перебраться в родную среду для mql4 и тут на! Рамочку не желаете? А мы все равно впарим.

Чтобы было как хочется пользуйтесь методом Макара

MakarFX #:

Я и про стили не знал, форматировал так, как мне удобно читать.

 
MakarFX #:
ObjectFind - это int, а не bool
в этом случае нет разницы "!" или "==0"
 
Nerd Trader #:
в этом случае нет разницы "!" или "==0"

Есть разница!!!

      if(!ObjectFind("Buy Stop"))Print("All right Христофор Бонифатич!");
      else Print("Something is wrong!");
      if(ObjectFind("Buy Stop")!=0)Print("All right Христофор Бонифатич");
 
Nerd Trader #:
в этом случае нет разницы "!" или "==0"
if(!ObjectFind("Buy Stop"))

Этот запрос выглядит так:

 Летят в самолете Василий Иванович Чапаев и Петька, и вдруг Василий Иванович, сидящий за штурвалом пилота, вскрикивает:

«Петька, приборы!»

Петька отвечает: «Тридцать восемь».

Василий Иванович : «Что тридцать восемь?»

Петька: «А что приборы?»

 
MakarFX #:

Этот запрос выглядит так:

Нет Макар, это выглядет так:

Функция ObjectFind() возвращает номер главного окна. А этот номер равен 0. С другой стороны 0 == false, отсюда следует что если функция вернула 0, то это всё-равно что вернула false. Конечно это применять я-бы не стал, если вдруг функция вернёт -1, то-есть ошибка, то можно считать расположение объекта не в главном окне. Да плюс ко всему мало-ли какие исправления внесут…

В общем не спорь и не учись так делать…

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