Линия не луч. Как?

 

Пишу советника на стандартном индикаторе MACD. Хочу вывести дивергенцию на график индикатора(нарисовать линию в 1 окне).

линию рисует, меняю толщину, цвет, а сделать ее отрезком не могу. 

 

void DrawIndicatorTrendLine(datetime x1,datetime x2,double y1,
                            double y2,color lineColor,int style)
  {
   int indicatorWindow=WindowFind("MACD(12,26,9)");
   if(indicatorWindow<0)
      return;
   string label="MACD_DivergenceLine "+DoubleToStr(x1,0);
  ObjectDelete(label);
   ObjectCreate(label,OBJ_TREND,indicatorWindow,x1,y1,x2,y2);
 ObjectSetInteger(indicatorWindow,label,OBJPROP_COLOR,lineColor);
//ObjectSetInteger(indicatorWindow,label,OBJPROP_RAY_RIGHT, 0 );   // Линия - не луч
  ObjectSetInteger(indicatorWindow,label,OBJPROP_RAY,false);
   ObjectSetInteger(indicatorWindow,label,OBJPROP_STYLE,style);
  }

 Помогите сделать линию отрезком а не лучем. Спасибо.

 

а зачем закомментировал ?

ObjectSetInteger(indicatorWindow,label,OBJPROP_RAY_RIGHT, false );
ObjectSetInteger(indicatorWindow,label,OBJPROP_RAY_LEFT, false );
 

OBJPROP_RAY

Вертикальная линия продолжается на все окна графика

у тебя не вертикальная линия 

 
Yurij Izyumov:

а зачем закомментировал ?

Пробовал. Не помогло. Еще раз попробовал (вставил эти 2 строки что выше). все равно луч.

 OBJPROP_RAY убрал. тоже самое.

 
ForTorg ZEVs:

Пишу советника на стандартном индикаторе MACD. Хочу вывести дивергенцию на график индикатора(нарисовать линию в 1 окне).

линию рисует, меняю толщину, цвет, а сделать ее отрезком не могу. 

 

 Помогите сделать линию отрезком а не лучем. Спасибо.

А у вас не перепутаны координаты? У вас луч влево направлен.
 

"indicatorWindow" - неправильное название. Нужно делать название "chart_ID" - тогда сразу увидите, что должен стоять идентификатор графика. Если это текущий график - значит это будет "0".

Также ВСЕГДА НУЖНО проверять коды возврата. ObjectSetInteger ведь может вернуть true, а может вернуть и false. В этом случае нужно проверять коды возврата.

Был такой график:

старт

трендовая линия имеет название "label".

 

Применяем такой скрипт:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2016, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2016, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
   if(!ObjectSetInteger(0,"label",OBJPROP_RAY_RIGHT,false))
      Print(GetLastError());
   ResetLastError();
   if(!ObjectSetInteger(0,"label",OBJPROP_RAY_LEFT,false))
      Print(GetLastError());
  }
//+------------------------------------------------------------------+

и фокус-покус: у нас получился отрезок:

конец 

Файлы:
Test.mq5  3 kb
 
Artyom Trishkin:
А у вас не перепутаны координаты? У вас луч влево направлен.

поменял координаты специально чтоб луч не мешал.

 ObjectCreate(label,OBJ_TREND,indicatorWindow,x2,y2,x1,y1);

 результат тот же. тока луч в право.

 

 
Karputov Vladimir:
"indicatorWindow" - неправильное название. Нужно делать название "chart_ID" - тогда сразу увидите, что должен стоять идентификатор графика. Если это текущий график - значит это будет "0".

Не знаю как имя переменной может на это влиять. Но не помогает. принтует 1.

2016.07.15 18:33:44.672 2015.08.14 13:40  #MACDiverZ_1bf EURUSD,H4: DrawIndicatorTrendLine: chart_ID= : 1   Âðåìÿ =   2015.08.14 12:00

 ---====  ЗАБЫЛ СКАЗАТЬ ЧТО Этот код MQL4  ====---


 
ForTorg ZEVs:

Не знаю как имя переменной может на это влиять. Но не помогает. принтует 1.

2016.07.15 18:33:44.672 2015.08.14 13:40  #MACDiverZ_1bf EURUSD,H4: DrawIndicatorTrendLine: chart_ID= : 1   Âðåìÿ =   2015.08.14 12:00

Имя переменной призвано восстановить сознание и направить его на путь истинный (то есть на путь изучения MQL5) :). 

Пример привёл. Вы уже упорно пихаете в свою переменную (хоть и назвали её теперь по новому) значение "1". В справке написано черным по белому:

bool  ObjectSetInteger( 
   long                             chart_id,      // идентификатор графика 
   string                           name,          // имя 
   ENUM_OBJECT_PROPERTY_INTEGER     prop_id,       // свойство 
   long                             prop_value     // значение 

   );

Параметры

chart_id

[in]  Идентификатор графика. 0 означает текущий график.

 
Karputov Vladimir:

Имя переменной призвано восстановить сознание и направить его на путь истинный (то есть на путь изучения MQL5) :). 

Пример привёл. Вы уже упорно пихаете в свою переменную (хоть и назвали её теперь по новому) значение "1". В справке написано черным по белому:

bool  ObjectSetInteger( 
   long                             chart_id,      // идентификатор графика 
   string                           name,          // имя 
   ENUM_OBJECT_PROPERTY_INTEGER     prop_id,       // свойство 
   long                             prop_value     // значение 

   );

Параметры

chart_id

[in]  Идентификатор графика. 0 означает текущий график.

Я в коде ищу где у меня индикатор , там и рисую. потому и 1.
 
ForTorg ZEVs:
Я в коде ищу где у меня индикатор , там и рисую. потому и 1.
Ищите неправильно - это факт - так как не нужно искать подокно, нужен идентификатор графика. Проверяете ошибку возврата?