Графическое перекрестие трендовых линий, функция ObjectGetValueByTime что с ней не так? - страница 3

 
Nikolai Semko:

Время в этом промежутке будет одинаковым, но количество минутных баров будет разным. 
Ведь количество минут между соседними недельными барами будет 10080. А на минутном графике реальных минутных баров между соседними понедельниками 00:00 будет гораздо меньше, и так по всем ТФ.

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

По этому я и спросил возможно ли искажения времени из за функции ObjectGetValueByTime  - она же просто передает цену определенную координатом времениКак она влияет на все это, об этом речь.

1

 

Где то ошибка в коде при передаче данных от ObjectGetValueByTime  в функцию перекрестия, скорее это из за этого для  ObjectGetValueByTime .

i = iBarShift(NULL,PERIOD_W1,timed1); // бар по времени дневной свечи на недельном периоде

i - применяется при извлечении цены функцией ObjectGetValueByTime  

Rw2_1  = ObjectGetValueByTime(0,"Rw2["+ i +"]"+z,timed1,0); 

 

Все работает, что то с циклами не правильно, перекрестия находит функция, у меня задействован двойной цикл по этому не корректно все выходит, думаю ближе к вечеру скину готовый индюк. Зря грешил на функцию она работает так как прописано в документации  ObjectGetValueByTime ошибка с моей стороны.

 
Martingeil:

Помощи как таковой я не увидел, если вы программист то сразу бы отличили код мт4 от мт5. 

Зачем смотреть код если я знаю вашу проблему только по вопросу) Да и с телефона код неудобно читать. Ну не помог так не помог.
 
Martingeil:

Помощи как таковой я не увидел, если вы программист то сразу бы отличили код мт4 от мт5. 

Зачем смотреть код если я знаю вашу проблему только по вопросу) Да и с телефона код неудобно читать. Ну не помог так не помог.
 
Martingeil:

Все работает, что то с циклами не правильно, перекрестия находит функция, у меня задействован двойной цикл по этому не корректно все выходит, думаю ближе к вечеру скину готовый индюк. Зря грешил на функцию она работает так как прописано в документации  ObjectGetValueByTime ошибка с моей стороны.

запустите на разных периодах следующий скрипт:

void OnStart() {
   datetime time1 = D'2019.04.01 15:37';
   datetime time2 = D'2020.01.11 04:10';
   ObjectCreate(0,"TrendLine01",OBJ_TREND,0,time1,1.20,time2,1.05);
   double pr=ObjectGetValueByTime(0,"TrendLine01",D'2020.01.02 20:02');
   Print (pr);
}

и получите следующий результат:


 
Nikolai Semko:

запустите на разных периодах следующий скрипт:

и получите следующий результат:


Да, расхождение большое, при таком ранже = 1.20 -1.05 = 0.15000 , но при маленьких не так существенно заметно, если ранже не превышает 500 пунктов. На визуальный вариант не влияет. Спасибо вам что уделили время, ваша библиотека заинтересовала меня, думаю сделать в ней кое что. 

Вопрос по библиотеке вашей, будет возможность снимать данные с индикатора так же через буфер? 

 
Martingeil:

Да, расхождение большое, при таком ранже = 1.20 -1.05 = 0.15000 , но при маленьких не так существенно заметно, если ранже не превышает 500 пунктов. На визуальный вариант не влияет. Спасибо вам что уделили время, ваша библиотека заинтересовала меня, думаю сделать в ней кое что. 

Вопрос по библиотеке вашей, будет возможность снимать данные с индикатора так же через буфер? 

Нет, с индикатора данные снимать можно будет только через элеватор. 

 
Nikolai Semko:

запустите на разных периодах следующий скрипт:

и получите следующий результат:


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

Читаем документацию (ей можно верить?)

datetime  iTime(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

Возвращаемое значение

Значение времени открытия бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки


Проверьте скриптом, никогда не обращал внимание но судя по коду ошибка идет аж 2010 года может и раньше. Но то что она присутствует аж оттуда даю 100%.

1

НЕДЕЛЯ НАЧАЛАСЬ 13 числа зачем целые сутки впихнули туда? Отсюда и расчет 6 дней 518 400 секунд - в рабочей неделе всего 5 дней.

void OnStart() {
   datetime time1 = iTime(NULL,PERIOD_W1,0);  
   datetime time2 = iTime(NULL,PERIOD_D1,0);  
   Alert(" time1 = ",time1," time2 = ",time2);
  
}

По идее здесь должна быть вот эта цифра если следовать документации + 7200*60+Period();

timew2 = iTime(NULL,PERIOD_W1,0) + 8640*60+Period();   
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Константы, перечисления и структуры / Коды ошибок и предупреждений - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

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

timew1 = iTime(NULL,PERIOD_W1,shift) + 24*3600+Period();  timew2 = timew1 + 7200*60+Period();