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

 

Подскажите, пожалуйста, по вертикальному масштабированию, по оси времени.

Как сделать, чтобы масштаб не ограничивался ничем, когда на шкале цены нажимаешь лкм и тянешь вверх?
Мне нужен такой увеличенный график иногда, как в квике.

Вижу, что можно выставить фиксированный масштаб в настройках графика.

Можно ли сделать горячую клавишу, чтобы масштаб устанавливался по окну, а другую - чтобы увеличивался вдвое?

 
mktr8591 #:

b3333. Этот скрипт компилируется и выполняется без предупреждений. При отладке видно, что в "b=a" вызывается A::operator=, хотя он переопределен в A1.  (в С++ здесь  будет ошибка компилятора).

Это может привести к большим багам в программах!

Полностью, про разрешение перегрузки в с++ читать тут: https://en.cppreference.com/w/cpp/language/overload_resolution

В mql практически аналогично должно быть.А по Вашему примеру: обе перегрузки имеют спецификатор доступа public, поэтому компилятор их разрешает исходя из типа аргумента и естественно выбирает A&, поэтому все правильно. Тут нет переопределения, тут есть два оператора = с разными типами аргумента.

UPD: А по поводу наличия ошибки в С++ и отсутствия в mql5, так у них неявно вот так делается:

class A {
public:
        void operator =(const A&) { std::cout << "A" << std::endl; }
};

class A1:public A {
public:
        void operator =(const A1&) { std::cout << "A1" << std::endl; }
        using A::operator =;
};

Вроде как были разговоры про то, что бы поведение в этом случае как в с++ сделать

 
mktr8591 #:

b3333. Этот скрипт компилируется и выполняется без предупреждений. При отладке видно, что в "b=a" вызывается A::operator=, хотя он переопределен в A1.  (в С++ здесь  будет ошибка компилятора).

Это может привести к большим багам в программах!

Тут нет переопределения.
Чтобы не путаться, используйте сцификатор override в случаях, когда собираетесь что-то переопределить в потомке, и компилятор выдаст ошибку, если в родителе нет такого метода.
 
Sergey Gridnev #:
Тут нет переопределения.
Чтобы не путаться, используйте сцификатор override в случаях, когда собираетесь что-то переопределить в потомке, и компилятор выдаст ошибку, если в родителе нет такого метода.

Да, я ошибся в термине. Здесь перегрузка, как выше сказали.

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

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

 

Ошибка и невозможность использовать сервис.

Как видно из скриншота - код не содержит ничего подозрительного.

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

Это вообще можно исправить?

Мое окружение:

 
Доброго времени суток! Из 20 свечей нужно выбрать 3 с большими ценами. Свечу с максимальной  ценой определяю прям по учебнику
   index = iHighest(Symbol(), TF, MODE_HIGH, 20, 1);
   if(index != -1)
      price_max1 = High[index];//Максимальная цена
   else
      PrintFormat("Ошибка вызова iHighest. Код ошибки=%d", GetLastError());

Для второй по цене свечи использую цикл

for(i = 1; i < 20; i++)
     {
      high = iHigh(Symbol(), TF, i);
      if(i == 1)
        {
         if(high == price_max1)
            continue;
         else
            price_max2 = high;
        }
      else
        {
         if(high == price_max1)
            continue;
         else
            if(high >= price_max2)
               price_max2 = high;
                 
        }
     }
Print("MAX цена №2 = ", price_max2);
Как найти третью свечу с большей ценой (price_max3)? Ещё один цикл лепить? Он ещё объёмней получается, ведь теперь нужно исключить из результата уже две свечи с ценами price_max1 и price_max2. В целом как-то все коряво и громоздко получается. Нельзя ли сделать выборку price_max1, price_max2 и price_max3 за один цикл? Или ещё как-то проще?
 
Oleksandr Nozemtsev #:
Доброго времени суток! Из 20 свечей нужно выбрать 3 с большими ценами. Свечу с максимальной  ценой определяю прям по учебнику

Для второй по цене свечи использую цикл

Как найти третью свечу с большей ценой (price_max3)? Ещё один цикл лепить? Он ещё объёмней получается, ведь теперь нужно исключить из результата уже две свечи с ценами price_max1 и price_max2. В целом как-то все коряво и громоздко получается. Нельзя ли сделать выборку price_max1, price_max2 и price_max3 за один цикл? Или ещё как-то проще?

Интересная задача.

Я не проверял, но пошёл-бы таким путём…

  1. CopyHigh двадцати баров.
  2. ArrayMaximum из этого массива
  3. ArrayRemove найденного индекса
  4. ArrayMaximum из остатка от массива
  5. Ещё раз ArrayRemove 
  6. И ещё раз ArrayMaximum 
Когда и куда сохранять полученные значения дело каждого.
 
Alexey Viktorov #:

Интересная задача.

Я не проверял, но пошёл-бы таким путём…

  1. CopyHigh двадцати баров.
  2. ArrayMaximum из этого массива
  3. ArrayRemove найденного индекса
  4. ArrayMaximum из остатка от массива
  5. Ещё раз ArrayRemove 
  6. И ещё раз ArrayMaximum 
Когда и куда сохранять полученные значения дело каждого.

Погоди, зачем? Сортировать массив по убыванию/возрастанию и брать три свечи с краю - в зависимости от направления сортировки.

 
Artyom Trishkin #:

Погоди, зачем? Сортировать массив по убыванию/возрастанию и брать три свечи с краю - в зависимости от направления сортировки.

И то верно. Но ведь мы лёгких путей не ищем…

Я видимо в подсознании думал об индексе свечи на графике… А после сортировки индексы потеряются.
 
Alexey Viktorov #:

И то верно. Но ведь мы лёгких путей не ищем…

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

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

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