Bibliotecas: CheckHistory - Função que verifica e carrega o histórico

 

CheckHistory - Função que verifica e carrega o histórico:

Função de carregamento do histórico da MetaQuotes ligeiramente modificada.

Autor: Andrey Khatimlianskii

 

Eu notei esse recurso...

Se você precisar remover dados de buffer de algum indicador para um símbolo que não esteja selecionado na "Observação do mercado" e para o qual o histórico não esteja preenchido, será necessário inserir algo como isso na função:

.....
   uint start=GetTickCount();
   // minhas linhas [início]
   long m=SymbolInfoInteger(symbol,SYMBOL_SELECT);
   if(m<1)
     {
      bool is_selected=SymbolSelect(symbol,true);
      Sleep(500);
     }
   // minhas linhas [end]
   if(CheckTerminalHistory(symbol,period,size) || CheckServerHistory(symbol,period,size))
     {
      if(print_info)
        {
   
.....
 
Estou fazendo algo errado, mas não consigo descobrir o quê. Gráfico (testador) - H1. Preciso carregar barras - H4 no valor de 3000 unidades (BarsToAnalyse=3000). Ele não carrega... Linha com a função:
if ( first && !CheckLoadHistory( _Symbol,PERIOD_H4, BarsToAnalyze ) )
 
Forex_Noob:
Estou fazendo algo errado, mas não consigo descobrir o quê. Gráfico (testador) - H1. Preciso carregar barras - H4 no valor de 3000 unidades (BarsToAnalyse=3000). Ele não carrega... Linha com a função:

O que ele escreve no registro? O que acontece? Ela simplesmente trava?

Se você executá-la em um gráfico normal, ela carrega? Há algum histórico no servidor do corretor?

 

Entendo que o carregamento é feito usando SeriesInfoInteger com o parâmetro SERIES_SYNCHRONIZED?

Isso é uma coisa interessante que eu deveria verificar... porque estou mexendo com essas cotações históricas... Abro um gráfico e simulo o Home até que o carregamento das barras pare. Gostaria de saber qual será a diferença entre esses métodos....

 
elugovoy:

Entendo que o carregamento é feito usando SeriesInfoInteger com o parâmetro SERIES_SYNCHRONIZED?

Isso é uma coisa interessante que eu deveria verificar... porque estou mexendo com essas cotações históricas... Abro um gráfico e simulo o Home até que o carregamento das barras pare. Eu me pergunto - qual será a diferença entre esses métodos....

Não deve haver diferença, a função carrega e recalcula todo o histórico necessário normalmente.
 

A única coisa que funciona no final de 2018. +5 e obrigado!

Alguma ideia para melhorar?

 
Vladimir Pastushak:

A única coisa que funciona no final de 2018. +5 e obrigado!

Alguma ideia para melhorar?

Vladimir, não fale por enigmas

 
Andrey Khatimlianskii:

Vladimir, não fale por enigmas

Eu estava com pressa, e seu código também trava em símbolos com histórico problemático....

Testei vários códigos para carregar o histórico, todos eles travam em alguns tsfd.

O mesmo acontece com seu código.

 
Vladimir Pastushak:

Eu estava com pressa, e seu código também trava em caracteres com histórico problemático.

Testei vários códigos para carregar o histórico, todos eles travam em alguns tsfd.

Seu código é o mesmo.

Houve uma discussão sobre o fato de que até mesmo o iBars congela sob certas condições.

Não quero dar uma olhada nisso agora.

 

Olá,


Tenho duas perguntas sobre seu código.

Na função

CheckServerHistory()

CheckServerHistory(...)
{
        ...
        if(first_server_date>TimeCurrent()-size*PeriodSeconds(period)) return(false);
        ...
}

Isso realmente funcionará, pois a diferença de tempo e a contagem de períodos são diferentes quando se leva em conta o fechamento do mercado?


Na função

CheckLoadHistory()

CheckLoadHistory(...)
{
        if(CheckTerminalHistory(symbol,period,size) || CheckServerHistory(symbol,period,size))
        { ... }
}


Aqui, a execução verifica primeiro os dados do terminal e, depois, os dados do servidor.

Faz sentido fazer o contrário?