ООП vs процедурное программирование - страница 5

 
Petros Shatakhtsyan:

Вот допустим такая простая задача (чтобы детально объяснить, надо много писать).

Всё происходит в OnTick(). Допустим проверяем какое-то условие и открываем ордер. Условие не важно, допустим это какие-то макс. или мин.

Естественно робот на каком то графике стоит, котировки этого символа и получает. Понятно что тут не только одна функция OnTick, есть и другие: OnTrade, OnTimer, собственные функции и т.д.

Следовательно надо все переменные которые общие, объявить вне этих функций, в начале кода. Например такие, как имя символа, аск, бид, спред, количество знаков котировки и т.д. Их будет несколько десяток.

Этот робот будет торговать только на одном символе, т.е. там где он стоит.  Таких графиков допустим 20, и на всех устанавливаем тот же робот, чтобы одновременно торговал для всех 20 пар.

Но это не мультивалютный робот, как некоторые указывают в Маркете.


Вот требуется его превратить мультивалютника. Т.е. его ставим на любой график(только на 1 график), а он открывает сделки для 20 пар. Т.е мы его запускаем на тестере в одиночном режиме, а он торгует с теми парами, которые находятся в Market Watch.

Вот как будете без ООП это осуществить. Все общие переменные будете превратить в массивы из 20 -и элементов ?

А как быть с функциями, которые будут вызваны одновременно для всех пар ?

Вот и без ООП не обойтись. :)


P.S. Хочу отметить, что у меня не русское образование, и поэтому  долго написал, и не успел прочитать несколько страниц.

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

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

 
Реter Konow:
Желательно привести к конкретной задаче. Такое описание не очень понятно. В моей практике алгоритм не меняется от изменения внешних параметров. Он заранее делается  универсальным для любых значений этих параметров. Поэтому, не очень ясно, что Вы имеете ввиду. Опишите на конкретном примере.

Например, в одного эксперта надо впихнуть 100 вариантов трейлингстопа. При процедурном программировании получается вот такая портянка: 

if(Trailing_01_ON){
    Trailing1();
}

if(Trailing_02_ON){ Trailing2(); } ...

...

...

if(Trailing_99_ON){ Trailing99(); }

100 идентичных участков кода. При работе программы обычно будет включен только какой-то один из трейлингов, остальные 99 ифов будут просто поедать ресурсы. 

Теперь вариант с OOP. При инициализации эксперта масштабируем массив с указателями, в соответствии с количество реально включенных трейлингов, создаем объекты только для включенных трейлингов. В итого постоянно работать будет примерно такой код:

for(int i=0;i<cnt;i++){
   p[i].Main();
} 

Если включен один трейлинг, то cnt=1, то есть нет ничего лишнего.

 
Dmitry Fedoseev:

Тут скорее уместен вопрос не "как", а "зачем"? Зачем кодить то, что и так уже реализовано в терминале - просто надо открыть нужное количество графиков и повесить на них по эксперту. К тому же на разных символах и таймфреймх параметры, скорее всего, должны быть разные. 


В терминале ничего не реализовано. Во первых вместо 20 графика открывается только один, а во вторых на тестере вы не сможете одновременно тестировать со многими парами, учитывая все открытые позиции.

Только не говорите, что есть режим  "All symbols selected in MarketWatch".

 

Тот программист который не понимает как описывается понятие "Объект", можно считать что он программист-любитель, и не владеет искусством современного программирования.

 
Dmitry Fedoseev:

Например, в одного эксперта надо впихнуть 100 вариантов трейлингстопа. При процедурном программировании получается вот такая портянка: 

100 идентичных участков кода. При работе программы обычно будет включен только какой-то один из трейлингов, остальные 99 ифов будут просто поедать ресурсы. 

Теперь вариант с OOP. При инициализации эксперта масштабируем массив с указателями, в соответствии с количество реально включенных трейлингов, создаем объекты только для включенных трейлингов. В итого постоянно работать будет примерно такой код:

Если включен один трейлинг, то cnt=1, то есть нет ничего лишнего.

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

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

 
Реter Konow:

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

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


Допустим трейлинг по МА, а их несколько десятков.

Да и зачем что-то сжимать, если можно жить легко?
 
Dmitry Fedoseev:

Допустим трейлинг по МА, а их несколько десятков.

Да и зачем что-то сжимать, если можно жить легко?


Получается, что суть Вашего аргумента в пользу ООП строится на облегчении изначально нелепого решения. Сомнительный аргумент...


Зачем несколько десятков различных функций трейлингов? Серьезному программисту владеющему ООП трудно написать одну универсальную?

 
Реter Konow:


Получается, что суть Вашего аргумента в пользу ООП строится на облегчении изначально нелепого решения. Сомнительный аргумент...

С чего вдруг оно нелепое?

Как раз нелепо было бы использовать 100 ифов.

 
Dmitry Fedoseev:

С чего вдруг оно нелепое?

Как раз нелепо было бы использовать 100 ифов.

Не нужно использовать 100 ифоф. Нужно решить задачу более эффективно и сделать одну функцию с приспосабливающимся к различным параметрам трейлингом.
 
Реter Konow:
Не нужно использовать 100 ифоф. Нужно решить задачу более эффективно и сделать одну функцию с приспосабливающимся к различным параметрам трейлингом.

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