Скачать MetaTrader 5

не рисует в понедельник

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Проблемы с кодом? Загляни в документацию!
hunta777
24
hunta777 2012.10.30 18:44 

void start()
{
  datetime dt2=TimeCurrent();
  datetime dt1=TimeCurrent()-24*60*60;
  datetime dt3=TimeCurrent()+24*60*60;

  for (int i=0; i<NumberOfDays; i++)
  {
    DrawObjects_Angle(dt1,dt2,dt3,"Angle2"+angleFIB2+i, ABegin, angleFIB2, AEnd);

    dt1-=24*60*60;
    dt2-=24*60*60;
    dt3-=24*60*60;
     
    while (TimeDayOfWeek(dt1)<1 || TimeDayOfWeek(dt1)>5) {dt1-=24*60*60;}
    while (TimeDayOfWeek(dt2)<1 || TimeDayOfWeek(dt2)>5) {dt2-=24*60*60;}
    while (TimeDayOfWeek(dt3)<1 || TimeDayOfWeek(dt3)>5) dt3-=24*60*60;
  }
}

 

должен рисовать линию с момента открытия торгового дня и на 48 часов вперед.

В понедельник не рисует.

Кто поможет? Что-то башка уже не варит совсем.  

Михаил
68
Михаил 2012.10.30 20:09  
что означает время dt1?
Алексей Тарабанов
7271
Алексей Тарабанов 2012.10.30 20:29  

Алгоритм: 

1. Определить, в какой именно день должна начаться линия: для понедельника - в четверг, для вторника - в пятницу, для среды - в понедельник, для четверга - во вторник, для тяпницы - догадайтесь с трех раз. 

2. Построить линию: 1-я точка - в начале выявленного дня (п.1) , 2-я - сдвинута на 48 часов вправо, либо на 0-м баре, думаю понятно, на каком из них:) 

Михаил
68
Михаил 2012.10.30 20:44  

я не понял какой объект рисуется

если это линия, то достаточно 2 координат, а в примере фигурирует три даты, одна в прошлом, одна в будущем, одна сейчас

Алексей Тарабанов
7271
Алексей Тарабанов 2012.10.30 20:58  
midorum:

я не понял какой объект рисуется

если это линия, то достаточно 2 координат, а в примере фигурирует три даты, одна в прошлом, одна в будущем, одна сейчас

 


Это уже - не предмет обсуждения:) Угол какой-то рисуется, ну и ладненько... 
Михаил
68
Михаил 2012.10.30 21:06  
Katarho:

должен рисовать линию с момента открытия торгового дня и на 48 часов вперед.

???
hunta777
24
hunta777 2012.10.31 19:29  

void start()
{
datetime dt2=TimeCurrent(); 
  
  datetime dt3=TimeCurrent()+24*60*60;

datetime dt1;
  if (TimeDayOfWeek(dt2)==1){dt1-=72*60*60;}
   else
   dt1=TimeCurrent()-24*60*60; 

 

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

 

Для MIDORUM: С момента открытия торгового дня будет нарисована линия в будущее. Длина линии - 48 торговых часов. 

dt1 используется для определения торгового дня, в котором потом уже, внутри функции берется нужное время.

dt2 - день перед dt1, прошлый торговый день(даные из него используются для расчета), т.е. все ОК, пока не наступает понедельник, и dt2 определяется как воскресенье. А надо бы - пятницу.

dt3 - завтрашний день. 

elmucon
637
elmucon 2012.10.31 19:35  
Katarho:

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


int DayOfWeek( ) 
Возвращает порядковый номер дня недели (воскресенье-0,1,2,3,4,5,6) последнего известного времени сервера.
Замечание: при тестировании последнее известное время сервера моделируется. 
Пример:
  // не работает в выходные дни.
  if(DayOfWeek()==0 || DayOfWeek()==6) return(0);

 
Михаил
68
Михаил 2012.10.31 19:58  
Katarho:

Для MIDORUM: С момента открытия торгового дня будет нарисована линия в будущее. Длина линии - 48 торговых часов. 

dt1 используется для определения торгового дня, в котором потом уже, внутри функции берется нужное время.

dt2 - день перед dt1, прошлый торговый день(даные из него используются для расчета), т.е. все ОК, пока не наступает понедельник, и dt2 определяется как воскресенье. А надо бы - пятницу.

dt3 - завтрашний день. 

может так?

//+------------------------------------------------------------------+
//|                                                  for_Katarho.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
datetime dt1, dt2, dt3; 
int start()
{
   dt2=TimeCurrent();//сегодня (старайтесь получать время один раз и от него все считать)
   dt3=dt2+24*60*60;//завтра
   if(DayOfWeek()==1)//если сегодня понедельник
      dt1=dt2-72*60*60;//пятница
   else
      dt1=dt2-24*60*60;//вчера

   //вызов функции для расчета линии

   return(0);
}
//+------------------------------------------------------------------+
hunta777
24
hunta777 2012.10.31 21:10  

Всем спасибо!!! О результатах напишу в понедельник! :)

Алексей Тарабанов
7271
Алексей Тарабанов 2012.10.31 21:44  
Katarho:

Всем спасибо!!! О результатах напишу в понедельник! :)


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

Bar1=iBarShift(NULL,1440,dt1); 

dt2=iTime(NULL,1440,Bar1+1); 

Ну, а с dt3 все понятно.  

PS Если историю отображать не надо, лучше исключить третью точку и просто рисовать 2 луча.  

Кстати, в этом случае:   dt2=iTime(NULL,1440,1); поскольку Bar1=0.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий