Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 578

 
PolarSeaman:

Não fui eu que inventei ocódigo: "Apenas certifique-se de atualizar os dados no OnTimer() para que seu código funcione. "

Como devo fazer isso?

Você tem um horário off-line?

 
Você pode me dizer como obter os indicadores de fundo de um período de tempo diferente daquele em que a coruja está pairando?
 
Galim_V:
Você pode me dizer como obter os indicadores de fundo de um período de tempo diferente daquele em que a coruja está pairando?

1. Por que você pendurou o pássaro? Não é uma pena?

2. Alguma vez você já abriu a ajuda? Receber dados indicadores no Expert Advisor a partir de qualquer período de tempo não é um problema porque os dois primeiros parâmetros de funções de recebimento de dados indicadores são usados para especificar o símbolo e o período do gráfico do qual se deseja receber valores.

De fato, mesmo quando você digita o código no editor, a lista de variáveis formais da função é aberta, e uma dica de ferramenta mostra o símbolo e o período de tempo. Estranho que você não tenha prestado atenção a eles.

 
Artyom Trishkin:

Você tem um horário off-line?

Não.

 
PolarSeaman:

Não.

Então por que o constante refrescamento sem necessidade?

Você precisa de tempo? Você pode obter a hora do último tick: TimeCurrent(), ou a última hora local: TimeLocal ().

Se você conseguir a hora do último tique no fim de semana, o cronômetro não ajudará - o tempo será o último tique na sexta-feira, ou o último tique do último dia útil. E o TimeLocal() não lhe dará tempo de servidor - você precisa recalculá-lo com um offset.

No entanto, não sei exatamente o que você quer obter no final.

 
Artyom Trishkin:

1. Por que você pendurou o pássaro? Não é uma pena?

2. Alguma vez você já abriu a ajuda? Receber dados indicadores no Expert Advisor a partir de qualquer período de tempo não é um problema porque os dois primeiros parâmetros de funções de recebimento de dados indicadores são usados para especificar o símbolo e o período do gráfico do qual se deseja receber valores.

De fato, mesmo quando você digita o código no editor, a lista de variáveis formais da função é aberta, e uma dica de ferramenta mostra o símbolo e o período de tempo. Estranho que você não tenha prestado atenção a eles.

2018.07.04 22:17:38.398 2016.11.10 13:00:00 Arap01 EURUSD,H1: Arredondamento 44.53781512605145 45.0 Isto é, dados estocásticos em modo "normal":

2=iStochastic(NULL,0,K,D,slowing,Average_method,Price_field,MODE_MAIN,2);

aqui pergunto M5 2=iStochastic(NULL,5,K,D,slowing,Average_method,price_field,MODE_MAIN,2);

Eu recebo 2018.07.04 22:23:05.680 2016.11.10 13:00:00 Arap01 EURUSD,H1: Arredondamento 0.0 0.0



 
Artyom Trishkin:

Entretanto, não sei exatamente com o que você quer acabar.

Alerta, eu quero, dois segundos antes que o bar feche. Não estarei trabalhando durante o fim de semana.

 
PolarSeaman:

Por isso, preciso de um alerta dois segundos antes que o bar feche sem um tiquetaque.

Não é fácil de fazer, você precisa executar um timer mais preciso (pelo menos 500 ms) e previamente fazer a sincronização da hora local e hora do servidor.
Eu já lhe falei sobre isso:

No momento da chegada do tick, conte a diferença TimeCurrent()-TimeLocal()
(isto é feito uma vez para sincronizar a hora local e do servidor)

- Esta é a compensação relativa ao corretor, se esta compensação mudar mais tarde, o tempo deve ser recalculado;
- no início do Expert Advisor (ouna aparência do barD1) recalculamos todas as vezes necessárias novamente, na hora local, levando em conta a compensação;
- Esperamos pelo que "contamos" no temporizador, verificando a dessincronização, perda da conexão com o corretor, tradução das mãos locais.

você pode pegar +/- 1 segundo
 
Taras Slobodyanik:

Não é fácil de fazer, você tem que executar um timer mais preciso (pelo menos 500ms) e pré-sincronizar a hora local com a hora do servidor.
Eu já lhe falei sobre isso:

Você pode pegar +/- 1 segundo

Obrigado. Como fazer o tempo em segundos, antes que a barra M5 feche. Neste momento está exibindo H1.

#property strict
#property indicator_chart_window
//--- input parameters
#define  MILLISEC_TIMER_INTERVAL         500 
int            timeOffset;
datetime       ServerLocalOffset;
datetime       prevTime,myTime,localtime;
bool           newBar = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   EventSetMillisecondTimer(MILLISEC_TIMER_INTERVAL);
   
  datetime srvtime,tmpOffset;
   RefreshRates();
   srvtime = TimeCurrent();
   // Modified
   localtime = TimeLocal()+TimeGMTOffset();
   if(TimeHour(srvtime)>TimeHour(localtime)){
      // Server Time is still ahead of us
      int newOffset = TimeHour(srvtime)-TimeHour(localtime);
      ServerLocalOffset = (newOffset*60*60);
   }else if(TimeHour(srvtime)<TimeHour(localtime)){
      // Server Time is Behind us
      int newOffset = TimeHour(localtime)-TimeHour(srvtime);
      ServerLocalOffset = (newOffset*60*60);
   }else{
      // No modification required
      ServerLocalOffset = srvtime;
   }
   localtime = TimeLocal()-ServerLocalOffset;
   
   tmpOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   if(tmpOffset < 30 && tmpOffset >= 0){
      timeOffset = TimeSeconds(srvtime) - TimeSeconds(localtime);
   }
   return(INIT_SUCCEEDED);
  }
  
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
datetime sec;
   datetime localtime;
   localtime = TimeLocal()+(TimeGMTOffset()+(60*60));
 sec=Time[0]-localtime-timeOffset;
 if(sec<=2){Alert("время откр. бара ",Time[0]);}
      Comment(TimeToStr(sec,TIME_SECONDS ));
  }
//+------------------------------------------------------------------+
 
Ainda não descobrimos como contar os segundos até que a barra feche no período atual. Ajuda.