Обсуждение статьи "Разрабатываем мультивалютный советник (Часть 20): Приводим в порядок конвейер этапов автоматической оптимизации проектов (I)"
Попробовал запустить ваш пример.
Установил groupId_ = 1.
Но в функции инициализации эксперт не создается. Здесь выходит:
int OnInit() { // Устанавливаем параметры в классе управления капиталом CMoney::DepoPart(expectedDrawdown_ / 10.0); CMoney::FixedBalance(fixedBalance_); // Строка инициализации с наборами параметров стратегий string strategiesParams = NULL; // Если выбранный индекс группы стратегий из библиотеки является допустимым, то if(groupId_ >= 0 && groupId_ < ArraySize(CGroupsLibrary::s_params)) { // Берём строку инициализации из библиотеки для выбранной группы strategiesParams = CGroupsLibrary::s_params[groupId_]; } // Если группа стратегий из библиотеки не задана, то прерываем работу if(strategiesParams == NULL) { return INIT_FAILED; } // Подготавливаем строку инициализации для эксперта с группой из нескольких стратегий string expertParams = StringFormat( "class CVirtualAdvisor(\n" " class CVirtualStrategyGroup(\n" " [\n" " %s\n" " ],%f\n" " ),\n" " class CVirtualRiskManager(\n" " %d,%.2f,%d,%.2f,%.2f,%d,%.2f,%.2f,%d,%.2f,%d,%.2f,%.2f" " )\n" " ,%d,%s,%d\n" ")", strategiesParams, scale_, rmIsActive_, rmStartBaseBalance_, rmCalcDailyLossLimit_, rmMaxDailyLossLimit_, rmCloseDailyPart_, rmCalcOverallLossLimit_, rmMaxOverallLossLimit_, rmCloseOverallPart_, rmCalcOverallProfitLimit_, rmMaxOverallProfitLimit_, rmMaxOverallProfitDate_, rmMaxRestoreTime_, rmLastVirtualProfitFactor_, magic_, "SimpleVolumes", useOnlyNewBars_ ); PrintFormat(__FUNCTION__" | Expert Params:\n%s", expertParams); // Создаем эксперта, работающего с виртуальными позициями expert = NEW(expertParams); // Если эксперт не создан, то возвращаем ошибку if(!expert) return INIT_FAILED; ... }
Если идти глубже, то объект не создается в CVirtualFactory():
class CVirtualFactory { public: // Создание объекта из строки инициализации static CFactorable* Create(string p_params) { // Читаем имя класса объекта string className = CFactorable::ReadClassName(p_params); // Указатель на создаваемый объект CFactorable* object = NULL; // В зависимости от имени класса вызываем соответствующий конструктор if(className == "CVirtualAdvisor") { object = new CVirtualAdvisor(p_params); ...
Не подскажите в чем дело, и как всё-таки попробовать ваш пример в действии?
Спасибо.
Здравствуйте.
Возможно, дело в том, что у вас не выполнены работы по созданию записей в библиотеке параметров или даже все остальные необходимые этапы автоматической оптимизации. Про последний этап - наполнение библиотеки - можно, например, посмотреть подробнее в части 17.
Хотя, возможно, что дело в другом. По идее, для запуска итогового советника вам уже не нужна база данных. Проверю код и отвечу позже.Hi Yuriy
I have used Google Translate to get me to Part 20. Google "Google Translate" and put it on a new tab in the browser. It will place an icon in the search bar at the far right. Load the page in its native language and press the icon to select the article language and the one to translate into it. Presto,I am at part 20! It does not do a perfect job but the translation is 99% useful.
I loaded your Archive Source into Excel and added a few columns to sort on to arrange the contents. In addition to sorting in Excel, the spreadsheet can be imported into an OutLook database directly
I am having problems identifying the starting article to establish the SQL database. I tried running Simple Volume Stage 1 and got a flat line which indicates to me that I probably need to backtrack and create another SQL data base. It would be extremely helpful to have a table of the order of executions of the necessary programs to get a working system. Perhaps you could add it to the Archive Source table.
Another tiny request is to use the <> option for include file specifications instead of "". I am keeping your system separate in my Experts and Include directories, #include <!! MultiCurrency\VirtualAdvisor.mqh>, so this change will make it easier to add the subdirectory specification/
Thanks for your input
CapeCoddah
Здравствуйте.
Про начальное заполнение базы данных информацией о проекте, этапах, работах и задачах можно посмотреть в частях 13, 18, 19. Это не является основной темой, поэтому нужная вам информация будет где-то ближе к концу статей. Например, в части 18:
Или в части 19:
Или вы можете подождать следующую статью, которая будет посвящена в том числе и вопросу первоначального наполнения базы данных с помощью вспомогательного скрипта.
Переход на использование папки include для хранения файлов библиотек есть в планах, но пока до этого дело не дошло.
Hello.
About the initial filling of the database with information about the project, stages, works and tasks can be found in parts 13, 18, 19. This is not a major topic, so the information you need will be somewhere closer to the end of the articles. For example, in part 18:
Or in part 19:
Or you can wait for the next article, which will be devoted, among other things, to the question of the initial filling of the database using the auxiliary script.
The transition to using the include folder for storing library in the plans, but so far it has not come to it.
many thanks
Hi Yuriy,
Have you submitted the next article or know when it will be published?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Разрабатываем мультивалютный советник (Часть 20): Приводим в порядок конвейер этапов автоматической оптимизации проектов (I):
Мы создали уже довольно много компонентов, которые помогают организовать процесс автоматической оптимизации. При создании мы придерживались традиционной цикличности: от создания минимального рабочего кода до рефакторинга и получения улучшенного кода. Пришло время заняться наведением порядка в нашей базе данных, которая тоже является ключевым компонентом в создаваемой системе.
Напомним, что в рамках данного цикла статей мы пытаемся создать систему автоматической оптимизации, позволяющую без участия человека найти хорошие комбинации параметров одной торговой стратегии, которые затем будут объединены в один итоговый советник. Более детально постановка задачи описана в части 9 и части 11. Сам процесс такого поиска будет управляться одним советником (оптимизирующий советник), и все данные, которые будет необходимо сохранять в процессе его работы, записываются в основную базу данных.
В базе данных у нас есть таблицы для хранения информации о нескольких классах объектов. У некоторых есть поле статуса, которое может принимать значения из фиксированного набора значений ("В очереди", "Выполняется", "Завершён"), но не для всех классов это поле используется. Точнее пока что оно используется только для задач оптимизации (task). Наш оптимизирующий советник ищет в таблице задач (tasks) задачи со статусом "В очереди", чтобы выбрать следующую задачу для запуска. После завершения выполнения каждой задачи её статус в базе данных меняется на "Выполнена".
Давайте попробуем реализовать автоматическое обновление статусов не только для задач, но и для всех остальных классов объектов (работ, этапов, проектов) и организовать автоматическое выполнение всех необходимых этапов вплоть до получения итогового советника, который сможет работать самостоятельно без подключения к базе данных.
Автор: Yuriy Bykov