Обсуждение статьи "Работаем с результатами оптимизации через графический интерфейс"

 

Опубликована статья Работаем с результатами оптимизации через графический интерфейс:

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

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

Автор: Anatoli Kazharski

 

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

string arrays and structures containing objects are not allowed

Ещё один вариант — записывать отчёт в файл и уже его передавать во фрейм. Но такой вариант тоже нам не подошёл: при этом пришлось бы слишком часто записывать результаты на жёсткий диск.

Есть еще такой вариант передачи строк и прочего

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: TypeToBytes

fxsaber, 2017.07.19 12:16

Пример практического применения в Report-библе

Отправляем фрейм с разными данными

        string Str;
        REPORT::ToString(Str);

        double Balance[];
        REPORT::GetBalanceHistory(Balance);

      #ifdef __TYPETOBYTES__
        CONTAINER<uchar> Container;

        Container[0] = Str;     // поместили в контейнер строку с отчетом
        Container[1] = Balance; // добавили в контейнер еще и double-массив истории изменения баланса

        ::FrameAdd(NULL, 0, ::AccountInfoDouble(ACCOUNT_BALANCE), Container.Data); // Отправили фрейм со string-отчетом и массивом баланса
      #else  // __TYPETOBYTES__

Принимаем фрейм с разными данными

 CONTAINER<uchar> Container;

    while (::FrameNext(Pass, Name, ID, Value, Container.Data))
    {
        string Str;
        Container[0].Get(Str);     // Получили из фрейма строку-отчет

        double Balance[];
        Container[1].Get(Balance); // Получили из фрейма соответствущий double-массив

// .....
 
fxsaber:

Есть еще такой вариант передачи строк и прочего

Интересный вариант. Спасибо.

 

Каждый раз, когда пользователь выделяет строку в таблице, график мультисимвольных балансов обновляется на вкладке Balance:

Избавиться от 2 лишних кликов переключения на вкладку графиков и обратно, поместив графики в том же окне?

И перемещаться по строкам таблицы кнопками вверх/вниз, моментально получая соответствующие кривые?

 
Andrey Khatimlianskii:

Избавиться от 2 лишних кликов переключения на вкладку графиков и обратно, поместив графики в том же окне?

И перемещаться по строкам таблицы кнопками вверх/вниз, моментально получая соответствующие кривые?

Подобных отличных решений не хватает и в штатном Оптимизаторе.

 
Andrey Khatimlianskii:

1. Избавиться от 2 лишних кликов переключения на вкладку графиков и обратно, поместив графики в том же окне?

2. И перемещаться по строкам таблицы кнопками вверх/вниз, моментально получая соответствующие кривые?

Сейчас готовится материал для ещё одной статьи по этой теме. Первый пункт учту, а второй пока нет, так как не планировал в ближайшее время возвращаться к GUI-библиотеке.

 
Anatoli Kazharski:

второй пока нет, так как не планировал в ближайшее время возвращаться к GUI-библиотеке.

Это не обязательно встраивать в библиотеку, просто удобная дополнительная фича.

 
Andrey Khatimlianskii:

Это не обязательно встраивать в библиотеку, просто удобная дополнительная фича.

Я посмотрю, что можно сделать.