MetaQuotes:
7. MQL5: Добавлено преобразование параметра макроса в строку и конкатенацияпараметра макроса. Ниже приведен пример, в котором конкатенациямакросов позволяет организовать автоматическое удаление экземпляровкласса.
//+------------------------------------------------------------------+ //| MacroExample | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property script_show_inputs input bool InpSecond=true; #define DEFCLASS(class_name) class class_name:public CBase{public:class_name(string name):CBase(name){}}; #define TOSTR(x) #x #define AUTODEL(obj) CAutoDelete auto_##obj(obj) #define NEWOBJ(type,ptr) do { ptr=new type(TOSTR(ptr)); \ Print("Create object '",TOSTR(type)," ",TOSTR(ptr),"' by macro NEWOBJ"); } \ while(0) //+------------------------------------------------------------------+ //| Базовый класс, необходим для автоудаления объектов | //+------------------------------------------------------------------+ class CBase { protected: string m_name; public: CBase(string name):m_name(name) { } string Name(void) const{ return(m_name); } }; //+------------------------------------------------------------------+ //| Класс автоудаления объектов позволяет не следить за созданными | //| объектами. Он удаляет их в своем деструкторе | //+------------------------------------------------------------------+ class CAutoDelete { CBase *m_obj; public: CAutoDelete(CBase *obj):m_obj(obj) { } ~CAutoDelete() { if(CheckPointer(m_obj)==POINTER_DYNAMIC) { Print("Delete object '",m_obj.Name(),"' by CAutoDelete class"); delete m_obj; } } }; //+------------------------------------------------------------------+ //| Объявим два новых класса CFoo и CBar | //+------------------------------------------------------------------+ DEFCLASS(CFoo); DEFCLASS(CBar); //+------------------------------------------------------------------+ //| Основная функция скрипта | //+------------------------------------------------------------------+ void OnStart() { CFoo *foo; //--- создадим объект класса CFoo NEWOBJ(CFoo,foo); //--- создадим экземпляр класса автоудаления объекта CFoo foo AUTODEL(foo); //--- if(InpSecond) { CBar *bar; //--- NEWOBJ(CBar,bar); AUTODEL(bar); } //--- Удалять foo не нужно, он будет удален автоматически } //+------------------------------------------------------------------+
Спасибо за нововведение и пример. Вопросы по примеру:
- ## - конкатенация?
- Почему в NEWOBJ не прописали сразу AUTODEL? Тогда любое создание объекта через NEWOBJ сразу бы делало его автоудаляемым без доп. вызовов AUTODEL - что удобнее и нагляднее в том же примере.
- Почему TOSTR(ptr), а не проще - #ptr?
- Конструкция do {...} while(0) по какой причине используется?
- И где на практике такое автоудаление удобно использовать?
- Можете привести жизненные примеры этой новой возможности MQL?
Добавлять аналог StringSubstr для макросов планируете? Чтобы в том же примере можно было писать не NEWOBJ(type,ptr), а попроще - NEWOBJ(type).
1) В MT5 остался баг, который поправили в MT4. ChartApplyTemplate может разрешать Автоторговлю эксперту, если она была ему выключена, но при попытке запретить Автоторговлю эксперту, если она была разрешена, ничего не меняется.
2) Просьба привести в соответствие функции StringTrimLeft и StringTrimRight в MT4 и MT5. При переносе кода из MT4 в MT5 конструкция str = StringTrimLeft(str) вполне проходит, но неверна в MT5.
3) Просьба уже добавить функцию StringTrim и в MT4 и в MT5.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Обновление платформы MetaTrader 5 build 1010: Новые сигналы, маркет и опционы
В пятницу 31-го октября будет опубликовано обновление платформы MetaTrader 5. Обновление будет содержать следующие изменения:
MetaTrader 5 Client Terminal build 1010
Новые функции списка сигналов:Обновилась страница просмотра сигналов. Появилась возможность добавить сигнал в избранные. Общее состояние счета сигнала показывается при наведении курсора мыши на показатель "Прирост".
Расширилась статистика по сигналу:
Также добавились новые вкладки:Доска опционов
На доске отображается серия опционов по дате истечения на базовый актив (класс опционов), выбранный в поле "Underlying". Для опционов отображаются следующие параметры:
График волатильности
По горизонтальной оси данного графика откладываются страйки опциона, а по вертикальной - подразумеваемая волатильность.
Если в торговой истории сигнала есть символы, которых нет у подписчика, то подписка разрешается (ранее запрещалась). Действия с позициями, по которым у подписчика отсутствуют символы, игнорируются. При этом в журнал выводится информирующее сообщение:
Синхронизация с провайдером сигналов будет осуществлена. Позиции и ордера, открытые не по сигналу, на который осуществляется подписка, будут оставлены без изменения. Пользователь может проводить любые операции с ними.Теперь пользователи могут осуществлять торговые операции вручную (или советником), будучи подписанными на сигнал. Сервис сигналов будет игнорировать позиции и ордера, открытые трейдером.
Обновление будет доступно через систему LiveUpdate.