Erros, bugs, perguntas - página 1234

 
Tapochun:
Depois esta pergunta. Se o indicador estiver a funcionar em M15. Forma-se uma nova vela. Ao solicitar dados para M15 e M30, deverão estes estar disponíveis ao mesmo tempo?

Sim.

Após criar um indicador(incluindo-o no ciclo normal de processamento) e entrar no ciclo normal de processamento de carraças (ontik), os dados estarão disponíveis com uma elevada probabilidade. Mas não se esqueça que não há garantias devido ao possível descarregamento de história para outros símbolos.

Ou seja, verificar sempre os resultados dos pedidos de dados indicadores. Se solicitar dados na ontika e estes não estiverem disponíveis, então saia imediatamente para verificar o próximo tick.

Não cometa o típico erro "tudo está sempre pronto, não penso em processos técnicos de entrega e cálculo de dados, não me deve preocupar, tenho sempre sorte". Implementar sempre uma lógica de inicialização preguiçosa e controlo de dados.

Não se esqueça de testar os seus programas numa base de gráficos vazia. Normalmente é suficiente reiniciar o terminal com uma base de dados de histórico apagada manualmente para obter uma variedade de erros de acesso por índice ou divisão errada por zero.

Se tiver uma barra m15 sobre um símbolo, então existe definitivamente uma barra m30 sobre o mesmo símbolo.

 
Renat:

Sim.

Outra questão. A função BarsCalculated() comporta-se da mesma maneira quando chamada de um EA e de um indicador?
 
Tapochun:
Outra questão. A função BarsCalculated() comporta-se da mesma maneira quando chamada de um EA e de um indicador?
O que é que tem de errado?
 
Renat:
O que é que está errado?

É que já experimentei com informações diferentes. Segundo sei, deveriam funcionar da mesma forma. Mas não o fazem. Como é domingo, não há forma de verificar no tempo actual. Mas também funcionam de forma diferente no testador. Aqui estão duas amostras de código. O essencial é o seguinte. Estamos a tentar obter dados de sete TFs. Iniciamo-lo (tanto conselheiro como indicador) não da TF mais significativa. Por exemplo, a partir de М15. Se o tick actual sincronizou a formação de uma nova vela e a obtenção de dados sobre esta vela através de BarsCalculated() - então registamos o número de barras calculadas utilizando BarsCalculated() e o tempo da vela actual. Ver detalhes no código.

O indicador.

Primeiro tique.

Para cada TF, uma nova vela é formada. Mas em TF M1, M5, M15, BarsCalculated() retorna 0. Mas em TF M30, H1, H4, D1 retorna -1. Aqui temos uma questão, porque é que a função funciona de forma diferente? Assim, se o executarmos na TF M30, para a TF M1, M5, M15, M30,BarsCalculated() retorna 0. E, respectivamente, para a TF H1, H4, D1, retorna -1. A partir disto, podemos concluir que para a TF superior os dados estão inicialmente indisponíveis.

O segundo tick.

De acordo com a lógica do código, sincronização, ou seja, escrita de parâmetros (tudo de acordo com os registos das amostras);

O terceiro e o próximo carrapato.

Obtemos uma nova barra por indicador para TF M30, H1, H4, D1. Embora, os dados pareçam já ter sido obtidos. E acontece que o número na TF, maior do que o actual, é maior por 1. comportamento muito estranho. No futuro (utilizando o exemplo actual) não conseguiremos obter sincronização.

Consultor especializado.

O primeiro tique.

A sincronização é implementada imediatamente. O novo valor do BarsCalculated() é recebido em sincronia com a formação de uma nova vela.

Segundo e subsequentes carrapatos.

Comportamento lógico da função. Tudo está sincronizado.

Execute os dois exemplos por carrapatos no testador, verá por si mesmo. O comportamento actual da função é diferente para os Conselheiros Especialistas e indicadores. Também os dados provenientes dos indicadores são atrasados por períodos de tempo mais longos. Assim, penso queao solicitar dados para M15 e M30, estes não estarão disponíveis ao mesmo tempo.Os dados reais não são definitivamente!

Se eu estiver enganado, por favor aconselhe-me como obter correctamente os dados indicadores da TF mais antiga? Obrigado.

Arquivos anexados:
 
//+------------------------------------------------------------------+
//| Search position of an element in a sorted list                   |
//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
  {
   int      i,j,m;
   CObject *t_node=NULL;
//--- check
   if(m_data_total==0)
      return(NULL);
//--- check the pointer is not needed
   i=0;
   j=m_data_total;
   while(j>=i)
     {
      //--- ">>1" is quick division by 2
      m=(j+i)>>1;
      if(m<0 || m>=m_data_total)
         break;
      t_node=GetNodeAtIndex(m);
      if(t_node.Compare(element,m_sort_mode)==0)
         break;
      if(t_node.Compare(element,m_sort_mode)>0)
         j=m-1;
      else
         i=m+1;
      t_node=NULL;
     }
//--- result
   return(t_node);
  }
Biblioteca CListpadrão
Porquê chamarComparar duas vezes? Pode ser uma operação dispendiosa (se tivermos de verificar a igualdade de objectos de grandes dimensões, não a equivalência de alguns campos).
Pode-se simplesmente guardar o resultado após a primeira chamada decomparação.
 
Renat:
Devo esperar aqui pela vossa resposta? Ou devo levá-lo para o balcão de serviço?
 

De onde vêm estes ícones na parte inferior do gráfico?

Não há nenhum indicador no gráfico, mas os ícones aparecem sempre. Estou farto de os apagar. Como é que eu apago esta merda? Não consigo encontrar nada nas definições do terminal sobre isso.

 
meat:

De onde vêm estes ícones na parte inferior do gráfico?

Não há nenhum indicador no gráfico, mas aparecem sempre ícones. Estou farto de os apagar. Como posso desligar esta merda? Não consigo encontrar nada relacionado com ela nas definições do terminal.

Estes são eventos do separador "Calendário". Para apagar: Clicar com o botão direito dentro do separador "Calendário" -> "Mostrar nos gráficos" -> "Apagar todos os eventos".

P. S. E desmarcar a opção "Auto update". Agora os novos eventos do Calendário não serão mostrados no gráfico.

 
crOss:
Pegue em qualquer Expert Advisor (a partir de exemplos de MetaQuotes), execute-o sob construção 975 sobre um determinado período e com os mesmos parâmetros,
Obter os resultados, ou seja, o gráfico da curva de rendimentos e a tabela de transacções.


Agora, rodar a mesma EA em construção 1010 no mesmo período e com os mesmos parâmetros, obtém resultados completamente diferentes...

P.S. Metatester é 32-bit

Qual dos resultados é correcto? Na construção de 975 ou na construção de 1010?
 

Olá a todos) Por favor, ajudem-me a iniciar o temporizador:

int OnInit()

{

bool setTimer=EventSetTimer(60);

Imprimir("setTimer");

}

nulo OnTimer()

{

Imprimir("Passar o tempo");

}

Pergunta: porque é que não funciona? Esvaziou-me a mente...(((.