Portanto, o erro 4066 é um problema típico dos usuários de MTF, o terminal não bombeou os dados de outros TFs que precisam verificar a integridade de outros dados de TFs.
Veja mais de perto o código e o que eu escrevi antes de dar conselhos.
O código tem uma verificação de erros e uma verificação de dados vazios. E quando uma função retorna dados incorretos sem um erro, é um erro!
Veja mais de perto o código e o que eu escrevi antes de dar conselhos.
O código tem uma verificação de erros e uma verificação de dados vazios. E quando uma função retorna dados incorretos sem um erro, é um erro!
Talvez eu tenha perdido algo e me mostre onde você verifica a integridade da história, por exemplo, no procedimentoCheckCurrentHourOpenTime()
O que você quer dizer com integridade da história?
Estou falando do fato de que há uma verificação de erros quando se recuperam valores históricos. Há um cheque em cada função. Aqui está:
//--- Проверяем, получено ли время открытия часового бара if(tempHourOpenTime==0 || err!=0) // Если время бара не получено return(false); // Возвращаем ложь
Isto é, se for recebido um valor zero ou erro - o tempo não é escrito em variável global. Você acha que não é suficiente?
A questão é que a função SeriesInfoInteger() primeiro retorna um erro, mas na próxima execução ela retorna NÃO! E também não retorna o valor correto!SeriesInfoInteger() retorna apenas informações para uma determinada consulta, neste caso estamos pedindo para retornar o último tempo conhecido de abertura de bar na história por símbolo e período. Não há erro aqui, o que era o mais recente no momento é o que retornou. Mostrarei a você como verificar a integridade da história.
SeriesInfoInteger() retorna apenas informações para uma determinada consulta, neste caso estamos pedindo para retornar o último tempo conhecido de abertura de bar na história por símbolo e período. Não há erro aqui, o que era o mais recente no momento é o que retornou. Chegarei ao PC e lhe mostrarei como verificar a integridade do histórico.
Você quer dizer que não há erro aqui!? Então por que está dando códigos de erro "falsos"? Diz que a história está bem onde não está...
O que você quer dizer com "não há erro aqui"? Então por que está dando códigos de erro "falsos"? Diz que a história está bem onde não está...
Mais uma vez, esta função não verifica a integridade da história! Ele retorna as informações que poderia encontrar nele. Neste caso em particular, encontrou a barra de horas que foi solicitada quando o terminal foi desligado. O resto da história ainda não foi carregada.
Para verificar se o histórico de um determinado TF está paginando completamente, basta usar uma função:
bool IsTFDataReady(ENUM_TIMEFRAMES eTF) { ResetLastError(); iTime(NULL, eTF, 1); return GetLastError() == ERR_NO_ERROR; }
Se a função retornar falso, os dados para o TF solicitado estão incompletos. Caso contrário, está completo.
Mais uma vez, esta função não verifica a integridade da história! Ela retorna as informações que conseguiu encontrar nela. Neste caso, encontrou a barra de horas que foi solicitada quando o terminal foi desligado. O resto da história ainda não foi carregada.
Mais uma vez. Não é mencionado em nenhum lugar. Isso é o primeiro de tudo. Em segundo lugar, então por que é enganador mostrar primeiro o código de erro 4066 e depois não?
Para verificar se o histórico de um determinado TF está paginando completamente, basta usar uma função:
Se a função retornar falso, os dados para o TF solicitado estão incompletos. Caso contrário, está completo.
Você já verificou no temporizador? Você vê que eu comentei linhas? Eu verifiquei esta função, ela não mostrava nenhum erro e também mostrava dados incorretos. Vou verificar novamente.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Objetivo: Ao iniciar o indicador, obter os dados atuais no cronômetro: o horário de abertura da barra semanal, diária e horária. Em seguida, escreva-as em variáveis globais para uso posterior. O cronograma atual é М1.
Implementação: Obtemos os tempos de barra usando a função SeriesInfoInteger().
Resultado: Como resultado, se o terminal ÚLTIMO funcionasse por várias horas, por exemplo, se estivesse desligado durante a noite, obtemos tal resultado em seu primeiro (um dia) início:
Como você pode ver, o tempo de recuperação de dados é 2018.09.21 11:11, e para essa hora recebemos o horário de abertura do dia = 2018.09.20 (embora deva ser 2018.09.21) e o horário de abertura da hora = 2018.09.20 16:00 (embora deva ser 2018.09.21 11:00). E o tempo devolvido pelo terminal não é nada além dos dados no momento em que ele foi fechado pela última vez. Isto é, os dados são armazenados em cache e devolvidos independentemente do fato de que o terminal tenha sido desligado. E entendo se o erro #4066 seria devolvido toda vez (dados históricos solicitados em estado de atualização) até que os dados sejam atualizados, mas não, são os dados ERROR que são devolvidos! Este erro só é devolvido uma vez e então você pode viver com ele. Há um claro erro de cache. Peço aos desenvolvedores(@Slava) que prestem atenção a isso!
Repito. Os dados errôneos aparecerão se forem solicitados no temporizador!
Versão terminal: x64, 1090.