Пожеланию к оптимизатору стратегий

 

Хотелось бы обсудить насущные проблемы оптимизатора стратегий (да и не только стратегий).  В текущей реализации его практически нереально/нерентабельно использовать для серьёзных задач, требующих тяжёлых вычислений и обработку больших объёмов данных.  Причина - в его негибкости.

Стандартная ситуация:  требуется произвести некую оптимизацию с большим количеством проходов, причём часть из этих проходов (комбинаций параметров) просчитывать не нужно - они уже были посчитаны ранее, и результаты по ним сохранены в файл. 

Какие возможности нам даёт оптимизатор в этой ситуации?

1) Тупо пересчитывать все комбинации параметров.  При этом всё то, что было посчитано на прошлых оптимизациях, никак не учитывается. Итог - теряем время и деньги на ненужных вычислениях.

2) Отсылать агентам файл с подготовленными комбинациями, которые требуется просчитать (либо наоборот не нужно просчитывать). Агент парсит этот файл, находит свою комбинацию (либо не находит) и принимает соответствующее решение.  Итог - теряем время и деньги на бессмысленную пересылку файла по сети КАЖДОМУ агенту (а это могут быть сотни мегабайт), и последующее чтение этого файла агентом. 

3) Так же отсылаем агентам файл с заданными комбинациями для расчёта.  Но при этом в программе убираем все входные параметры советника, оставляя лишь единственный параметр  - Индекс комбинации,  который означает порядковый номер комбинации в файле.  Соответственно количество проходов будет равно число требуемых комбинаций, и каждый агент будет получать и выполнять только полезное задание.  Вроде неплохо.  Но только теряется возможность управления параметрами советника с помощью функционала тестера, уже не говоря о генетическом алгоритме.

Кроме того, обычно ситуация усугубляется ещё и тем, что агенты используют некий файл с входными данными для расчёта, причём требуемые данные уникальны для каждого агента (для каждой комбинации параметров).  Но мы вынуждены передавать этот файл целиком.  Каждому агенту!  А объём этих данных может составлять уже не сотни мегабайт, а гигабайты и более. Это ставит крест на облачных вычислениях.

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

В противном случае, приходится ориентироваться на серьёзные сервисы типа Амазона.

 

Оптимизация - это вовсе не перебор вариантов и подбор параметров. Это сложная, я бы сказал, интеллектуальная работа. И самое прибыльное далеко не всегда лучшее.

Что вы хотите от тестера? Чтобы эту работу он сделал за вас? Ясно, не сделает. Никто кроме вас не сделает. Вывод - имейте свой тестер, а об автоматической оптимизации забудьте. :) О любой.

 
Yuriy Asaulenko:

Оптимизация - это вовсе не перебор вариантов и подбор параметров. Это сложная, я бы сказал, интеллектуальная работа. И самое прибыльное далеко не всегда лучшее.

Что вы хотите от тестера? Чтобы эту работу он сделал за вас? Ясно, не сделает. Никто кроме вас не сделает. Вывод - имейте свой тестер, а об автоматической оптимизации забудьте. :) О любой.

Вы просто лишь бы что-то ляпнуть? По делу есть что сказать?   Вариант "имейте свой тестер" и прочую философию - где-нибудь в другом месте обсуждайте.  Тут конкретно обсуждаем тестер МТ и его функционал.
 
Тут не только оптимизатор надо дорабатывать но и тестер.Вроде как мт5 уже вышла ,а из нового только возможность протестировать индикаторы
 
Alexey Navoykov:
Вы просто лишь бы что-то ляпнуть? По делу есть что сказать?   Вариант "имейте свой тестер" и прочую философию - где-нибудь в другом месте обсуждайте.  Тут конкретно обсуждаем тестер МТ и его функционал.

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

Все, ушел. Обсуждайте этот бред без меня. Успехов. :))

 
Alexey Navoykov:

Хотелось бы обсудить насущные проблемы оптимизатора стратегий (да и не только стратегий).  В текущей реализации его практически нереально/нерентабельно использовать для серьёзных задач, требующих тяжёлых вычислений и обработку больших объёмов данных.  Причина - в его негибкости.

Стандартная ситуация:  требуется произвести некую оптимизацию с большим количеством проходов, причём часть из этих проходов (комбинаций параметров) просчитывать не нужно - они уже были посчитаны ранее, и результаты по ним сохранены в файл. 

Какие возможности нам даёт оптимизатор в этой ситуации?

1) Тупо пересчитывать все комбинации параметров.  При этом всё то, что было посчитано на прошлых оптимизациях, никак не учитывается. Итог - теряем время и деньги на ненужных вычислениях.

2) Отсылать агентам файл с подготовленными комбинациями, которые требуется просчитать (либо наоборот не нужно просчитывать). Агент парсит этот файл, находит свою комбинацию (либо не находит) и принимает соответствующее решение.  Итог - теряем время и деньги на бессмысленную пересылку файла по сети КАЖДОМУ агенту (а это могут быть сотни мегабайт), и последующее чтение этого файла агентом. 

3) Так же отсылаем агентам файл с заданными комбинациями для расчёта.  Но при этом в программе убираем все входные параметры советника, оставляя лишь единственный параметр  - Индекс комбинации,  который означает порядковый номер комбинации в файле.  Соответственно количество проходов будет равно число требуемых комбинаций, и каждый агент будет получать и выполнять только полезное задание.  Вроде неплохо.  Но только теряется возможность управления параметрами советника с помощью функционала тестера, уже не говоря о генетическом алгоритме.

Кроме того, обычно ситуация усугубляется ещё и тем, что агенты используют некий файл с входными данными для расчёта, причём требуемые данные уникальны для каждого агента (для каждой комбинации параметров).  Но мы вынуждены передавать этот файл целиком.  Каждому агенту!  А объём этих данных может составлять уже не сотни мегабайт, а гигабайты и более. Это ставит крест на облачных вычислениях.

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

В противном случае, приходится ориентироваться на серьёзные сервисы типа Амазона.

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

Yuriy Asaulenko:

Оптимизация - это вовсе не перебор вариантов и подбор параметров. Это сложная, я бы сказал, интеллектуальная работа. И самое прибыльное далеко не всегда лучшее.

Что вы хотите от тестера? Чтобы эту работу он сделал за вас? Ясно, не сделает. Никто кроме вас не сделает. Вывод - имейте свой тестер, а об автоматической оптимизации забудьте. :) О любой.

 

Можно ещё такой способ - через специальную Callback функцию, например

bool OnTesterCombination(ulong pass, long& data[], double& result)

которая вызывается на нашем компьютере до начала тестирования указанной комбинации (pass) агентом. Если возвращаем true, то комбинация передаётся агенту на тестирование, при этом мы можем также передать ему некие данные в массиве data.  Если же возвращаем false, то комбинация не тестируется, мы просто сами присваиваем переменой result некое значение результата (например взятым из файла).

Этот способ подходит как для обычной оптимизации, так и для генетической

 
Evgeny Belyaev:

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

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

Или я ошибаюсь, и вы имели ввиду большинство пользователей именно облака?  Тогда откуда у вас знание, что для них актуально, а что нет?

 
Alexey Navoykov:

Хотелось бы обсудить насущные проблемы оптимизатора стратегий (да и не только стратегий).  В текущей реализации его практически нереально/нерентабельно использовать для серьёзных задач, требующих тяжёлых вычислений и обработку больших объёмов данных.  Причина - в его негибкости.

Стандартная ситуация:  требуется произвести некую оптимизацию с большим количеством проходов, причём часть из этих проходов (комбинаций параметров) просчитывать не нужно - они уже были посчитаны ранее, и результаты по ним сохранены в файл. 

Вами озвучена интересная проблема. Может есть возможность залить файл на сервер и дать к нему доступ для скачивания, так сэкономите свой трафик и время, или в облаке это невозможно?
 
-Aleks-:
Вами озвучена интересная проблема. Может есть возможность залить файл на сервер и дать к нему доступ для скачивания, так сэкономите свой трафик и время, или в облаке это невозможно?
Тоже думал над таким вариантом. А возможно даже и предлагал на форуме, уже не помню. И скачиваться файл должен только по фактическому запросу из агента, а не всем агентам без разбора.  Либо ещё оптимальней: чтоб сам файл никуда не скачивался, просто шло перенаправление доступа на сервер.  По сути как в пайп-каналах.  Тогда отпадает необходимость дробить большой файл на отдельные части.  Агент просто переходит в нужное место в файле и считывает тот кусок, который ему требуется.  И никакого перерасхода трафика.