Обсуждение статьи "3D-моделирование на MQL5"

 

Опубликована статья 3D-моделирование на MQL5:

Временной ряд — это динамическая система, в которой значения некоторой случайной величины поступают последовательно — непрерывно или через некоторые промежутки времени. Переход от плоского к объёмному анализу рынка позволяет по-новому взглянуть на сложные процессы и явления, интересующие исследователя. В статье описаны функции визуализации для 3-D представления двумерных данных.

Применительно к финансовым рынкам 3D-моделирование используется, например, для трёхмерного представления временных рядов. Временной ряд — это динамическая система, в которой значения некоторой случайной величины поступают последовательно — непрерывно или через некоторые промежутки времени (тики, бары, фракталы и т.п.). В этой статье рассмотрим вопрос визуализации трёхмерного представления временных рядов, таких как таймсерии и индикаторы (см. рис. 1).

Рис. 1. Примеры трёхмерного представления временных рядов.

Рис. 1. Примеры трёхмерного представления временных рядов.

Автор: Sergey Pavlov

 

Не простая работа получилась, но изначально подход, видится, выбран не правильный - через трендовые линии-объекты.

Почему не через Bitmap-объект с кастомным ресурсом - канвас? Скорее всего, мат. либа именно так и будет реализована в 3D. 

 
fxsaber:

Не простая работа получилась, но изначально подход, видится, выбран не правильный - через трендовые линии-объекты.

Почему не через Bitmap-объект с кастомным ресурсом - канвас? Скорее всего, мат. либа именно так и будет реализована в 3D. 

А как тогда реализовать интерактивность (управление 3D объектом)? Как реагировать на изменение таймфрейма, масштаба графика, изменение окна, появление нового тика (бара) и множества других?

В данной реализации, это всё делает терминал и функционал языка MQL5. И ничего программировать не надо. Т.е. предложено простое решение сложной задачи.

 
Sergey Pavlov:

А как тогда реализовать интерактивность (управление 3D объектом)? Как реагировать на изменение таймфрейма, масштаба графика, изменение окна, появление нового тика (бара) и множества других?

В данной реализации, это всё делает терминал и функционал языка MQL5. И ничего программировать не надо. Т.е. предложено простое решение сложной задачи.

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

Немного интерактивности и мат. библа сейчас умеет

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

Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее"

fxsaber, 2016.11.14 10:11

Прошу доработать CGraphic и CCurve. Слабые классы получились. И наследоваться от них почти нереально, потому что нужное - private. Долго вникал, но чтобы поправить до нормальной эксплуатации, требовалось переписывать самому классы.

Захотел сделать интерактивный тиковый график - вышло только костыльно (без переписывания классов)

#include <Graphics/Graphic.mqh>

void GetPrices( double &Bids[], double &Asks[], const int Count = 100 )
{
  MqlTick Ticks[];
  
  const int Amount = CopyTicks(_Symbol, Ticks, COPY_TICKS_INFO, 0, Count);
  
  ArrayResize(Bids, Amount);
  ArrayResize(Asks, Amount);
  
  for (int i = 0; i < Amount; i++)
  {
    Bids[i] = Ticks[i].bid;
    Asks[i] = Ticks[i].ask;
  }
}

CGraphic* Graphic = new CGraphic;
const string Name = "Graphic" +(string)(GetTickCount() + MathRand());

void OnDeinit( const int Reason )
{
  Graphic.Destroy();
  delete Graphic;
  
  ChartRedraw();
}

void GraphTicks( const double &Price1[], const double &Price2[] )
{
   Graphic.Destroy();
   delete Graphic;

   Graphic = new CGraphic;  
   Graphic.Create(0, Name, 0, 0, 0, (int)(ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) * 0.8), (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS));

   Graphic.AddCurve(Price1, CURVE_LINES);
   Graphic.AddCurve(Price2, CURVE_LINES);
  
   Graphic.PlotAllCurves();
   Graphic.Update();
}

void OnTick()
{
  double Bids[], Asks[];
  GetPrices(Bids, Asks);
  
  GraphTicks(Bids, Asks);
}

 

Нет DeleteCurve, ChangeCurve и т.д. 


 
Sergey Pavlov:

А как тогда реализовать интерактивность (управление 3D объектом)? Как реагировать на изменение таймфрейма, масштаба графика, изменение окна, появление нового тика (бара) и множества других?

В данной реализации, это всё делает терминал и функционал языка MQL5. И ничего программировать не надо. Т.е. предложено простое решение сложной задачи.

Разве темой статьи является какое-то интерактивное управление? Тема статьи - 3D моделирование. Где в ней та самая волшебная функция в которую отдаешь пространственные координаты, а на выходе получаешь экранные координаты?

В статье не просто тема не раскрыта, а даже кажется, что автор вообще не представляет в чем суть данной темы. 

 
fxsaber:

Не простая работа получилась, но изначально подход, видится, выбран не правильный - через трендовые линии-объекты.

Почему не через Bitmap-объект с кастомным ресурсом - канвас? Скорее всего, мат. либа именно так и будет реализована в 3D. 

И не то и не другое должно быть, это варианты отображения. Изначально все в массивах должно быть.
 
Dmitry Fedoseev:
И не то и не другое должно быть, это варианты отображения. Изначально все в массивах должно быть.
Так 3D-массив - это исходные данные. Речь, вроде, о визуализации идет.
 
fxsaber:
Так 3D-массив - это исходные данные. Речь, вроде, о визуализации идет.
Если бы... то хоть без визуализации вообще.
 
Dmitry Fedoseev:
Если бы... то хоть без визуализации вообще.
Не понял совсем.
 
Мне понравилась Ваша работа. Но все таки думаю, 3D моделирование действительно должно быть на канвасе. Попробуйте развивать Вашу технологию в этом направлении. Удачи.
 
Dmitry Fedoseev:

Разве темой статьи является какое-то интерактивное управление? Тема статьи - 3D моделирование. Где в ней та самая волшебная функция в которую отдаешь пространственные координаты, а на выходе получаешь экранные координаты?

В статье не просто тема не раскрыта, а даже кажется, что автор вообще не представляет в чем суть данной темы. 

3D - без возможности изменения точки взгляда - это 2D рисунок. Поэтому, интерактивность - самое главное качество в моделировании трёхмерных объектов. Какой смысл в статической картинке?

Волшебная функция есть и пример использования приведён.