Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXV): Обработка ошибок, возвращаемых торговым сервером" - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Про информацию, записанную в значение Magic Number:
вы можете для создания различных групп использовать для каждой группы свой собственный магик. Например, если магик советника 123, то магик первой группы будет 124, магик второй группы 125, третьей - 126, и т.д..
Библиотека предлагает иной способ создания различных групп - номер каждой подгруппы хранится прямо в значении Magic Number. ТОгда магик советника - это тоже идентификатор группы, но он вынесен в независимую группу, которая называется MagicID - идентификатор магика советника. И есть ещё две группы. В каждой из них есть 15 подгрупп. И каждой из подгрупп можно задать свой идентификатор.
Это даст большую гибкость при работе с группами.
Например: Мы хотим перемещать сетку отложенных ордеров за ценой - добавляем их в группу 1 в подгруппу 1. Группа 1 перемещается за ценой. Подгруппа 1 перемещается по МА. Теперь какие-то из тех ордеров, которые перемещаются за ценой (группа 1) мы хотим перемещать по Parabolic SAR. Даём им подгруппу 2. Тогда группа 1 - перемещается за ценой, но подгруппа 1 перемещается по МА, а подгруппа 2 - по Parabolic SAR.
Ордера срабатывают, превращаясь в позиции - можно задать свои группы для модификации стоплосс, и свои подгруппы в этой группе для модификации по разным значениям. Алгоритмы модификации записываем в подгруппы.
В общем - полёт фантазии. Простым магиком тоже можно, но придётся самому придумывать логику отслеживания различных групп.
По второму вопросу:
Есть класс CSelect. Он доступен из программы, и предоставляет способы выбора и поиска, о которых вы пишете, из всех существующих коллекций: Account, Event, Order, Symbol.
Можно выбрать объекты каждой коллекции в список по всем критериям. В созданном списке можно заново отобрать по уточняющим критериям, можно найти максимальную и минимальную величины по критерию выборки.
Впрочем, далее будут пользовательские функции (много позже) для быстрого и удобного доступа ко всем свойствам всех коллекций и поиска в них.
Но пока - только посредством CSelect, и тогда, когда вам это нужно. Класс статический, поэтому доступ к к его методам через "::" Например, CSelect::ByOrderProperty().
Да, кстати, и пример использования в программе есть прямо в тестовом советнике - например, в его функциях трейлинга:
С CSelect я разобрался, но получается, придется проделывать выбор в каждом месте, где нам нужны агрегированные величины: скажем, мне нужно вычислять общий профит сетки позиций, чтобы его тралить, это одна функция. А в другой я, скажем, подправляю общий тейк сетки после открытия, или закрытия одного из ордеров - и для этого мне нужен общий профит и совокупный объем.
А где-то еще мне нужно принять решение, открывать новую сетку, или продолжать текущую - нужно знать сколько у меня уже открыто ордеров в этой группе.
Все эти величины вычисляются одним пробегом по списку, который можно выбрать серией CSelect-ов. Но поскольку нужны они в разных местах, придется каждый раз заводить агрегирующую конструкцию, пересчитывать в начале тика и потом использовать повсеместно.
Я подумал, что было бы хорошо добавить такую конструкцию в библиотеку, с возможностью аллоцировать ее по набору критериев выборки, например символ, магик (с группами), тип ордера.
И пусть собирает простую статистику: количество ордеров, общий объем, общий профит... коллекция ордеров, кстати, раз уж мы ее отобрали уже.
Иначе или городить каждый раз вспомогательную структуру, или CSelect-ы и итерация в каждом месте.
С CSelect я разобрался, но получается, придется проделывать выбор в каждом месте, где нам нужны агрегированные величины: скажем, мне нужно вычислять общий профит сетки позиций, чтобы его тралить, это одна функция. А в другой я, скажем, подправляю общий тейк сетки после открытия, или закрытия одного из ордеров - и для этого мне нужен общий профит и совокупный объем.
А где-то еще мне нужно принять решение, открывать новую сетку, или продолжать текущую - нужно знать сколько у меня уже открыто ордеров в этой группе.
Все эти величины вычисляются одним пробегом по списку, который можно выбрать серией CSelect-ов. Но поскольку нужны они в разных местах, придется каждый раз заводить агрегирующую конструкцию, пересчитывать в начале тика и потом использовать повсеместно.
Я подумал, что было бы хорошо добавить такую конструкцию в библиотеку, с возможностью аллоцировать ее по набору критериев выборки, например символ, магик (с группами), тип ордера.
И пусть собирает простую статистику: количество ордеров, общий объем, общий профит... коллекция ордеров, кстати, раз уж мы ее отобрали уже.
Иначе или городить каждый раз вспомогательную структуру, или CSelect-ы и итерация в каждом месте.
А вы предлагаете утяжелить расчёты в самой библиотеке? Там и так много всего считается.
Почему бы не сделать предлагаемое прямо в советнике вместо библиотеки? Разницы-то нет где всё это считать. Но кому-то это нужно (вам), а кому-то - нет. И зачем ему лишние вычисления?
А чтобы не считать каждый раз в разных функциях одно и то же, нужно завести в советнике глобальные списки, в которые складывать нужную везде информацию. А в отдельных функциях, и только по мере надобности, брать эти общедоступные списки, и уже из них получать необходимые только внутри функции данные, и их возвращать.
Библиотека предоставляет набор данных, предоставляет возможность выборки этих данных в любом сочетании, и даёт инструменты для самостоятельного решения задач, которые делать с нуля самому достаточно не быстро.
А вы предлагаете утяжелить расчёты в самой библиотеке? Там и так много всего считается.
Почему бы не сделать предлагаемое прямо в советнике вместо библиотеки? Разницы-то нет где всё это считать. Но кому-то это нужно (вам), а кому-то - нет. И зачем ему лишние вычисления?
А чтобы не считать каждый раз в разных функциях одно и то же, нужно завести в советнике глобальные списки, в которые складывать нужную везде информацию. А в отдельных функциях, и только по мере надобности, брать эти общедоступные списки, и уже из них получать необходимые только внутри функции данные, и их возвращать.
Библиотека предоставляет набор данных, предоставляет возможность выборки этих данных в любом сочетании, и даёт инструменты для самостоятельного решения задач, которые делать с нуля самому достаточно не быстро.
Ну я предлагаю считать опционально.
Заводить "подписку".
Но если Вам эта идея не кажется достойной внимания, я, конечно, сам напишу обертку.
Еще раз спасибо за то, что уже сделано - и наперед за все, что еще в планах (я то тут то там встречаю оговорки о планах продолжать развитие библиотеки)
Ну я предлагаю считать опционально.
Заводить "подписку".
Но если Вам эта идея не кажется достойной внимания, я, конечно, сам напишу обертку.
Еще раз спасибо за то, что уже сделано - и наперед за все, что еще в планах (я то тут то там встречаю оговорки о планах продолжать развитие библиотеки)