Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1383

 

Que tal isso?

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
   if(tc>50 && res*3<_sp) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<50) return(false);
   return(res>_sp?true:false);
}

Novamente a captura, se você executar o código durante o rollover e não antes dele, ele escreverá um spread enorme de 50 tick e esta linha não faz sentido.

Como consertar o código?

 
Vitaly Muzichenko:

Que tal isso?

Novamente a captura, se você executar o código durante o rollover e não antes dele, ele escreverá um spread enorme de 50 tick e esta linha não faz sentido.

Como consertar o código?

A lógica não é boa. Por que exatamente a média de 50 ticks com um contador para longmax, que pode durar muito tempo?

Há uma propagação declarada nas propriedades do símbolo. Deve ser inserido inicialmente por um intput. E, se não for digitado, ele é recebido. E se obtivermos um spread maior, erroneamente consideramos isso como média. Precisamos do valor médio em uma faixa bastante curta para detectar a mudança.

Se houver um spread intradiário, nós o comparamos em cada tick e obtemos o valor médio com o necessário. A questão é que não devemos calcular a média sem ter guardado os valores provisórios. Eu uso assim, eu memorizo todos os valores, e quando recebo o último valor mais um, eu o adiciono à soma e subtraio o primeiro, e numeração de turno (na matriz A(n) = A(n+1)). É mais barato do que discar para cima do contador para valores enormes. E até 10 - 20 valores eu uso variáveis.

Não sei qual é o mais caroSymbolInfoInteger ou a diferença entre Bid e Ask).

 
Valeriy Yastremskiy:

A lógica não é boa. Por que exatamente a média de 50 ticks com um contador para longmax, que pode durar muito tempo?

Há uma propagação declarada nas propriedades do símbolo. Deve ser inserido inicialmente por um intput. E, se não for inscrita, ela é recebida. E se obtivermos um spread maior, erroneamente consideramos isso como média. Precisamos do valor médio em uma faixa bastante curta para detectar a mudança.

Se houver um spread intradiário, nós o comparamos em cada tick e obtemos o valor médio com o necessário. A questão é que não podemos calcular a média sem lembrar os valores provisórios. Eu uso assim, memorizo todos os valores, e quando recebo o último valor mais um, adiciono à soma e subtraio o primeiro, e a numeração dos turnos (na matriz A(n)=A(n+1)). É mais barato do que discar para cima do contador para valores enormes. E até 10 - 20 valores eu uso variáveis.

Não sei, o que é mais caroSymbolInfoInteger ou diferença entre Bid e Ask).

Apenas a palavra "flutuante", esse é o problema.


 
Vitaly Muzichenko:

Apenas a palavra "flutuante", esse é o desafio.


ficou um pouco excitado). Então a lógica de acreditar que os primeiros valores estão corretos. Ou espere 10 minutos, colete estatísticas de suavidade de espalhamento da mudança durante este tempo, encontre o lote mínimo médio de 50 ou 100 ticks, e leve-o como média. Controle a hora de início, para que não caia no momento em que as trocas não estiverem funcionando. Se você também quer total proteção contra um tolo)

 
Valeriy Yastremskiy:

(Eu fiquei um pouco excitado). Então a lógica de acreditar que os primeiros valores estão corretos. Ou esperar 10 minutos, reunir estatísticas sobre a suavidade da mudança de propagação durante este tempo, encontrar a parcela mínima média de 50 ou 100 ticks, e tomá-la como média. Controle a hora de início, para que não caia no momento em que as trocas não estiverem funcionando. Se em plena proteção de um tolo também).

Isto deve ser evitado de alguma forma.

O algoritmo funciona, se ao menos não executarmos o Expert Advisor no rollover, e isto acontecerá o tempo todo após o fim de semana.

 
Vitaly Muzichenko:

Isto deve ser evitado de alguma forma.

O algoritmo funciona, contanto que não façamos o "Expert Advisor" em um rollover, o que acontecerá o tempo todo após o fim de semana.

Um controle, que de qualquer forma deve ser evitado, deve ser substituído por algo. O tempo entre os carrapatos. Não muito caro. e se o tempo entre os carrapatos for superior a 10 segundos, algo está errado.

 
Vitaly Muzichenko:

Isto deve ser evitado de alguma forma.

O algoritmo funciona, contanto que não façamos o "Expert Advisor" em um rollover, o que acontecerá o tempo todo após o fim de semana.

Precisamos fazer parâmetros de tempo separados para o capotamento: início/fim.
E não fazer nada nesse momento (exceto o comentário "capotamento, espere").

 
Taras Slobodyanik:

Você tem que fazer parâmetros de tempo separados para o capotamento: início/fim.
E não fazer nada nesse momento (exceto o comentário "capotamento, espere").

Havia um parâmetro "trabalho por tempo", eu mudei o negócio e comecei a negociar corujas - o negócio foi aberto no rollover.

O tempo de negociação acabou sendo de -1 gmt, ao invés dos habituais +2gmt.

É por isso que havia um grande desejo de se afastar da prescrição do tempo.

 
Vitaly Muzichenko:

Havia um parâmetro "Trabalho por tempo", eu mudei de negócio e comecei a negociar corujas - o comércio foi aberto com o rollover.

O tempo de negociação acabou sendo de -1 gmt, ao invés dos habituais +2gmt.

É por isso que eu tenho um grande desejo de me afastar da prescrição do tempo.

A substituição do "valor de tempo" pela diferença entre o tempo de entrada (novo) e o último tempo calculado funcionaria?

Ou seja, saberemos que o novo tempo chegou:

-de novo dia

-de uma nova semana

-ou com uma diferença de mais do que o especificado

 
Vitaly Muzichenko:

Havia um parâmetro "Trabalho por tempo", eu mudei de negócio e comecei a negociar corujas - o comércio foi aberto com o rollover.

O tempo de negociação acabou sendo de -1 gmt, ao invés dos habituais +2gmt.

É por isso que havia um grande desejo de se afastar da prescrição do tempo.

Faça se no início da semana "rollover, esperando" e não importa a hora do servidor
Razão: