Ошибки при работе с ObjectCreate()

 

Ошибки при работе с ObjectCreate()

Хотел вывести точки на экран при работе советника, точки должны совпадать с глобальным минимумом и максимумом за определенный период. В примере выбрано _Nbar=2, т.е. судя по описанию функции iHighest в этом случае мин и максимум должен искаться среди 1, 2 и 3 бара. (если я правильно понял Help).

Но при выводе на график объекта (точки) его цена не совпадает ни с одной из величин мак, мин и рассчитанной величиной. Вот лог

GBPUSD,H1: par1=1.8727 par2=1.8709 H1=1.8727 H2=1.8726 H31.8717 L1=1.8717 L2=1.8709 L3=1.8701 Ask-Bid0.0003

Это видно и из рис.

Причем смещение всё время разное (спреду не соответствует)

Прикладываю эксперт и рисунок.

Вопрос. Где я ошибаюсь ? Если нет ошибки то как вывести правильно точку, что бы её значение совпадало с расчетным как численно, так и визуально (на графике находилась на том же уровне) ?

//+------------------------------------------------------------------+
//|                                                           00.mq4 |
//|                                                    Привалов С.В. |
//|                                             Skype -> privalov-sv |
//+------------------------------------------------------------------+
#property copyright "Привалов С.В."
#property link      "Skype -> privalov-sv"
 
int PeakCounter,LowCounter;
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  string ArrowName;
  int    _Nbar=2;
//----
double      par1=High[iHighest(NULL,0,MODE_HIGH,_Nbar,1)];
double      par2=Low [iLowest (NULL,0,MODE_LOW, _Nbar,1)];
 
Print (" par1=",par1," par2=",par2," H1=",High[1]," H2=",High[2]," H3",High[3]," L1=",Low[1]," L2=",Low[2]," L3=",Low[3], " Ask-Bid",Ask-Bid);
 
//+------------------------------------------------------------------+
   //ObjectDelete("par1"); ObjectDelete("par2"); ObjectDelete("par3");
   
   if(par1!=0)  
      {
      ArrowName="High "+PeakCounter;
      ObjectCreate(ArrowName,OBJ_ARROW,0,Time[0],par1);
      ObjectSet(ArrowName,OBJPROP_COLOR,Blue); 
      ObjectSet(ArrowName,OBJPROP_ARROWCODE,167); 
      PeakCounter++;
      }
   
   if(par2!=0)  
      {
      ArrowName="Low "+LowCounter;
      ObjectCreate(ArrowName,OBJ_ARROW,0,Time[0],par2);
      ObjectSet(ArrowName,OBJPROP_COLOR,Orange); 
      ObjectSet(ArrowName,OBJPROP_ARROWCODE,167);   
      LowCounter++;
      }
   
 
   WindowRedraw();      
//+------------------------------------------------------------------+
   Comment("Пик  = ",par1,"  Дно  = ",par2, "  Sped =",Ask-Bid);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Вы неправильно понимаете функцию и этот пример наглядно это демонстрирует. Что еще требуется?
 
Rosh:
Вы неправильно понимаете функцию и этот пример наглядно это демонстрирует. Что еще требуется?


Если не турдно поясните почему не совпадают расчетные значения со значениями отражаемыми на графике ? Если я неправильно понимаю покажите как правильно плиз. Зделайте что бы точка отражаемая на графике точно соответсвовала мин или максимуму (как расчетно так и визуально). Цифры не совпадают !!!

 
На графике как раз все совпадает с кодом. поэтому требуется только увидеть и понять.
 
Rosh:
Вы неправильно понимаете функцию и этот пример наглядно это демонстрирует. Что еще требуется?


По поводу неправильного понимания. Вот копия того что находиться в Неlpe

double val;
// расчет максимального значения цены на 20 последовательных барах
// с индекса 4 по индекс 23 включительно на текущем графике
val=High[iHighest(NULL,0,MODE_HIGH,20,4)];

Просто введите эту строчку и проверте. Цифорки не совпадают Rosh, Вы снова торопитесь с выводами. Я понимаю у Вас щас цейтнот. Можете не торопиться с ответом, просто желательно былобы что бы не забыли разобраться с этим. Я картинку (скрин) специально привел. Выполните этот эксперт и просто подведите курсор к точке и посмотрите что получиться, цифорки тоже не совпадают таких мак и мин вообще нет !!

Print(val, High[23]);

 

Стем что объект прямоугольник совпадает с этит я согласен, кстати и ниния тоже. А вот точка нет !!
 
Ваш код ищет минимум и максимум начиная с бара, имеющего индекс 1. И комментарии как раз это подтверждают. Или Вы своим глазам не верите? Читайте хелп и не просите помощи по пустякам.
 
Я наверное что то неправильно объяснаю. Выполните этот эксперт и подведите курсор к нарисованной точке. Ну или ктонибудь другой, что бы Rosh  не отвлекать. Ответте плиз на 1 вопрос цифра при этом появляющаяся совпадает с тем что выводиться функцией Comment ?
 
Если Вы читали справку, то почему не используете точные Коды стрелок ? Например,
Константа Значение Описание
1Восходящая стрелка с подсказкой направо (↱)
2Нисходящая стрелка с подсказкой направо (↳)
3Левый указывающий треугольник (◄)
4Символ Черточки (–)
SYMBOL_LEFTPRICE5Левая ценовая метка
SYMBOL_RIGHTPRICE6Правая ценовая метка
 

Спасибо за подсказку. Это я читал и вроде помню. Просто обратил внимание что точка отражаеться неправильно. Код брал предложенный Вами вот здесь 'Новая версия клиентского терминала MetaTrader 4 build 210' вы там использовали точку, я тоже просто её стал использовать. И обратил внимание, что плывет не получаеться ровная линия (использовал для своих целей), стал разбираться и наткнулся на этот эффект. Скорее всего это связано с маштабированием графика.

Хотя я так и не услышал, ответ у Всех эта ошибка есть или нет ?

Как всегда спасибо Rosh за Ваш труд и помощь

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