Не строит "Трендовую линию по углу"

 
Если написать такой код:
ObjectCreate(0,"name",OBJ_TRENDBYANGLE,0,iTime(NULL,0,10),iHigh(NULL,0,10),iTime(NULL,0,1),iHigh(NULL,0,1));
То строит вот так:



А если потом попытаться взять угол наклона:
ObjectCreate(0,"name",OBJ_TRENDBYANGLE,0,iTime(NULL,0,10),iHigh(NULL,0,10),iTime(NULL,0,1),iHigh(NULL,0,1));
Alert(ObjectGetDouble(0,"name",OBJPROP_ANGLE));
То строит вот так:




Почему он нормально не строит линию, если мы пытаемся взять угол наклона через функцию ObjectGetDouble() 

Это для МТ5. 

В МТ4 все работает нормально.
 
igrok333:
Если написать такой код:
То строит вот так:



А если потом попытаться взять угол наклона:
То строит вот так:




Почему он нормально не строит линию, если мы пытаемся взять угол наклона через функцию ObjectGetDouble() 

В МТ5. 

«Прежде чем что-то ненужное продать, нужно что-то ненужное купить».

В вашем случае прежде чем «взять» угол, его нужно назначить. Читайте документацию…

//--- строим трендовую линию по 2-ум точкам 
   if(!ObjectCreate(chart_ID,name,OBJ_TRENDBYANGLE,sub_window,time,price,time2,price2)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError()); 
      return(false); 
     } 
//--- изменяем угол наклона трендовой линии; в процессе изменения угла, координата второй 
//--- точки линии переопределится автоматически в соответствии с новым значением угла 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); 
 
Alexey Viktorov:

«Прежде чем что-то ненужное продать, нужно что-то ненужное купить».

В вашем случае прежде чем «взять» угол, его нужно назначить. Читайте документацию…

Так мне нужно построить линию по двум точкам,

а потом взять ее угол наклона.

 
Alexey Viktorov:

«Прежде чем что-то ненужное продать, нужно что-то ненужное купить».

В вашем случае прежде чем «взять» угол, его нужно назначить. Читайте документацию…

В МТ4 этот код работает:

ObjectCreate(0,"name",OBJ_TRENDBYANGLE,0,iTime(NULL,0,10),iHigh(NULL,0,10),iTime(NULL,0,1),iHigh(NULL,0,1));
Alert(ObjectGetDouble(0,"name",OBJPROP_ANGLE));

А в МТ5 отказывается работать.
 
Alexey Viktorov:

«Прежде чем что-то ненужное продать, нужно что-то ненужное купить».

В вашем случае прежде чем «взять» угол, его нужно назначить. Читайте документацию…

И еще в справке такое прочитал:

"Для установки наклона линии можно использовать как угол, так и координаты второй точки привязки."

https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_trendbyangle

 
igrok333:

И еще в справке такое прочитал:

"Для установки наклона линии можно использовать как угол, так и координаты второй точки привязки."

https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_trendbyangle

Тогда перед попыткой получить угол убедитесь в наличии трендовой. Если она только-что создана, то её свойства какое-то время недоступны. Попробуйте перед получением угла перерисовать график

void  ChartRedraw( 
   long  chart_id=0      // идентификатор графика 
   );
 
Alexey Viktorov:

Тогда перед попыткой получить угол убедитесь в наличии трендовой. Если она только-что создана, то её свойства какое-то время недоступны. Попробуйте перед получением угла перерисовать график

неа. все равно не работает в МТ5.

ObjectCreate(0,"name",OBJ_TRENDBYANGLE,0,iTime(NULL,0,10),iHigh(NULL,0,10),iTime(NULL,0,1),iHigh(NULL,0,1));

ChartRedraw( 0);

Alert(ObjectGetDouble(0,"name",OBJPROP_ANGLE));
 
igrok333:

неа. все равно не работает в МТ5.

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

Не строит "Трендовую линию по углу"

Alexey Viktorov, 2021.03.05 16:21

Тогда перед попыткой получить угол убедитесь в наличии трендовой. Если она только-что создана, то её свойства какое-то время недоступны. Попробуйте перед получением угла перерисовать график

void  ChartRedraw( 
   long  chart_id=0      // идентификатор графика 
   );

 
такой фокус(назначить цену и время, а пытаться узнать УГОЛ).. работать не будет.. потому что нету явного соответствия углам и ценам в масштабе. ну то есть видимый угол по ценам - зависит от масштаба графика, а есть угол линии он не зависит ни от чего вообще, ни от масштаба не от цен.. А есть угол математический, который можно рассчитать используя цены(но линия в этом случае не причем).. это 3 разные сущности.. Нужен угол - рассчитывайте сами. формулы все есть 
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Свойства объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:


все равно не хочет.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  
  
  
   ObjectCreate(0,"name",OBJ_TRENDBYANGLE,0,iTime(NULL,0,10),iHigh(NULL,0,10),iTime(NULL,0,1),iHigh(NULL,0,1));
   
   ChartRedraw( 0);
   
   if (ObjectFind(0,"name")>=0)
      Alert(ObjectGetDouble(0,"name",OBJPROP_ANGLE));
   
   

   return(rates_total);
  }


Строит эту линию вверх и пишет угол 90 градусов.





 
Alexey Viktorov:

и это из-за попытки узнать угол линии.

Если убрать требование угла:
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
  
  
  
   ObjectCreate(0,"name",OBJ_TRENDBYANGLE,0,iTime(NULL,0,10),iHigh(NULL,0,10),iTime(NULL,0,1),iHigh(NULL,0,1));
   
   ChartRedraw( 0);
   
   if (ObjectFind(0,"name")>=0)
      Alert(1);
   
   

   return(rates_total);
  }

то всё нормально строит и выводит Алерт 1.





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