Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления - страница 17

 
Ivan Titov #:

Перепроверил вложенность #ifdef/#ifndef несколько раз. Код:

#ifdef DEF_CRYPTO_RU
 input double Leverage = #ifdef DEF_CRYPTO_LEVERAGE_VAL DEF_CRYPTO_LEVERAGE_VAL #else 1 #endif;
#endif

И такое компилировалось раньше нормально?

 

Уже много лет просят, о том, чтобы комиссию можно было получить запросом к SymbolInfoDouble ().

Даете получить что угодно, кроме того, что влияет на каждую сделку в отрицательную сторону. Нужно для заботы с виртуальным тестером, для работы с МО, туда выгружаются только котировки.

Список получаемых параметров ENUM_SYMBOL_INFO_DOUBLE огромный, а комиссию так и не добавили. Если порекомендуете расчитывать и вводить комиссию вручную, то то же самое можно было рекомендовать про 80% из списка, но сделали все, кроме комиссии.

Прошу наконец-то сделать. Если расчеты комиссии медленные, то рекомендуйте в справке получать комиссии 1 раз в OnInit и потом использовать из переменных.

 
A100 #:

И такое компилировалось раньше нормально?

Да, что не так?

 
Forester #:

Уже много лет просят, о том, чтобы комиссию можно было получить запросом к SymbolInfoDouble ().

Даете получить что угодно, кроме того, что влияет на каждую сделку в отрицательную сторону. Список получаемых параметров ENUM_SYMBOL_INFO_DOUBLE огромный, а комиссию так и не добавили.

Прошу наконец-то сделать. Если расчеты медленные, то рекомендуйте в справке получать комиссии 1 раз в OnInit и потом использовать из переменных.

Это слишком сложно сделать универсально.

Способ расчёта комиссии может отличаться у разных брокеров.

Комиссия может зависеть от дневного оборота, от суммы средств на одном или даже нескольких счетах, может быть отдельно комиссия биржи и комиссия брокера, комиссия может зависеть от типа ордера и от срока удержания позиции. Это только то, что я наблюдал непосредственно, возможны ещё какие-то варианты.

 
JRandomTrader #:

Это слишком сложно сделать универсально.

Слишком сложно рассчитывать вручную, особенно при смене инструментов или ДЦ/брокера/биржи, можно банально забыть перед каждым запуском искать на сайте таблицу комиссий и рассчитывать вручную.

Тестер же считает ее при каждой сделке, значит все уже сделано и надо просто выдать по запросу. Кто-то в начале теста делает специально 1 сделку вне стратегии, только для того, чтобы определить комиссию, но это портит статистику стратегии. Вот и нужно не делать сделку совершив все расчеты комиссии, а просто совершить те же самые расчеты и выдать ответ по запросу.

JRandomTrader #:

Комиссия может зависеть от дневного оборота, от суммы средств на одном или даже нескольких счетах, может быть отдельно комиссия биржи и комиссия брокера, комиссия может зависеть от типа ордера и от срока удержания позиции. Это только то, что я наблюдал непосредственно, возможны ещё какие-то варианты.

Хотите сказать, что в тестере это все не считается? Хорошо, пусть дадут, то что дает тестер. Хоть какая-то базовая/максимальная комиссия лучше, чем никакой комиссии. А бонусы за объем и оборот пусть и будут бонусами в реале.
 
Ivan Titov #:

Да, что не так?

Если в MQL такая запись (в одну строку) принципиально возможна, то почему тогда здесь нет ошибки?

#ifdef MACRO1
#ifdef MACRO2 #endif
#endif
#endif
 

В модуле CPositionInfo не работает метод  для позиций short .PositionType() при торговле на срочном и фондовом рынке. 
Всегда возвращает  POSITION_TYPE == POSITION_TYPE_BUY

Приходится использовать прямой доступ.

if(a_position.Select(_Symbol) && PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
 
Aleksandr Dziuba #:

В модуле CPositionInfo не работает метод  для позиций short .PositionType() при торговле на срочном и фондовом рынке. 
Всегда возвращает  POSITION_TYPE == POSITION_TYPE_BUY

Приходится использовать прямой доступ.

Обертка делает ровно это же, отличий быть не должно.

 
A100 #:
#ifdef MACRO1 #ifdef MACRO2 #endif #endif #endif

Хотите сказать, что в последнем билде запретили писать в одну строку #ifdef .. #endif? Если так, то в документации где-то есть об этом?

 
Ivan Titov #:

Хотите сказать, что в последнем билде запретили писать в одну строку #ifdef .. #endif? Если так, то в документации где-то есть об этом?

Да, нет судя по всему не запретили - скорее всего одну ошибку заменили на другую. Что касается документации, то там изначально было написано:

Директива всегда начинается со знака # (решетка)

Каждая директива описывается отдельной записью и действует до переноса строки. Нельзя в одной записи использовать несколько директив