[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 209

 
polycomp:
Estas são as funções, e os objetos são os retângulos que aparecem no gráfico.

Arquivos anexados:
 
polycomp:


Arquivos anexados:
 
Teremos que ver, isso levará tempo.
 
polycomp:
Uma das possíveis razões do funcionamento diferente do código após a reinicialização é a peculiaridade da inicialização das variáveis estáticas em MT4. Na função isNewBar() você usa tal variável. Durante a inicialização primária BarTime = 0. E na reinicialização posterior, esta variável conterá valor anterior (não 0). Para verificar esta suposição, torne o BarTime variável global e verifique como o código funciona.
 
polycomp:
alsu:

Primeiro, imprima algo das funções da biblioteca em Imprimir, para que você saiba se elas são chamadas de alguma forma

Os objetos gráficos são criados em funções de biblioteca. Após a primeira chamada ao indicador, os objetos são criados e exibidos na janela do terminal.

Quando você os chama novamente, eles não estão presentes na lista de objetos, o que sugere que as funções externas não estão funcionando quando o indicador é recalculado por algum motivo, e o terminal é silencioso sobre esta questão.

Ok. Em vez de sinais indiretos, imprimir ( " chamada desta função") no indicador; veremos imediatamente se esta função é chamada.

Você deve ser menos arrogante, então os erros serão encontrados mais rapidamente)

 
polycomp:



Em geral, seu problema está mais provavelmente na função

bool isNewBar()
{
  static datetime BarTime;  
   bool res=false;
    
   if (BarTime!=Time[0]) 
      {
         BarTime=Time[0];  
         res=true;
      } 
   return(res);
}

A questão é que a estática não é reinicializada durante a reinicialização, portanto, quando você reinicia, seu BarTime é sempre igual ao tempo da última barra contada na última vez, ou seja, isNewBar () é falso até que uma nova vela chegue. Seria melhor mover a função da biblioteca para o mqh inluder e zerar o BarTime=0 explicitamente no init ().

Este é apenas um primeiro olhar sobre o código, portanto não julgue muito severamente se eu estiver errado.

 
polycomp:



Eu começaria removendo esta linha da sua biblioteca

#property library

Como você não está usando uma biblioteca, mas um arquivo de inclusão

 
alsu:

Até onde me lembro, você tem que se lembrar especificamente desta vez quando você estabelece a ordem pendente. Você pode memorizá-lo diretamente no comentário ao pedido (ou em magik, como uma perversão especial:).
Muito obrigado.
 

PERGUNTA 1.

Como codificar esta idéia.

Definir uma ordem pendente, mas fazer com que ela se converta em uma ordem de mercado somente se o preço da ordem pendente coincidir com o preço de abertura de qualquer vela TF60

PERGUNTA 2.

Como codificar esta idéia.

Se uma ordem pendente for convertida em uma ordem de mercado, em 10 minutos devemos definir outra ordem pendente com os mesmos valores: preço aberto, preço de parada, volume como na ordem pendente anterior que foi convertida em uma ordem de mercado.

Obrigado.

 
alsu:

Ok. Talvez, em vez de julgarmos por sinais indiretos, devêssemos apenas digitar o próprio indicador: Imprimir ("chamada de tal e tal função"); veremos imediatamente se ela é chamada ou não.

Você deve ter menos excesso de confiança do que os erros serão encontrados mais rapidamente).

alsu:

E, em geral, seu problema está mais provavelmente na função

O problema é que a estática não é zerada ao reiniciar, portanto, ao reiniciar o BarTime é sempre igual ao tempo da última barra contada na última vez, ou seja, isNewBar () será falsa até que uma nova vela chegue. Seria melhor mover a função da biblioteca para o mqh inluder e zerar o BarTime=0 explicitamente no init ().

Este é apenas um primeiro olhar sobre o código, portanto não julgue muito severamente se eu estiver errado.


Muito obrigado!

Removido o isNewBar () da biblioteca e colocado no arquivo indicador. Tudo funciona como um relógio!

Razão: