Временные зоны Фибоначчи.

 

Буду признателен за совет, если кто сталкивался с этим чудом.

Советник построил графический объект

Временные зоны Фибоначчи.

Как вытянуть время каждого построенного уровня, всего их 15.

функция

ObjectGet("fibo_time",OBJPROP_FIRSTLEVEL+10);

возвращает число Фибоначчи на этом уровне.


Если строить эти зоны вертикальными линиями, отдельно каждый уровень

всплывает новая проблема, из пропуска времени на выходных или отсутствия бара

или нескольких, отображение некорректное, и расчет времени не верный


 
Юра, ответил в скайп.
 
ок.
 


Nen делал QTA 3, 4 - Quik Time Analizir

Там время от хай(лоу) - модификации - 1.0-1.618-2.618 и т д, думаю он бы помог

Файлы:
 
спс.
 
satop:

Если строить эти зоны вертикальными линиями, отдельно каждый уровень

всплывает новая проблема, из пропуска времени на выходных или отсутствия бара

или нескольких, отображение некорректное, и расчет времени не верный


скорее всего ошибка (две ошибки) в расчетах..
 

Юра, ты все делаешь правильно. Ты считаешь секунды и строишь зоны. и это не твоя ошибка. это глюк терминала, а конкретно глюки отрисовки графической линии. На скрине ниже - через мкул4, была команда на отрисовку горизонтальной жирной голубой линии. с 00-часов до хх часов. Свойства линии тоже указывают что она была нарисована с 00 часов. Хотя физически мы видим, что она выведена на экран на бар раньше.


 
keekkenen:
скорее всего ошибка (две ошибки) в расчетах..

укажите пож. какие ?

//+------------------------------------------------------------------+
//|                                                    Zoltan_V0.mq4 |
//|                                                     Yuriy Tokman |
//|                                         http://www.mql-design.ru |
//+------------------------------------------------------------------+
#property copyright "Yuriy Tokman"
#property link      "http://www.mql-design.ru"

extern color color_RAY = Gold;
extern string time_start = "2010.05.24 01:30";
extern string time_finish = "2010.05.24 01:35";

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   GetDellName();
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   GetStartLine("fibo1","luch1",color_RAY);//строим и управляем вертикальными линиями                                      
//----
   return(0);
  }
//функция строит вертикальную линию
 void GetVLINE(string name_label,datetime t1,color c = Red)
  {
   if (ObjectFind(name_label)<0)// ObjectDelete(name_label);
   ObjectCreate(name_label,OBJ_VLINE,0,t1,0,0,0);
   ObjectSet(name_label,OBJPROP_COLOR,c);         
  }
//-----+функция удаляет все объекты с заданным именем
 void GetDellName (string name_n = "ytg_")
  {
   string vName;
   for(int i=ObjectsTotal()-1; i>=0;i--)
    {
     vName = ObjectName(i);
     if (StringFind(vName,name_n) !=-1) ObjectDelete(vName);
    }  
  }
//----+функция строит все линии
 void GetStartLine(string n, string l, color c )
  {
   GetDellName (l);
                
   GetVLINE(n+"ytg_zoltan1",StrToTime(time_start),c);
   GetVLINE(n+"ytg_zoltan2",StrToTime(time_finish),c);
   datetime time_s =0, time_f =0, time_c = 0;
   if(ObjectFind(n+"ytg_zoltan1")!=-1) time_s = ObjectGet(n+"ytg_zoltan1",OBJPROP_TIME1);
   if(ObjectFind(n+"ytg_zoltan2")!=-1) time_f = ObjectGet(n+"ytg_zoltan2",OBJPROP_TIME1);
     
   datetime delta_time = time_f - time_s;
   Comment(TimeToStr(time_s),"  ",TimeToStr(time_f),"  ",time_f," - ",time_s,"=",delta_time);
   time_c = time_f+delta_time;
   GetVLINE(l+"ytg_zoltan3",time_c,c);
   time_c = time_c+delta_time;   
   GetVLINE(l+"ytg_zoltan4",time_c,c);
   time_c = time_c+delta_time*2;            
   GetVLINE(l+"ytg_zoltan5",time_c,c);
   time_c = time_c+delta_time*3;      
   GetVLINE(l+"ytg_zoltan6",time_c,c);
   time_c = time_c+delta_time*5;   
   GetVLINE(l+"ytg_zoltan7",time_c,c); 
   time_c = time_c+delta_time*8;   
   GetVLINE(l+"ytg_zoltan8",time_c,c);    
   time_c = time_c+delta_time*13;   
   GetVLINE(l+"ytg_zoltan9",time_c,c);
   time_c = time_c+delta_time*21;   
   GetVLINE(l+"ytg_zoltan10",time_c,c);   
   time_c = time_c+delta_time*34;   
   GetVLINE(l+"ytg_zoltan11",time_c,c);   
   time_c = time_c+delta_time*55;   
   GetVLINE(l+"ytg_zoltan12",time_c,c);           
  }
 

Простой пример:

Дыра в истории составляет примерно два года


 

Строю графический объект

OBJ_FIBOTIMES 11 Временные зоны Фибоначчи. Использует 2 координаты. Для установки количества уровней (свойство OBJPROP_FIBOLEVELS) и значения уровней (свойство OBJPROP_FIRSTLEVEL+n) используется функция ObjectSet()


extern color color_RAY = Gold;
extern string time_start = "2008.10.13 11:26";
extern string time_finish = "2008.10.13 11:27";


   string name_label = "ytg_timefibo";
   if (ObjectFind(name_label)<0)// ObjectDelete(name_label);
   int bars = iBarShift(Symbol(),1,StrToTime(time_start));
   double price = iClose(Symbol(),1,bars);
   ObjectCreate(name_label,OBJ_FIBOTIMES,0,StrToTime(time_start),price,StrToTime(time_finish),price);
   ObjectSet(name_label,OBJPROP_FIBOLEVELS,16);
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+1,1);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+2,2);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+3,3);
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+4,5);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+5,8);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+6,13);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+7,21);
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+8,34);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+9,55);//   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+10,89);
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+11,144);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+12,233);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+13,377);   
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+14,610);
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+15,987);
   ObjectSet(name_label,OBJPROP_FIRSTLEVEL+16,1597);
      
   int time_s = 0;
   if(ObjectFind(name_label)!=-1) 
   time_s = ObjectGet(name_label,OBJPROP_FIRSTLEVEL+10);
   Comment(time_s);



Между основными линиями время составляет одну минуту. Следующие уровни времени строятся через два года.

Хотя если время между основными линиями умножать на числа фибоначчи, то этих линий не должно быть, они все построятся в дыре.

 

Строю просто вертикальными линиями с расчетом времени: