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

Denis Diakonov:
Подскажите пожалуйста, может ли советник обращаться в рамках работы на одном символе к другим символам? К примеру советник запущен на AUD/usd, и я хочу внутри выполнения его кода внедрить анализ например Gold, в результате чего робот принимает решение о дальнейших действиях по сделкам с aud/usd. Это пример. Вообще в идеале хотелось бы в рамках одного открытого советника на одном графике производить вычисления на основе скажем основных валют - штук семь. Т.е. хочу попробовать реализовать межсимвольный анализ. Выходит новость в одной стране, происходит скачек цены и на основе этих изменений принимается решение о открытии ордеров по 1-7 парам. Теоритически такое возможно без вмешательства инородних программ и сервисов, в рамках MQL4? Может MQL5?

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

Еще раз спрошу про ошибку "hidden method calling". Есть код:

class A
{
  public:
    virtual void extend(int x) = 0; // if removed in both classes - no warning
    virtual void extend(string x)
    {
    }
};

class B: public A
{
  public:
    virtual void extend(int x) override
    {
    }
};

void OnStart()
{
  B b;
  b.extend(""); // deprecated bla-bla-bla
}

Поясните, почему метод с параметром типа строка является hidden, хотя он public и не переопределен? Почему я обязан его переопределить в производном классе? И почему предупреждение пропадает, если убрать перегруженный метод с другим типом параметра?

Stanislav Korotky:

1. Поясните, почему метод с параметром типа строка является hidden, хотя он public и не переопределен?
2. Почему я обязан его переопределить в производном классе?
3. И почему предупреждение пропадает, если убрать перегруженный метод с другим типом параметра?

1. Стандарт С++ по выбору перегруженной функции (перегруженного метода класса).
Ищется первая подходящая функция по имени, а не сигнатуре, начиная с текущего класса и заходя в каждый базовый.

2. Стандарт С++. Необходимо или явно переопределять или использовать using declaration.

3. В MQL методи и поля базового класса "напрямую доступны" из классов наследников.
По сути поведение в MQL при наследовании аналогично тому, что в С++ применить using declaration для каждого базового поля и метода.
В MQL с одной стороны добавляют свободу,  но с другой - требуют то же, что и в С++, но не предоставляют абсолютно ни каких методов обхода нелепых с точки зрения пользователя предупреждений.


Sergey Dzyublik:

В MQL с одной стороны добавляют свободу,  но с другой - требуют то же, что и в С++, но не предоставляют абсолютно ни каких методов обхода нелепых с точки зрения пользователя предупреждений.

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

То что не будет поиска лучшего метода по типам (1) это можно объяснить заботой о пользователе, но то что его не будет даже по числу параметров (2) - это два шага назад

Roman:

Build 2584
Ошибка не исправлена.

При первом запуске сервиса, WebRequest возвращает 200.
При повторном запуске сервиса ПКМ, WebRequest возвращает ошибку 1001.
Удалив сервис и запустив снова, всё повторяется.

Спасибо, build 2590 исправлено.

Vladimir Karputov:

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

Спасибо! Буду пробовать
A100:

но MQL всегда был в этом смысле более передовым

Вот это новость! ))  Интересно, где вы там нашли передовизну.
Alexey Navoykov:
Вот это новость! ))  Интересно, где вы там нашли передовизну.
Передовизна была в том, что в производном классе не нужно было повторять методы из базового, а теперь нужно будет
A100:
Передовизна была в том, что в производном классе не нужно было повторять методы из базового, а теперь нужно будет
так себе передовизна, скорее затычка чтобы не вводить директиву using

build 2560:

AccountInfoDouble(ACCOUNT_EQUITY) периодически возвращает нуль, хотя средства на счете есть.

EL 0 04:10:36.959 SS_EA_v3.4_debug (GBPUSD,M1) mode=DD_LEVEL, value=50.0, unit=DD_PERC, equity=0.0, balance=1001.8