Erros, bugs, perguntas - página 1221

 
Fry:

Erro

Desafio:


Conduz a uma mensagem no livro de bordo:

HistoryBase 'RTS-12.14' 1 barras inválidas removidas


Estou farto deste erro. Entre outras coisas, está também a carregar o canal de comunicação.

O mesmo erro aparece por outras razões, não identificadas.

Mas, curiosamente, não aparece em muitos outros instrumentos. É o que mais aparece nos futuros da RTS.


Escrevi ao servicedesk há alguns meses - sem resposta(Pedido iniciado: 2014.07.28 13:41, #1046215).


Estou a anexar o código do induke que causa este erro em cada tick do actual (e passado) futuro RTS (conta demo com corretor "O..."):

Isto é um bug no terminal? Ou no corretor? Ou eu?

O que devo fazer? Como saber o número de barras no período de tempo D1 senão?

Boa noite. Já o experimentou?

SeriesInfoInteger( _Symbol, PERIOD_D1, SERIES_BARS_COUNT );
 
Tapochun:

Boa noite. Já tentou isto?

Boa noite para si, também. Já tentei. É tudo a mesma coisa.

O resultado é o mesmo. O erro está no diário de bordo para cada carrapato.

Obrigado pela ideia. Se a SeriesInfoInteger() não está a chamar Bars internamente, então é mais provável que tudo seja um "estreito" erro de dados no servidor do corretor.

E esta é também uma resposta satisfatória à minha pergunta.

Afinal, não é que eu não saiba onde é que o erro vai aparecer, se o posso evitar, etc.

 
Fry:

Boa noite também para si. Experimentei-o - a mesma coisa.

O resultado é o mesmo. O erro está no diário de bordo para cada carrapato.

Obrigado pela ideia. Se a SeriesInfoInteger() não está a aceder às Barras internamente, então é cada vez mais provável que se trate de uma junção de dados "estreita" no servidor do corretor.

E isso também é uma resposta satisfatória à minha pergunta.

Afinal, não sei onde o erro vai aparecer, se posso evitá-lo, etc.

Talvez haja realmente um erro no corretor, pois a mensagem apaga algumas barras "quebradas"... ou os dados são "mortos" ao longo do caminho. Mas, isto é apenas um palpite da minha parte. A propósito, a GetLastError() dá-me alguma coisa? Sim, e o que é que as Barras() devolvem?
 
Tapochun:
Provavelmente, erro de corretor, porque a mensagem apaga algumas barras "quebradas"... ou os dados são "mortos" no caminho. Mas, isto é apenas um palpite da minha parte. A propósito, a GetLastError() dá-me alguma coisa? Sim, e o que é que as Barras() devolvem?

Se Bars() retorna 0, então erro 4001 (ERR_INTERNAL_ERROR 4001 Unexpected internal error).

Mas por vezes Bars() ainda devolve o número de barras e depois não há erro (Bars() não muda de estado de erro).

 

MT4 construir 722, ME4 construir 989

Tentar copiar os dados actuais da barra zero:

      MqlRates rates[1];
      int n=CopyRates(_Symbol,PERIOD_CURRENT,time[0],1,rates); 
      Print("n=",n);

Impressões n=0 ou seja, os dados não são copiados.

Se_Períodofor escrito em vez dePERÍODO_CURSO , funciona.

Se copiar dados de barras não zero (tempo[1], etc.), funcionará, independentemente de escreverPERÍODO_CURSO ou_PERÍODO.

P.S. Quer que esteja num cd?

 
Fry:

Se Bars() retorna 0, então erro 4001 (ERR_INTERNAL_ERROR 4001 Unexpected internal error).

Mas por vezes Bars() ainda devolve o número de barras e depois não há erro (Bars() não muda de estado de erro).

A "imprevisibilidade" do erro sugere mais uma vez que algo não tem tempo para chegar e é eliminado, em resultado do qual o erro ocorre. Tanto quanto sei, tem de descobrir o número de barras em D1... Tem de o fazer em cada carraça? Em alternativa, escreva uma função que solicite dados uma vez por minuto ou menos. E ver se ocorre um erro.

 
kPVT:

MT4 construir 722, ME4 construir 989

Tentar copiar os dados actuais da barra zero:

Impressões n=0 ou seja, os dados não são copiados.

Se_Períodofor escrito em vez dePERÍODO_CURSO , funciona.

Se copiar dados de barras não zero (tempo[1], etc.), funcionará, independentemente de escreverPERÍODO_CURSO ou_PERÍODO.

P.S. Quer que esteja num cd?

Boa noite. Tente-o... embora se houver uma alternativa, é pouco provável que se apressem a procurar esta falha. Há uma semana que tenho duas aplicações por aí... nenhuma resposta, nenhuma palavra.
 
Fry:

O que fazer? De que outra forma posso saber o número de barras no período D1?

O indicador está a funcionar em D1?
 
MigVRN:
O indicador está a funcionar em D1?

Não, claro que não. A questão é essa. Pois quando o próprio indicador está a correr em D1, temos trivialmente"constint rates_total, // tamanho das séries temporais de entrada".

Aqui está um exemplo concreto da sua utilização.

Inicializámos um par de indicadores e obtivemos as suas pegas (tudo está bem aqui). Em seguida, na função ontik temos de nos certificar de que no momento da chamada todos os dados foram calculados sobre os cabos necessários (índices externos). E isto é o que eu faço:

   //not all data may be calculated
   if (BarsCalculated(hCCI)<rates_total) {Print("Not all data of trend CCI is calculated. Error#",GetLastError()); return(0);}
   if (Period()!=PERIOD_D1 && BarsCalculated(hDayTrand)<Bars(Symbol(),PERIOD_D1)) return(0);

E, neste caso, o hDayTrand é um cabo recursivo (o mesmo indicador, apenas D1 está carregado).

Parece que faço tudo de acordo com a documentação e exemplos do terminal e com as recomendações. O resultado é que todo este material é mexido no tronco e come megabytes por minuto.

 
Fry:

Não, claro que não. Este é o objectivo. Pois quando o próprio indicador está a correr em D1, temos trivialmente"constint rates_total, // tamanho das séries temporais de entrada".

Aqui está um exemplo concreto da sua utilização.

Inicializámos um par de indicadores e obtivemos as suas pegas (tudo está bem aqui). Em seguida, na função ontik devemos certificar-nos de que no momento da chamada todos os dados sobre os cabos necessários (índices externos) já foram calculados. E isto é o que eu faço:

E, neste caso, o hDayTrand é um cabo recursivo (o mesmo indicador, apenas D1 está carregado).

Parece que faço tudo de acordo com a documentação e exemplos do terminal e com as recomendações. O resultado - todo este material é rabiscado no tronco e come megabytes por minuto.

IMHO, tem de contactar o corretor (Otkrytie, pelo que entendo). As contas reais não o têm, por isso está nas definições do servidor, o mais provável é que esteja nas definições do servidor.