Датафреймы (таблицы) в MQL5

 

Год назад задавал вопрос по теме. Администрация, как обычно, тактично промолчала) Но, опять же как обычно, нашлась парочка гениев, предложивших сделать всё самому)

Собственно вопрос в том, что неужели их так просто реализовать или советчики просто не в курсе что это такое?

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

 
Aleksey Nikolayev:

Год назад задавал вопрос по теме. Администрация, как обычно, тактично промолчала) Но, опять же как обычно, нашлась парочка гениев, предложивших сделать всё самому)

Собственно вопрос в том, что неужели их так просто реализовать или советчики просто не в курсе что это такое?

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

вот было https://www.mql5.com/ru/articles/6602 про таблицы, записи и многомерные данные

Применение OLAP в трейдинге (Часть 1): Основы оперативного анализа многомерных данных
Применение OLAP в трейдинге (Часть 1): Основы оперативного анализа многомерных данных
  • www.mql5.com
В статье описываются общие принципы построения фреймворка для оперативного анализа многомерных данных (OLAP), его реализация на MQL и применение в среде MetaTrader на примере обработки торговой истории счета.
 
Maxim Kuznetsov #:

вот было https://www.mql5.com/ru/articles/6602 про таблицы, записи и многомерные данные

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

В статье не совсем датафреймы, поскольку вроде нет возможности произвольно добавлять\удалять столбцы, но всё равно она интересна. Ну и если нужны только датафреймы с фиксированным набором числовых столбцов, то вполне подойдёт.

 
Ещё есть возможность сделать датафреймы на основе таблиц SQLite. Возможно, так будет попроще.
 

Создаём структуру.

Помещаем в неё переменные разных типов.

Объявляем массив таких структур.

struct Row
{
   uint Field1;
   float Field2;
   string Field3;
   complex Field4;
};

Row Table[];

В результате у нас будет такая таблица:

Таблица

 
Koldun Zloy #:

Создаём структуру.

Помещаем в неё переменные разных типов.

Объявляем массив таких структур.

В результате у нас будет такая таблица:


У вас получается, грубо говоря, фиксированный массив столбцов, а датафрейм - динамически изменяемый список столбцов. Посмотрите что такое датафрейм в питоне или в R.
 
Aleksey Nikolayev #:
У вас получается, грубо говоря, фиксированный массив столбцов, а датафрейм - динамически изменяемый список столбцов. Посмотрите что такое датафрейм в питоне или в R.

Это тоже можно сделать при желании.

Кстати в питоне это тоже не встроенный тип, а библиотечный.

 
Aleksey Nikolayev #:
создание числовых датафреймов (столбцы со строками надо делать как-то по другому).

я как-то делал неполный аналог датафреймов (публично, даже ветку форума заводил, но её удалили), так вот типа double хватает для хранения любых данных.

Способ честно подсмотрен в нутрах JS :-) Назывaется  NaN packed или NaN boxing

 
Maxim Kuznetsov #:

я как-то делал неполный аналог датафреймов (публично, даже ветку форума заводил, но её удалили), так вот типа double хватает для хранения любых данных.

Способ честно подсмотрен в нутрах JS :-) Назывaется  NaN packed или NaN boxing

Выделенное почему-то напомнило одного местного трильонера)

Для double подходят (как аналоги датафреймов) местные матрицы.

Для себя проблему пока решил, но для широкого полноценного использования МО в МТ5 без нормальных датафреймов не обойтись.

Причина обращения: