Не нужно делать её статической. Если вы заморачиваетесь с ООП, стоит следовать его правилам. Имя символа - свойство, для него должны быть функции - геттеры и сеттеры. Статические переменные лучше оставить для свойств окружения, неизменных всё время исполнения среды, а также для реализации синглетонов.
Я так и сделал (сеттеры и геттеры). Но вот одно странно. Ведь такие переменные, как магик, стоп лосс. тейк профит, символы торговых инструментов, отклонение и тд, ведь они же неизменны обычно. Какой резон делать для них сеттеры и геттеры? Ведь статические переменные не принадлежать экземплярам, и, соответственно, это в плане производительности актуальнее как-бы. Понятно, что не критично. Но я когда что-то пишу, стараюсь попутно продумывать все аспекты, что бы потом не пришлось капаться в том, что написано когда-то..
Получается, это не выполнимая задача? Когда input-переменная объявлена и инициализирована в другом файле, а член-класса, который будет принимать значение этой переменной будет в другом файл?
Ведь такие переменные, как магик, стоп лосс. тейк профит, символы торговых инструментов, отклонение и тд, ведь они же неизменны обычно.
Это в примитиве неизменны, умная ТС их крутит очень даже в зависимости от ситуации :)
Про остальное ни слова не понял :)
Это в примитиве неизменны, умная ТС их крутит очень даже в зависимости от ситуации :)
Про остальное ни слова не понял :)
Потом да, можно крутить.. Но щяс мне нужно базовый каркас написать свой. Поясню:
Есть, например, тело эксперта:
// ======================================================================= Включения и импорт внешних модулей =====================================================================+ #import "SymbolListControl.ex5" int magicNumber(int initialMagic, string symbol, int TF); #import // =============================================================================== Input переменные =============================================================================+ input string i_symbol = "EURUSD"; // Символ торгового инструмента input double i_lot = 0.1, // Объём позиции i_SL = 15, // Stop Loss позиции i_TP = 85; // Take Profit позиции input ulong i_magic = 3333021, // Магик i_slippage = 2; // Проскальзывание #include <HOZ_Code\Classes\Base.mqh> #include <HOZ_Code\Classes\Position\Position.mqh> #include <HOZ_Code\Classes\Position\PositionHandling.mqh> #include "GetTotalSignal.mqh" //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ //| Expert initialization function | //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ int OnInit() { //--- return INIT_SUCCEEDED; } //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ //| Expert deinitialization function | //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ //| Expert tick function | //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ void OnTick() { }
Жёлтым я выделил input-переменные, значения которых я хочу присвоить статическим переменным (свойствам) класса Position, код которого вот:
// ======================================================================= Включения и импорт внешних модулей =====================================================================+ #import "SymbolListControl.ex5" int magicNumber(int initialMagic, string symbol, int TF); #import // =============================================================================== Input переменные =============================================================================+ input string i_symbol = "EURUSD"; // Символ торгового инструмента input double i_lot = 0.1, // Объём позиции i_SL = 15, // Stop Loss позиции i_TP = 85; // Take Profit позиции input ulong i_magic = 3333021, // Магик i_slippage = 2; // Проскальзывание //+================================================================================================================================================================================+ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //| БАЗОВЫЙ КЛАСС ДЛЯ РАБОТЫ С ПОЗИЦИЯМИ | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+================================================================================================================================================================================+ class Position { private: //--- protected: // static const string m_symbol; public: static const string m_symbol; //---- Конструктор и деструктор Position(void); ~Position(void); }; //================================================================================================================================================================================== // Инициализация статических членов класса. ======================================================================================================================================== const string Position :: m_symbol = i_symbol; //================================================================================================================================================================================== // Конструктор класса. ============================================================================================================================================================= Position :: Position(void) { } //================================================================================================================================================================================== // Деструктор класса. ============================================================================================================================================================== Position :: ~Position(void) { }
Розовым цветом я выделил input-переменные, которые я хочу из этого класса убрать по некоторым причинам.
Сейчас понятно? Я эти input-переменные в самом торговом эксперте объявляю и инициализирую, а самом классе Position на базе этих переменных хочу в статические переменные присвоить этих инпут-переменных значения.
"Переменные, которые не изменяются с момента запуска робота, логичнее сделать статическими"
В MQL все иначе. Изменение значения статической переменной происходит не в момент рестарта Вашей программы, а в момент первой за сеанс инициализации этой переменной. Иначе говоря, Все Ваши классы не катят, поскольку свойство статичности - более высокого уровня.
"Переменные, которые не изменяются с момента запуска робота, логичнее сделать статическими"
В MQL все иначе. Изменение значения статической переменной происходит не в момент рестарта Вашей программы, а в момент первой за сеанс инициализации этой переменной. Иначе говоря, Все Ваши классы не катят, поскольку свойство статичности - более высокого уровня.
Ну так я и не говорил о том, что инициализация статических переменных будет когда запустится терминал. Само собой разумеется, что они заполняться значения в момент обращения к соответствующему классу, как я понимаю.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Переменные, которые не изменяются с момента запуска робота, логичнее сделать статическими. Например, торгуемый символ.
Вот тело эксперта:
Здесь вообще нет вводных переменных в этом файле. Они у меня разбросаны по классам..
Но я подумал, что это, наверное, не самый удобный вариант. Решил самый используемые закинуть в тело эксперта. Возник сразу головняк.
Вот, например, базовый класс, а точнеее его заготовка, которую начал расширять:
Видно, что у меня значение статической переменной m_symbol получается из вводной переменной i_symbol. Но, если я объявление это переменной:
Перенесу из этого класса Position в сам эксперт, получается никак невозможно сделать так, что бы эта переменной было статической?
Ведь в этом файле переменной i_symbol получается нет. А значит не выйдет присвоить значение соответствующей статической переменной m_symbol. Передать это значение через конструктор тоже не вариант, т.к. статическая переменная не привязана к объекту т.е. к экземпляру класса.
Как быть?