Как найти угол наклона Линии в MQL5?

 

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

Код:

void OnStart()
  {
   int zz_handle = iCustom(Symbol(), PERIOD_CURRENT, "Examples\\ZigZag");
   if(zz_handle == INVALID_HANDLE)
     {
      Print("Cannot Load ZigZag: ", GetLastError());
      return;
     }

   double zz_buffer[];
   ArraySetAsSeries(zz_buffer, true);

   CopyBuffer(zz_handle, 0, 0, 12 + 500, zz_buffer);

   double Latest = 0,
          Previous_To_Latest = 0;

   int latest_index, previous_to_latest_index;

   for(int loop= 0; loop < 512; loop++)
     {
      if(zz_buffer[loop] != 0)
        {
         Latest = zz_buffer[loop];
         latest_index = loop;
         for(int inner_loop = loop + 1; inner_loop < 512; inner_loop++)
           {
            if(zz_buffer[inner_loop] != 0)
              {
               Previous_To_Latest = zz_buffer[inner_loop];
               previous_to_latest_index = inner_loop;
               break;
              }
           }
         break;
        }
     }
   int X1, Y1, X2, Y2;

   ChartTimePriceToXY(ChartID(), 0, iTime(Symbol(), 0, latest_index), Latest, X1, Y1);
   ChartTimePriceToXY(ChartID(), 0, iTime(Symbol(), 0, previous_to_latest_index), Previous_To_Latest, X2, Y2);

   double angle_slope = MathArctan(Previous_To_Latest - Latest / double(previous_to_latest_index - latest_index)) * 180 / M_PI;
   double angle_slope_time = MathArctan(Previous_To_Latest - Latest / (iTime(Symbol(), 0, previous_to_latest_index) - iTime(Symbol(), 0, latest_index))) * 180 / M_PI;
double angle_with_coord = MathArctan(Y2 - Y1 / X2 - X1) * 180 / M_PI;
   
   if(previous_to_latest_index > latest_index)
     {
      angle_slope = 180 - angle_slope;
      angle_slope_time = 180 - angle_slope_time;
   angle_with_coord = 180 - angle_with_coord;
     }
   Print("Angle = ", angle_slope, " Angle with time= ", angle_slope_time, " Angle with Coord= ", angle_with_coord);
  }

Скажите, пожалуйста, почему у меня такая разница. Как я могу избежать такой разницы в результате? Если разницы избежать невозможно, то какой метод мне следует использовать?

Пожалуйста, помогите мне с этим. А функция ChartTimePriceToXY () изменяет вывод, если я разверну экран до максимума. Так что это звучит немного ненадежно для расчета, но все же нужно знать лучший метод.


 
В МТ4 и МТ5 измерять углы на графике с автоматическим масштабом бессмысленно. Разве что использовать фиксированный масштаб.
 
jaffer wilson:

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

Код:

Скажите, пожалуйста, почему у меня такая разница. Как я могу избежать такой разницы в результате? Если разницы избежать невозможно, то какой метод мне следует использовать?

Пожалуйста, помогите мне с этим. А функция ChartTimePriceToXY () изменяет вывод, если я разверну экран до максимума. Так что это звучит немного ненадежно для расчета, но все же нужно знать лучший метод.

Вариантов я вижу два.

  1. Считать не угол, а тангенс угла используя отношение количества пунктов к количеству баров.
  2. Отказаться от угла и обратить внимание на скорость изменения цены. Сколько пунктов прошла цена за единицу времени.
 
Ihor Herasko :
В МТ4 и МТ5 измерять углы на графике с автоматическим масштабом бессмысленно. Разве что использовать фиксированный масштаб.

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

 
Alexey Viktorov :

Вариантов я вижу два.

  1. Считать не угол, а тангенс угла используя отношение количества пунктов к количеству баров.
  2. Отказаться от угла и обратить внимание на скорость изменения цены. Сколько пунктов прошла цена за единицу времени.

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

Если ничего нет, не могли бы вы сформулировать свое предложение, пожалуйста?

 
В этой теме есть методы: https://www.mql5.com/ru/forum/163710

Но, как верно говорит Ihor Herasko - данные будут зависимы от масштаба графика. Поэтому первоначально нужно подготовить график - зафиксировать шкалу...
Расчёт угла наклона трендовой линии.
Расчёт угла наклона трендовой линии.
  • 2016.12.17
  • www.mql5.com
Добрый день. Нужно расcчитать угол наклона трендовой линии на графике в градусах программно (MQL5...
 
jaffer wilson:

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

Если ничего нет, не могли бы вы сформулировать свое предложение, пожалуйста?

Если вы забыли школьную программу по математике, то почитайте что такое тангенс угла. Это просто отношение противолежащего катета к прилежащему. Соответственно, зная тангенс легко определить угол. В мои школьные годы это делалось по таблице (На снимке только часть этой таблицы)


а сейчас наверное есть варианты попроще. По сути вам совершенно не надо знать угол. Вам больше нужен тангенс.

 
Alexey Viktorov:

Если вы забыли школьную программу по математике, то почитайте что такое тангенс угла. Это просто отношение противолежащего катета к прилежащему. Соответственно, зная тангенс легко определить угол. В мои школьные годы это делалось по таблице (На снимке только часть этой таблицы)


а сейчас наверное есть варианты попроще. По сути вам совершенно не надо знать угол. Вам больше нужен тангенс.

Эту таблицу надо распечатать и почтой выслать :))
 
jaffer wilson:

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

Мне, для моих целей, помог этот индикатор. Взял нужное из исходного кода.

https://www.mql5.com/ru/code/20871

Trend_Angle
Trend_Angle
  • www.mql5.com
Индикатор рассчитывает угол наклона последнего сегмента скользящей средней и отображает его на графике вместе с линией МА и линией, рисуемой от последнего сегмента скользящей средней.
 
jaffer wilson:

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

Если ничего нет, не могли бы вы сформулировать свое предложение, пожалуйста?

Скорость в случае количество пунктов за время это и есть угол в градианах. Это как уклон 5 метров на 100 метров пути. И в нашем случае это более правильный путь. Абсолютный угол в градусах этой системе координат малоценен. 

 
Yevhenii Levchenko:
Поэтому первоначально нужно подготовить график - зафиксировать шкалу...

Масштаб чарта можно не фиксировать, просто делать расчеты согласно фиксированному масштабу.

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

1