Discussão do artigo "Trabalhando com o tempo (Parte 2): funções"

 

Novo artigo Trabalhando com o tempo (Parte 2): funções foi publicado:

Vamos aprender a reconhecer automaticamente as diferenças de tempo junto à corretora, bem como o Tempo Médio de Greenwich. Em vez de preguntar à corretora, que provavelmente dará uma resposta imprecisa (e quem quer explicar onde está o horário de negociação?), seremos nós mesmos a ver a que horas ela recebe as cotações nas semanas em que os fusos horários são trocados. Mas é claro que não vamos fazer isso manualmente, deixaremos o software fazer o trabalho por nós.

Neste artigo continuaremos com o arquivo de inclusão DealingWithTime.mqh, com que trabalhamos na primeira parte. Neste arquivo, antes das funções e depois das substituições de macros vêm as variáveis requeridas, que são declaradas como variáveis globais:

//--- global variables for time switches
int      DST_USD=0,                             // act time shift USD
         DST_EUR=0,                             // act time shift EU
         DST_AUD=0,                             // act time shift Australia
         DST_RUS=0;                             // D'2014.10.26 02:00', -10800,



Estas variáveis DST_USD, DST_EUR, etc. tomarão o valor real da diferença de tempo nos respectivos países e regiões - EUA, Europa, etc. Os valores das variáveis serão preenchidos com funções. No horário normal de inverno, os valores são zero: o tempo não muda durante este período.

Em seguida, temos variáveis com a data da próxima mudança de horário. Elas indicam quando os novos valores das variáveis terão que ser calculados, para que cálculos desnecessários não sejam realizados antes disso e para que os recursos computacionais não sejam desperdiçados:

datetime nxtSwitch_USD,                         // date of next switch
         nxtSwitch_EUR,                         // date of next switch
         nxtSwitch_AUD,                         // date of next switch
         nxtSwitch_RUB = D'2014.10.26 02:00';   // Russia is different :(



Há uma pequena diferença nas configurações para a Rússia, veremos isso um pouco mais tarde.

Esta estrutura e sua variável global são o coração de todo o programa. :)

struct _OffsetBroker
  {
   int   USwinEUwin,                            // US=Winter & EU=Winter
         USsumEUsum,                            // US=Summer & EU=Summer
         USsumEUwin,                            // US=Summer & EU=Winter
         actOffset,                             // actual time offset of the broker
         secFxWiWi,                             // duration of FX in sec
         secFxSuSu,                             // duration of FX in sec
         secFxSuWi,                             // duration of FX in sec
         actSecFX;                              // actual duration of FX in sec
   bool  set;                                   // are all set?
  };
_OffsetBroker OffsetBroker;



Definimos os valores de diferença junto à corretora para os três períodos pertinentes e a permanência no mercado durante esses períodos. Também escrevemos o verdadeiro valor de permanência e verificamos se todos os valores requeridos foram definidos. Encontraremos o nome da variável global, OffsetBroker, várias vezes.


Autor: Carl Schreiber

 
Estamos dispostos a apresentar os valores reais a todos os nossos comerciantes de raposas para exibição
 
Estamos dispostos a apresentar o valor real a todos os nossos comerciantes de raposas para exibir
 

Olá,

Pelo que entendi no artigo, a função "setBokerOffset ()" também deveria funcionar no testador de estratégia, mas não funciona.

void OnTick()
  {
//---
   bool isTimeSet = setBokerOffset();
   if(!isTimeSet)
     {
      Alert("setBokerOffset failed");
      return;
     }
  }
array out of range in 'DealingWithTime.mqh' (201,21)


A alternativa "The Alternative using it via Input Variables" é a única maneira de obter os tempos corretos no testador de estratégias?

 
Nauris Zukas testador de estratégia, mas não funciona.


A alternativa "The Alternative using it via Input Variables" é a única maneira de obter os tempos corretos no testador de estratégias?

Acho que o testador de estratégia não recebeu as cotações e, então, a CopyTime() anterior falhou. Verifique se os dados solicitados e necessários já estão disponíveis localmente.
 
Carl Schreiber #:
Suponho que o testador de estratégia não tenha recebido as cotações e, portanto, o CopyTime() anterior falhou. Verifique se os dados solicitados e necessários já estão disponíveis localmente.

Ok, vou observar mais de perto o CopyTime() e tentarei resolver o problema.

E obrigado, artigo muito útil!

 
Bom artigo. No entanto, surge um problema: como determinar que uma corretora/negociante está mudando de inverno/verão sem entrar em contato com o suporte técnico?
 
Nikita Chernyshov # :
Bom artigo. No entanto, surge um problema: como determinar que uma corretora/negociante está mudando de inverno/verão sem entrar em contato com o suporte técnico?
  1. Por que não perguntar?
  2. O software sabe quando é o horário de verão/inverno nos EUA e na UE e usa isso para calcular a compensação da corretora.
 
Nikita Chernyshov #:
Bom artigo. No entanto, surge um problema: como determinar que uma corretora/negociante está mudando de inverno/verão sem entrar em contato com o suporte técnico?


.
Документация по MQL5: Дата и время / TimeDaylightSavings
Документация по MQL5: Дата и время / TimeDaylightSavings
  • www.mql5.com
TimeDaylightSavings - Дата и время - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:


.

sim, mas depende das configurações de horário do usuário, o que não funciona muito bem. Além disso, ele precisa ser modelado em um testador.

 
Carl Schreiber #:
  1. Por que não perguntar?
  2. O software sabe quando é o horário de verão/inverno nos EUA e na UE e usa isso para calcular a compensação do corretor.

1. Porque o suporte nem sempre fornece informações corretas. Você mesmo apontou isso sobre o corretor da Alpari. + é uma sobrecarga: descobrir a transição de cada corretor. Porque assim não é possível criar uma boa solução, pois não sei com quem o usuário final está discutindo.

2. Bem, mais ou menos, sim, mas se o revendedor não fizer a transição do inverno para o verão e vice-versa, você terá algo estranho nos cálculos.

Tentei modificar um pouco sua biblioteca, mas aparentemente algo deu errado. Achei que o código deveria levar ao fato de que o Expert Advisor detecta automaticamente o horário GMT e negocia de acordo com o GMT, e não de acordo com o servidor da corretora. Não tenho certeza se o código é ideal, mas a solução parece funcionar. Entretanto, nas corretoras que não alteram o horário, há alguns cálculos incorretos.

Arquivos anexados: