Qualquer pergunta de um PROFI para um SUPER PROFI - 1. - página 43

 
fxsaber:

Eu não entendo. Se algo mudou no banco de dados, a única maneira de descobrir é compará-lo com o estado anterior do banco de dados.

Você pode comparar cada item correspondente do banco de dados. Ou você pode calcular o hash a partir deles e comparar os hashes.

O terminal já sabe desta mudança (OnTrade). É por isso que eu quero saber sobre isso em minha função.

 
fxsaber:

Especialmente relevante para o MT4, onde a mudança de etapa time_msc é de 1000ms.

Pena, isso torna impossível usar a opção mais simples que eu conheço no momento.

 
Andrey Khatimlianskii:

O terminal já sabe desta mudança(OnTrade). É por isso que eu quero saber sobre isso em minha função.

Não há nenhum evento comercial no MT4.

 
fxsaber:

O evento comercial não é na MT4.

Apenas não foi encaminhada para a MKL. O terminal não atualiza a lista de negociações em um temporizador.

 
Andrey Khatimlianskii:

Apenas não foi ligado ao MCL. O terminal não atualiza a lista de negociações em um temporizador.

Portanto, somente através de verificação.

 
Andrey Khatimlianskii:

1. Qual é a maneira mais barata de saber que a chamada de função está no mesmo tique que a chamada anterior?

O tempo (TimeCurrent) pode permanecer o mesmo, tempo em ms de SymbolInfoTick, teoricamente também.

Comparar a licitação, perguntar e ms vezes é bastante caro.

Não sugiro organizar o controle no próprio Expert Advisor, eu quero ter uma função universal independente.


A mesma questão diz respeito às operações comerciais. Como sabemos que algo mudou na lista de pedidos/posições (incluindo os níveis abertos, SL e TP) desde a última execução?

Eu precisaria colocar alguma bandeira no OnTrade (e reinicializá-la quando pronta).

Mas, mais uma vez, eu gostaria de uma solução universal.


Quem tem alguma idéia?

Certo:

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   int count = 0;
   if ( A ) some_func( count );
   if ( B ) some_func( count );
   if ( C ) some_func( count );
}
//+------------------------------------------------------------------+
void some_func( int& count )
{
   if( count++ > 0 )
      return;
      
   // recalculate only once on each tick
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

Certo:

Obrigado.

Andrey Khatimlianskii:

Eu não sugiro a opção de organizar o controle na própria EA, eu só quero ter uma função universal independente.

 
Andrey Khatimlianskii:

Obrigado.

Como ainda não foi sugerido, vou lhe dar uma idéia de onde eu cavaria, verificar a hora da última PostMessage ou algo parecido, provavelmente sem sentido, não sou tão versado em Api.

 
Aleksey Mavrin:

Verificar a hora da última PostMessage ou algo parecido é provavelmente um disparate, não sei muito sobre a Api.

Sim, parece um disparate)

Obrigado por tentar.

 
Andrey Khatimlianskii:

Irrealista sem controle na própria EA.

Não só isso, não é necessário. A função solicitada será chamada na EA, ou seja, é essencialmente o mesmo controle na EA, só que menos invasivo.