Sessões de negociação ou como é importante o tempo - página 9

 

Aqui estão algumas funções úteis para lidar com a hora (você pode determinar se a hora de verão ou de inverno está em vigor para qualquer data).

#property copyright "Erics"
#property link      "erics.fx@tut.by"

#define EUR 0
#define USA 1

//+------------------------------------------------------------------+
//| скрипт, демонстрирующий использование некоторых функций времени  |
//+------------------------------------------------------------------+

void start()
{
  int tl = TimeLocal();
  MessageBox("Сейчас: " + TimeToStr(tl) + ", летнее время = " + getDST(EUR, tl) +
             "\n\n20.03.2008 0:00, летнее время в Европе  = " + getDST(EUR, MTtime(DateSerial(2008,3,20))) +
             "\n20.03.2008 0:00, летнее время в Америке = " + getDST(USA, MTtime(DateSerial(2008,3,20))) +
             "\n\n1.04.2008 0:00, летнее время в Европе  = " + getDST(EUR, MTtime(DateSerial(2008,4,1))) +
             "\n1.04.2008 0:00, летнее время в Америке = " + getDST(USA, MTtime(DateSerial(2008,4,1))));
}

int MTtime(double serialTime)
{ // переводит дату/время, заданную в днях от 1900 года (Windows)
  // в дату, заданную в секундах от 1970 года (Unix)
  return(86400.*(serialTime - 25569.));
}

int DateSerial(int yyyy, int mm, int dd)
{ // возвращает дату в формате Windows (от 1.01.1900 г.)
  yyyy -= 1900; mm++;
  if (mm < 4) { mm += 12; yyyy--; }
  int res = MathFloor(365.25*yyyy) + MathFloor(30.6*mm) + dd - 62;
  return(res);
}

int getDST(int country, int time)
{ // Daylight Saving Time - возвращает 1, если на время time действует летнее время и 0 - если поясное (зимнее) время
  int DSTstarts, DSTends, y, yr = TimeYear(time);

  switch(country)
  {
    case EUR:
      // летнее время в Европе и России начинается в последнее восресенье марта, в 2 часа ночи
      y = MathFloor(1.25 * yr + 4.);
      DSTstarts = MTtime(DateSerial(yr, 3, 31 - y % 7) + 2./24.);
      // летнее время в Европе и России заканчивается в последнее восресенье октября, в 3 часа ночи
      y = MathFloor(1.25 * yr + 1.);
      DSTends   = MTtime(DateSerial(yr,10, 31 - y % 7) + 3./24.);
      break;

    case USA:
      // летнее время в США и Канаде с 2007 г. начинается во второе восресенье марта, в 3 часа ночи
      y = MathFloor(1.25 * yr + 1.);
      DSTstarts = MTtime(DateSerial(yr, 3, 14 - y % 7) + 3./24.);
      // летнее время в США и Канаде с 2007 г. заканчивается в первое восресенье ноября, в 3 часа ночи
      DSTends   = MTtime(DateSerial(yr,11, 7 - y % 7) + 3./24.);
      break;
  }  
  if (time>=DSTstarts && time<=DSTends) return(1); else return(0);
}

P.S. Na América antes de 2007, a mudança de e para a DST foi na mesma época que na Europa. Use o EUR ao ligar.

Se alguém pudesse converter isto em uma biblioteca, disposto a ajudar (asia, austrália).

Arquivos anexados:
 

Eu fiz funções de DST também para a Europa e EUA, elas retornam verdadeiras para a hora de verão e falsas para a hora de inverno. Eles são projetados para trabalhar com o tempo do servidor, para os EUA somente a partir de 2007.

//+------------------------------------------------------------------+
bool DST_EU(int CurrentTime) {
  int CurMonth = TimeMonth(CurrentTime);
  int CurDayOfWeek; 
  int CurDay; 
  if (CurMonth > 3  &&  CurMonth < 10) return(true);
  else { 
    if (CurMonth < 3  ||  CurMonth > 10) return(false);
    else {
      CurDayOfWeek = TimeDayOfWeek(CurrentTime); 
      CurDay = TimeDay(CurrentTime); 
      switch (CurMonth) {
        case  3: if (CurDay-CurDayOfWeek > 24) return(true);
                 else return(false);
                 break;
        case 10: if (CurDay-CurDayOfWeek < 25) return(true);
                 else return(false);
                 break;
      }
    }
  }
}
//+------------------------------------------------------------------+
bool DST_US(int CurrentTime) {
  int CurMonth = TimeMonth(CurrentTime);
  int CurDayOfWeek; 
  int CurDay; 
  if (CurMonth > 3  &&  CurMonth < 11) return(true);
  else { 
    if (CurMonth < 3  ||  CurMonth > 11) return(false);
    else {
      CurDayOfWeek = TimeDayOfWeek(CurrentTime); 
      CurDay = TimeDay(CurrentTime); 
      switch (CurMonth) {
        case  3: if (CurDay-CurDayOfWeek > 7) return(true);
                 else return(false); 
                 break;
        case 11: if (CurDay-CurDayOfWeek < 1) return(true);
                 else return(false); 
                 break;
      }
    }
  }
}


Erics писал (а) >>

P.S. Na América antes de 2007 a mudança para e da DST era a mesma que na Europa. Use o EUR quando chamado.

Isto é apenas metade verdade, apenas o final correspondido.

 
kombat писал (а) >>

10:00 - Lançamento europeu

Combo, você está enganado. A Europa abre às 09:00 MSK (horário de verão)

 
Uma pergunta para o mercado experiente... Você tem algum mês de sorte especial no jogo e vice-versa? É claro que depende de suas táticas comerciais, portanto a questão é muito abstrata. Mas de uma forma ou de outra?
 

Como prometido, "digeri" tudo o que pude em relação às sessões de negociação e ao horário de verão. Fiz um excelente arquivo com calendário de horário de verão e cálculo da hora de início e fim da sessão.

A primeira folha é apenas um calendário de transição, sem fórmulas. Este calendário é usado para calcular as sessões na segunda folha. Na segunda folha, você pode definir apenas três parâmetros: a data atual para a qual você quer calcular tudo, e dois fusos horários: um para o fuso horário do servidor DC, e outro para a hora local (que você tem no seu relógio de pulso). Por estes você calcula tabelas com horários locais de câmbio, e por eles - os horários do início e do fim (mínimo e máximo) das sessões de negociação.

Parece funcionar, mas eu (por hábito) não posso acreditar que tudo foi feito sem erros. Por quê? Bem, por exemplo, a Austrália e a sessão oceânica. Assim, obtemos fórmulas diferentes para os cálculos: aqui estamos procurando o horário de verão, enquanto eles têm que procurar o horário de verão. Em geral, existem algumas dificuldades :(

Por esta razão, o arquivo que coloquei em meu site e não postado no fórum - como os erros são eliminados, atualizarei o arquivo e o link do fórum será sempre baixado na versão nova e correta (postarei atualizações neste tópico). Você pode fazer o download do arquivo aqui: http: //forextools.com.ua/uploads/files/DST.zip

É o que parece:


Se alguém tiver alguma sugestão construtiva - escreva uma carta. Não posso prometer uma implementação rápida (devido a tempo integral no trabalho principal), mas quando eu tiver tempo - tudo sensato e útil será feito ;)

 

ForexTools, bom trabalho!

Mas eu não consigo entender o que você quer dizer com isso. Explicar mais especificamente o que significa "aditivo" (apenas para ter certeza).

E quanto ao servidor TMZ e TMZ local? Qual é a diferença entre a hora local e a hora do CD? Você tem os números 2 e 3 abaixo de cada um, respectivamente? O que isso significa?

 

Há simplesmente dois cálculos exatamente o mesmo tempo, apenas por conveniência - se o tempo do terminal não corresponder ao tempo do computador local.

A adição é quantas horas (levando em conta a hora de verão ou inverno) serão adicionadas à hora UTC para converter a hora UTC do respectivo intercâmbio para a hora local do fuso horário selecionado. Este campo só é necessário para facilitar os cálculos em excelência.

As regras são muito simples: nós definimos (dependendo do campo Regra) e a data de tempo especificada. É inserido no campo Letn opposite the calculated date. Em seguida, ao horário de trabalho da bolsa de acordo com a UTC, adicionar o número de horas TMZ (da tabela superior) e adicionar a ela a correção Letn (se for horário de verão - então +1) e +TMZ do servidor da corretora ou TMZ local. Como resultado, a hora UTC é convertida para a hora local da respectiva TMZ.

 
Erics писал (а) >>

Há um padrão particular de tempo em forex. Esta é a Hora da Europa Central, CET.

Isto é GMT (ou UTC) +1 (+2 no verão).

Em teoria, as velas diárias devem começar à meia-noite CET em qualquer corretora.

Este provavelmente não é o caso, mas a maioria das empresas de corretagem utiliza o tempo CET.

Mais tarde enviarei a você um roteiro que define GMT, horário de verão/inverno, datas de tradução na Europa e América em qualquer ano (na América desde 2007, ou seja, de acordo com as novas regras).

Esclareça: se eu olhar apenas para o relógio do servidor (GMT+1), o horário de início/fim das sessões será constante?

No prgrama eu uso as restrições de hora com o comando Hora(), ou seja, eu verifico a hora atual do servidor, e dentro ou fora.


Se houver uma transição às duas horas, digamos, para trás, então a vela das horas não contém um volume duplo?

 
Parabellum писал (а) >>

Se houver uma transição às duas horas da manhã, digamos, para trás, a vela de uma hora contém um volume duplo?

A transição é sempre no domingo, quando os servidores de negociação (servidores MT de qualquer forma) estão "sem negociação" e, portanto, não há volumes simples ou duplos - há apenas um buraco na história.

 
ForexTools писал (а) >>

A transição é sempre no domingo, quando os servidores comerciais (MT's de qualquer forma) estão "não comercializando" e, portanto, não há lá volumes simples ou duplos - há apenas um buraco na história.

>> Estou vendo, obrigado.

E a primeira pergunta? Eu não preciso saber a hora local. Meu relógio é o servidor comercial. Os horários de abertura das sessões são constantes neste momento?

O programa tem uma restrição: se ( Hora()>t1 && Hout()<t2 ), então vá em frente, senão feche / durma; aproximadamente. Sem nenhuma correção.

Razão: