Графика. Canvas. Вопрос по линиям.

 
Всем доброго времени суток, задавал уже этот вопрос, но так и не пришел ни к какому решению. Хочу используя стандартную библиотеку Canvas рисовать линии от цены открытия ордера до текущей цены, но не выходит. Подскажите пожалуйста в чем ошибка)
void OnTick()
  {
Lines();
  }

void Lines()
{

ENUM_LINE_STYLE lineStyle=STYLE_DOT;
 
  for(int j=PositionsTotal()-1; j>=0; j--)
     {
      if(m_position.SelectByIndex(j))
        {
         ulong tick = m_position.Ticket();
         if(m_position.PositionType() == POSITION_TYPE_BUY)
            {
            canvas.LineStyleSet(lineStyle);
            canvas.Line(m_position.Time(),m_position.PriceOpen(),iTime(_Symbol,PERIOD_CURRENT,0),Ask(_Symbol),0x0000FF);
            }
         if(m_position.PositionType() == POSITION_TYPE_SELL)
            {
            canvas.LineStyleSet(lineStyle);
            canvas.Line(m_position.Time(),m_position.PriceOpen(),iTime(_Symbol,PERIOD_CURRENT,0),Ask(_Symbol),0xFF0000);
            }
        }
     }
 canvas.Update(true); 
}
 
Anton Novokhatskii:
Всем доброго времени суток, задавал уже этот вопрос, но так и не пришел ни к какому решению. Хочу используя стандартную библиотеку Canvas рисовать линии от цены открытия ордера до текущей цены, но не выходит. Подскажите пожалуйста в чем ошибка)

Еще пяток веток надо открыть, чтоб уж наверняка :))
ну дал же ответ. Причем с запасом, с ответами на следующие вопросы, которые возникнут.

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

#include <Canvas\iCanvas_CB.mqh> //https://www.mql5.com/ru/code/22164
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CPositionInfo  m_position; 
CSymbolInfo    m_symbol;

//+------------------------------------------------------------------+
int OnInit()
{
   m_symbol.Name(_Symbol);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
void OnTick()
  {
   m_symbol.RefreshRates();
   Lines();
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if (id == CHARTEVENT_CHART_CHANGE) Lines();
}
//+------------------------------------------------------------------+
void Lines()
{
ENUM_LINE_STYLE lineStyle=STYLE_DOT;
 Canvas.Erase(0x00FFFFFF);
  for(int j=PositionsTotal()-1; j>=0; j--)
     {
      if(m_position.SelectByIndex(j))
        {
         ulong tick = m_position.Ticket();
         if(m_position.PositionType() == POSITION_TYPE_BUY)
            {
               Canvas.LineThick((int)_X(m_position.Time()),(int)_Y(m_position.PriceOpen()),(int)_X(0.0),(int)_Y(m_symbol.Ask()),0xFF0000FF,1,lineStyle,LINE_END_ROUND);
            }
         if(m_position.PositionType() == POSITION_TYPE_SELL)
            {
               Canvas.LineThick((int)_X(m_position.Time()),(int)_Y(m_position.PriceOpen()),(int)_X(0.0),(int)_Y(m_symbol.Ask()),0xFFFF0000,1,lineStyle,LINE_END_ROUND);
            }
        }
     }
 Canvas.Update(); 
}
iCanvas - это просто наследник CCanvas.
 
Спасибо большое за ответ) Просто форумом тоже особо раньше не пользовался) увидел что вопросы тут по темам делятся, решил вопрос создать в теме советников)) Вдруг и тут идеи еще какие то будут) Спасибо за понимание)
 
Anton Novokhatskii:
Всем доброго времени суток, задавал уже этот вопрос, но так и не пришел ни к какому решению. Хочу используя стандартную библиотеку Canvas рисовать линии от цены открытия ордера до текущей цены, но не выходит. Подскажите пожалуйста в чем ошибка)
void Line(int x1,int y1,int x2,int y2,const uint clr); // Рисует произвольную линию согласно заданным координатам и цвету

Параметры:

  • x1 - координата первой точки по оси X
  • y1 - координата первой точки по оси 
  • x2 - координата второй точки по оси 
  • y2 - координата второй точки по оси Y
  • clr - цвет линии

Если указывать конкретно на ошибку, то посмотрите, что нужно подавать в функцию рисования линии и посмотрите, что подаете вы.

Для изучения Канвас, есть статья, рекомендую ознакомиться https://www.mql5.com/ru/articles/10361

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