Скачать MetaTrader 5

Об одном применении ООП

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Volchanskiy
23011
Alexey Volchanskiy  

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

Говорит, я даже не знаю, как быть, есть варианты входов, хочется их попробовать, можно так сделать? Придется писать несколько вариантов советника? А входы по объему в одну функцию явно не вместить, причем они должны рождаться динамически по рынку. То есть их может быть 1... N. Я упрощенно описываю ситуацию.

Говорю, сделаем базовый класс, где будет все неизменное, а от него будем рождать потомков с измененным поведением.

- А что такое класс?

Клиент немного понимает MQL, но не программист. Стал объяснять, чувствую, не понимает.

Нарыл в инете картинку классификации видов животных. Говорю, представим упрощенно, что все они произошли строго друг от друга ) Я в курсе, что это не так, но примем такое допущение.

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

- А, ясно! И даже Млекопитающие будут иметь функционал  Древнейших жгутиковых, я прав?

- Да, все верно.

Теперь думаю, как бы это дело оптимально использовать в тестере, стратегия не скальперская и не тиковая, для тестера подходит. А еще в пугающих загадках, кто такие Сосальщики ))

classes 

** 

Vasiliy Sokolov
26975
Vasiliy Sokolov  
Alexey Volchanskiy:

...

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

...

К сожалению, идея наследования оказалась палкой о двух концах. Можно нечаяно и себя зашибить. Поэтому лучше использовать наследование очень ограниченно. 
Alexey Volchanskiy
23011
Alexey Volchanskiy  
Vasiliy Sokolov:
К сожалению, идея наследования оказалась палкой о двух концах. Можно нечаяно и себя зашибить. Поэтому лучше использовать наследование очень ограниченно. 

В этом советнике, скорее всего, будет не более двух звеньев наследования. Рисунок просто для демонстрации наследования. Я сам не сторонник усложнения ) Вот Господь Бог... тот любит поразвлечься)))

Насчет "зашибить" смотрим стандартную библиотеку, там довольно глубокий уровень, особенно в Controls. 

Vasiliy Sokolov
26975
Vasiliy Sokolov  
Alexey Volchanskiy:

В этом советнике, скорее всего, будет не более двух звеньев наследования. Рисунок просто для демонстрации наследования. Я сам не сторонник усложнения ) Вот Господь Бог... тот любит поразвлечься)))

Насчет "зашибить" смотрим стандартную библиотеку, там довольно глубокий уровень, особенно в Controls. 

К сожалению стандартная библиотека не является эталоном. Некоторые классы просто шедевры, другие написаны откровенно без понимания предмета (видимо писали разные люди).
George Merts
4730
George Merts  
Vasiliy Sokolov:
К сожалению, идея наследования оказалась палкой о двух концах. Можно нечаяно и себя зашибить. Поэтому лучше использовать наследование очень ограниченно. 

А можно привести пример "зашиба" ?

Я вот, наоборот, всегда стремлюсь как можно шире использовать наследование и полиморфизм. Очень удобно иметь виртуальные функции, которые по мере необходимости вызываются именно у тех объектов, которые созданы...

Бывают случаи, что все наследники несут функционал класса предка, который наследникам уже не нужен - но здесь никаких особых проблем я не вижу. Не используй, да и все тут. Я уж не говорю о защищенном наследовании, когда пользователи класса - уже не могут обращаться к функциям предка, и, здесь очень просто можно "убрать лишний функционал".

Alexey Volchanskiy
23011
Alexey Volchanskiy  
George Merts:

А можно привести пример "зашиба" ?

Я вот, наоборот, всегда стремлюсь как можно шире использовать наследование и полиморфизм. Очень удобно иметь виртуальные функции, которые по мере необходимости вызываются именно у тех объектов, которые созданы...

Бывают случаи, что все наследники несут функционал класса предка, который наследникам уже не нужен - но здесь никаких особых проблем я не вижу. Не используй, да и все тут. Я уж не говорю о защищенном наследовании, когда пользователи класса - уже не могут обращаться к функциям предка, и, здесь очень просто можно "убрать лишний функционал".

Хорошо написано. Я в этом проекте широко использую виртуальные функциями, очень удобно. У классов-наследников разное "поведение", но одинаковый интерфейс. В MQL нет понятия интерфейс, но его нетрудно сымитировать.

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

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

Насчет "функционал класса предка, который наследникам уже не нужен" - да и бог с ним, все равно функции существуют в памяти в одном экземпляре. Память под данные, конечно, будет выделяться для каждого экземпляра, но сейчас, с гигабайтами ОЗУ это не очень важно.

Alexey Busygin
6561
Alexey Busygin  
Вы бы лучше ТЗ описали, а то непонятно, о чем вы и причем тут классы.
Vladimir Pastushak
84400
Vladimir Pastushak  
Alexey Volchanskiy:

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

Говорит, я даже не знаю, как быть, есть варианты входов, хочется их попробовать, можно так сделать? Придется писать несколько вариантов советника? А входы по объему в одну функцию явно не вместить, причем они должны рождаться динамически по рынку. То есть их может быть 1... N. Я упрощенно описываю ситуацию.

Говорю, сделаем базовый класс, где будет все неизменное, а от него будем рождать потомков с измененным поведением.

- А что такое класс?

Клиент немного понимает MQL, но не программист. Стал объяснять, чувствую, не понимает.

Нарыл в инете картинку классификации видов животных. Говорю, представим упрощенно, что все они произошли строго друг от друга ) Я в курсе, что это не так, но примем такое допущение.

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

- А, ясно! И даже Млекопитающие будут иметь функционал  Древнейших жгутиковых, я прав?

- Да, все верно.

Теперь думаю, как бы это дело оптимально использовать в тестере, стратегия не скальперская и не тиковая, для тестера подходит. А еще в пугающих загадках, кто такие Сосальщики ))

 

** 

Таких надо отправлять что бы сами сначала определились чего хотят а затем просили... Или пусть в ручную протестируют то что не знают...
Avals
3182
Avals  
Alexey Volchanskiy:

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

Говорит, я даже не знаю, как быть, есть варианты входов, хочется их попробовать, можно так сделать? Придется писать несколько вариантов советника? А входы по объему в одну функцию явно не вместить, причем они должны рождаться динамически по рынку. То есть их может быть 1... N. Я упрощенно описываю ситуацию.

Говорю, сделаем базовый класс, где будет все неизменное, а от него будем рождать потомков с измененным поведением.

- А что такое класс?

Клиент немного понимает MQL, но не программист. Стал объяснять, чувствую, не понимает.

Нарыл в инете картинку классификации видов животных. Говорю, представим упрощенно, что все они произошли строго друг от друга ) Я в курсе, что это не так, но примем такое допущение.

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

- А, ясно! И даже Млекопитающие будут иметь функционал  Древнейших жгутиковых, я прав?

- Да, все верно.

Теперь думаю, как бы это дело оптимально использовать в тестере, стратегия не скальперская и не тиковая, для тестера подходит. А еще в пугающих загадках, кто такие Сосальщики ))

 

** 

главное как это потом удобно юзать. Чтобы пробовать разные входы можно сделать это оптом по номеру сетапа входа. Т.е. есть коллекция сетапов входа. Если удобно, то как массив функций. Самые простые - безусловная покупка или продажа по рынку. Или условная)) А потом запускаем оптимизатор и перебираем разные сетапы входа
Alexey Volchanskiy
23011
Alexey Volchanskiy  
Alexey Busygin:
Вы бы лучше ТЗ описали, а то непонятно, о чем вы и причем тут классы.

Какое ТЗ - которое мне выдал заказчик? )) Это, по вашему, политкорректно? 

А классы при всем. Или для вас это некая экзотика? Для меня обыденный рабочий инструмент. 

Alexey Volchanskiy
23011
Alexey Volchanskiy  
Vladimir Pastushak:
Таких надо отправлять что бы сами сначала определились чего хотят а затем просили... Или пусть в ручную протестируют то что не знают...
Почему же? Я люблю исследования, особенно, если их оплачивают )
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий