Канал Фибоначчи и линии тренда

 

Привет всем! Столкнулся я с такой проблемой: строю линии тренда по границам канала Фибоначчи (для дальнейшего вычисления уровней), для этого использую дату/время и цены точек привязки канала, но получается вот что:

Как вы видите трендовые линии и границы канала расходятся чем дальше тем больше... Собственно вопрос: в чем причина расхождений?

вот код (написаный навскидку так что не придирайтесь))):

   for(int i=0;i<ObjectsTotal();i++)
   {
      string name=ObjectName(i);
      if(name=="buy")
      {
         double price=ObjectGetDouble(0,name,OBJPROP_PRICE);
         double price2=ObjectGetDouble(0,name,OBJPROP_PRICE2);
         double price3=ObjectGetDouble(0,name,OBJPROP_PRICE3);
         double priceload=price-price2;
         datetime time=(datetime)ObjectGetInteger(0,name,OBJPROP_TIME);
         datetime time2=(datetime)ObjectGetInteger(0,name,OBJPROP_TIME2);
         datetime time3=(datetime)ObjectGetInteger(0,name,OBJPROP_TIME3);
         ObjectCreate(0,"name1",OBJ_TREND,0,time,price,time2,price2);
         int bar=ObjectGetShiftByValue("name1",price);
         int bar2=ObjectGetShiftByValue("name1",price2);
         int shift=bar-bar2;
         int bar3=iBarShift(Symbol(),PERIOD_CURRENT,time3);
         int bar4=bar3-shift;
         ObjectCreate(0,"name2",OBJ_TREND,0,time3,price3,Time[bar4],price3-priceload);
         double pricecurr1=ObjectGetValueByShift("name1",0);
         double pricecurr2=ObjectGetValueByShift("name2",0);        
      }
   }
 
Maksim Neimerik:

Привет всем! Столкнулся я с такой проблемой: строю линии тренда по границам канала Фибоначчи (для дальнейшего вычисления уровней), для этого использую дату/время и цены точек привязки канала, но получается вот что:

Как вы видите трендовые линии и границы канала расходятся чем дальше тем больше... Собственно вопрос: в чем причина расхождений?

вот код (написаный навскидку так что не придирайтесь))):

В функциях  ObjectGetDouble(......); и   ObjectGetInteger(.......);

нет таких идентификаторов свойств объекта как   OBJPROP_PRICE2, OBJPROP_PRICE3

и   OBJPROP_TIME2,  OBJPROP_TIME3. 

 
Alekseu Fedotov:

В функциях  ObjectGetDouble(......); и   ObjectGetInteger(.......);

нет таких идентификаторов свойств объекта как   OBJPROP_PRICE2, OBJPROP_PRICE3

и   OBJPROP_TIME2,  OBJPROP_TIME3. 

ну как нет? Цены и время всех точек привязки правильно ведь ищет...

 
Maksim Neimerik:

ну как нет? Цены и время всех точек привязки правильно ведь ищет...

Ошибка думаю здесь. Это время в будущем, bar4 индекс -отрицательный, т.е.  не определено .  

Time[bar4]
 
Aleksey Mavrin:

Ошибка думаю здесь. Это время в будущем, bar4 индекс -отрицательный, т.е.  не определено .  

Да, я это тоже заметил и уже исправил (это только при определенных условиях бар4 может быть отрицательным), но результат тот же... 
Там, к стати, если бар отрицательный получался то критическая ошибка вылетала и ничего не рисовалось.
 
Maksim Neimerik:
Да, я это тоже заметил и уже исправил (это только при определенных условиях бар4 может быть отрицательным), но результат тот же... 
Там, к стати, если бар отрицательный получался то критическая ошибка вылетала и ничего не рисовалось.

Ну тогда прогоните в отладчике распринтуйте, проверьте на калькуляторе.

Есть ещё два нюанса, которые надо учитывать (тут вроде с ними проблем нет, просто чтобы имели ввиду):

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

А вот что реально может быть проблемой, так это  ObjectGetShiftByValue и  ObjectGetValueByShift(), я сталкивался с неточностями, причину найти и устранить не удалось, и я отказался от них.

Теперь использую только сами точки привязки и iBarShift, т.е. сам вычисляю сдвиги и времени и цены по линейному уравнению.  Результат всегда чёткий, тютелька в тютельку. Попробуйте тоже.

*В вашем коде бар и бар2 то хотя бы можно  вычислить  сразу  iBarShift, время же их есть

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

Может кто знает как по-другому найти значения уровней канала Фибоначчи?

этот класс может как-то помочь: CChartObjectFiboChannel?

у кого есть опыт работы с ним?

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
При создании графического объекта функцией ObjectCreate() необходимо указать тип создаваемого объекта, который может принимать одно из значений перечисления ENUM_OBJECT. Дальнейшие уточнения свойств созданного объекта возможно с помощью функций по работе с графическими объектами.
 

нужно считать смещение пунктов на бар, и рисовать линии по этому сдвигу.

пс. хотя, скорее всего лишний бар в расчетах, и всё едет.

 
Taras Slobodyanik:

нужно считать смещение пунктов на бар, и рисовать линии по этому сдвигу.

Я так и делал...

Taras Slobodyanik:

пс. хотя, скорее всего лишний бар в расчетах, и всё едет.

а вот это вполне может быть, надо проверить...

 

Проверил - не то... но вот что странно, попробовал в другом терминале и там все четко отрабатывается! Почему? Какая разница между терминалами?

Это как раз с той оперы когда отдаешь заказ а заказчик говорит: "у меня не работает"...

 
Maksim Neimerik:

Это как раз с той оперы когда отдаешь заказ а заказчик говорит: "у меня не работает"...

ну, тогда делать заявку во фриланс)