временная зона дц

 

Как из скрипта определить временную зону в которой работает дц? Чегото я ничего не смог найти по этому вопросу...

 

Эта штука не работает в двух случаях.

1. когда устаревает время брокера (инет порвался...)

2. в выходные

 
shtoba >>:

Эта штука не работает в двух случаях.

1. когда устаревает время брокера (инет порвался...)

2. в выходные

3. Когда локальное время/зона настроены не корректно

 
shtoba писал(а) >>

3. Когда локальное время/зона настроены не корректно

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

 
Prival >>:

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

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

Но при разрывах связи и в выходные я не смогу вычислить зону дц. 

Вот что придумкалось: А не вычислить ли зону дц из минутной истории?... Тогда и терминал не особо нужен... 

 
shtoba >>:

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

Но при разрывах связи и в выходные я не смогу вычислить зону дц. 

Вот что придумкалось: А не вычислить ли зону дц из минутной истории?... Тогда и терминал не особо нужен... 


примерно так

//возвращает смещение брокера от CET
int ds_brokerOfCET()
{
   double t = TimeCurrent();//текущее время сервера
   t -= TimeSeconds(t);//начало минуты
   t -= TimeMinute(t);//начало часа
   t -= TimeHour(t);//начало дня
   t -= TimeDayOfWeek(t);//начало недели
   t += 10*60*60;//10:00 воскресенья
   
   double tz = 0;
   int amount = 0;
   for(int i=0; i<10; i++)//10 недель
   {
      int bar = iBarShift(NULL, PERIOD_M1, t);//первый бар с начала недели
      double t1 = iTime(NULL, PERIOD_M1, bar); //время первого бара с начала недели
      
      t1 = t1 - t;
      if(MathAbs(t1) > 24*60*60)
      {
         //разница больше суток - плохая история
         break;
      }
      
      tz += t1;
      t -= 7*24*60*60;
      amount++;
   }
   if(amount < 1)
   {
      Print ("unable determine timezone offset. NEED HISTORY!!!");
      return(0);
   }
   
   tz /= amount;//разница за одну неделю
   tz = MathFloor(tz/60/60+0.5)*60*60;//выровнять на ближайший час
   tz += 10*60*60;//считать от 00:00 воскресенья
   //теперь tz - это смещение CET от брокера
   return(-tz);//смещение брокера от CET
}
 
shtoba >>:

примерно так


вернее, так

/возвращает смещение брокера от CET
int ds_brokerOfCET()
{
   double t = TimeCurrent();//текущее время сервера
   t -= TimeSeconds(t);//начало минуты
   t -= TimeMinute(t)*60;//начало часа
   t -= TimeHour(t)*60*60;//начало дня
   t -= TimeDayOfWeek(t)*24*60*60;//начало недели
   t -= 1*24*60*60;//начало субботы
   double tClose = t - 2*60*60;//22:00 пятницы
   double tCheck = t + 10*60*60;//10:00 субботы
   
   double tz = 0;
   int amount = 0;
   for(int i=0; i<10; i++)//10 недель
   {
      int bar = iBarShift(NULL, PERIOD_M1, tCheck);//последний бар в неделе
      double t1 = iTime(NULL, PERIOD_M1, bar); //время последнего бара недели
      
      t1 = t1 - tClose;
      if(MathAbs(t1) > 24*60*60)
      {
         //разница больше суток - плохая история
         break;
      }
      
      tz += t1;
      tCheck -= 7*24*60*60;
      tClose -= 7*24*60*60;
      amount++;
   }
   if(amount < 1)
   {
      Print ("unable determine timezone offset. NEED HISTORY!!!");
      return(0);
   }
   
   tz /= amount;//разница за одну неделю
   tz = MathFloor(tz/60/60+0.5)*60*60;//выровнять на ближайший час
   //теперь tz - это смещение брокера от CET
   return(tz);
}
 
shtoba писал(а) >>

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

Но при разрывах связи и в выходные я не смогу вычислить зону дц.

Вот что придумкалось: А не вычислить ли зону дц из минутной истории?... Тогда и терминал не особо нужен...

На момент смены цены запоминайте цену в глабальную переменную, потом пользуйтесь значением из этой переменной.

 
Integer >>:

На момент смены цены запоминайте цену в глабальную переменную, потом пользуйтесь значением из этой переменной.

Наверное "На момент смены цены запоминайте локальное время в глабальную переменную, потом пользуйтесь значением из этой переменной."?

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

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