Тестируем CGraphic - вопросы и предложения - страница 13

 
pivomoe:

если открыть второй советник на другом графике, то на первый график начинает приходить информация одновременно и с первого советника и со второго.

Похоже, один и тот же графический ресурс используется несколькими советниками. Видимо, библиотека при создании имени ресурса исходит из имени BMP-объекта. А оно совпадает в обоих случаях.

Andrey Khatimlianskii:

В имя объекта не нужно добавить ChartId? Я не помню, добавляется ли оно внутри функции.

Должно помочь.

 
Andrey Khatimlianskii:

В имя объекта не нужно добавить ChartId? Я не помню, добавляется ли оно внутри функции.

Помогло.

Graphic.Create(ChartId,"CPrecieIdealnayFast "+Symbol(), 0, 10, 30, 500, 500);   

Всем спасибо.

Попахивает багoм. Ожидал, что график будет выводиться именно в указанный ChartId. Нафига его тогда вообще указывать ?

Документация по MQL5: Операции с графиками / ChartID
Документация по MQL5: Операции с графиками / ChartID
  • www.mql5.com
ChartID - Операции с графиками - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Есть массив цен Аск, как обновлять график с появлением новой цены?

Все примеры для скриптов, и ни одного примера с обновлением данных...


 
Vladimir Pastushak #:

Есть массив цен Аск, как обновлять график с появлением новой цены?

Все примеры для скриптов, и ни одного примера с обновлением данных...

Здесь.

 
fxsaber #:

Здесь.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2020, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#include <Graphics/Graphic.mqh>
CGraphic* Graphic = new CGraphic;
const string Name = "Graphic" + (string)(GetTickCount() + MathRand());
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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;
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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.CurveAdd(Price1, CURVE_LINES);
   Graphic.CurveAdd(Price2, CURVE_LINES);
   Graphic.CurvePlotAll();
   Graphic.Update();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   double Bids[], Asks[];
   
   GetPrices(Bids, Asks);
   GraphTicks(Bids, Asks);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int Reason)
  {
   Graphic.Destroy();
   delete Graphic;
   ChartRedraw();
  }
//+------------------------------------------------------------------+

Поправил...

Смущает постоянное удаление и создание, разве нет способа обновить?

   Graphic.Destroy();
   delete Graphic;
   Graphic = new CGraphic;
 
Vladimir Pastushak #:

Смущает постоянное удаление и создание, разве нет способа обновить?

Есть. Для этого нужно менять только ресурс, который привязан к объекту. Но не в курсе, как это делается через синтаксис данной библиотеки.

 

Можно ли установить прозрачность точек? Мне нужно видеть при наложении точек друг на друга изменение цвета.

CCurve *A=graphicL.CurveAdd(X_0,Y_0,ColorToARGB(Blue,255),CURVE_POINTS,"Data_0");

и

CCurve *A=graphicL.CurveAdd(X_0,Y_0,ColorToARGB(Blue,10),CURVE_POINTS,"Data_0");

визуальных отличий нет.

 
Aleksey Vyazmikin #:

Можно ли установить прозрачность точек? Мне нужно видеть при наложении точек друг на друга изменение цвета.

и

визуальных отличий нет.

По крайней мере с тем, что уже нарисовано на канвасе, не будет происходить смешивания. Это будет прозрачность всего канваса. 

Надо самому рассчитывать каждый пиксель. 

 
Dmitry Fedoseev #:

По крайней мере с тем, что уже нарисовано на канвасе, не будет происходить смешивания. Это будет прозрачность всего канваса. 

Надо самому рассчитывать каждый пиксель. 

Не очень в этом разбираюсь. Самому надо рассчитывать правильный градиент цвета от наложения двух и более цветов друг на друга?

 
Aleksey Vyazmikin #:

Не очень в этом разбираюсь. Самому надо рассчитывать правильный градиент цвета от наложения двух и более цветов друг на друга?

Да

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