Temporizador - página 2

 
TheXpert:

Só mais uma coisa... Vocês não são irmãos, pois não?

O que não significa que não haja um. Todos nós temos tarefas diferentes.

Aqui vamos nós... Podemos ler? Mostre-me como se faz para os induques.


  1. Acho que não, nem sequer sei quem é :D
  2. Bem, honestamente não encontrei tal tarefa, pois as minhas tarefas - quanto mais depressa contar, melhor.
  3. Desculpe, dei uma vista de olhos))). Não se entrou realmente em que fios - o que se passa. Não sei, nunca vi tal coisa. Por isso, depende da tarefa, na verdade, se eu apenas executar um guião aleatório que irá bater num indicador.
Ou, alternativamente, poderia simplesmente enfiar todos os cálculos e tudo num fio separado num dll - mas isso soa a uma perversão.
 

Interesting:

... O processamento do temporizador não pode ser chamado até que o processamento do temporizador anterior esteja concluído. Ou, dito de forma simples, OnTimer() não conseguirá a execução correcta até o fio que deve processar o temporizador estar ocupado.

Para ilustrar a impossibilidade de iniciar o processamento do temporizador pelo segundo fio, pode utilizar este exemplo (estúpido mas claro):

int OnInit()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
EventSetTimer(1);
//----------------------------------------------------------------------------//
return(0);
//----------------------------------------------------------------------------//
}

void OnTimer()
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//
Print(TimeLocal());
Sleep(2000);
//----------------------------------------------------------------------------//
}
Então, acontece que os eventosTemporizador podem ser ignorados, bem como os eventosNewTick? E sob certas condições, não podem ser colocados na fila de eventos do Expert Advisor?
 
Yedelkin:
Então, acontece que os eventosTemporizador podem ser ignorados da mesma forma que os eventosNewTick? E, sob certas condições, pode ser excluído da fila de eventos do Expert Advisor?
O evento NewTick é uma excepção neste caso. Não há verificações para outros tipos de eventos. Se os manipuladores de eventos correrem mais devagar do que a fila de eventos preenche, a fila transbordará e alguns eventos serão ignorados. Quanto ao exemplo acima, apenas confirma que a EA tem um único fio de execução e que o tratamento de eventos é realizado sequencialmente, pela ordem em que os eventos são enfileirados.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
antt:
O evento NewTick é uma excepção neste caso. Não há verificações para outros tipos de eventos. Se os manipuladores do evento forem mais lentos do que a fila de eventos preenche, a fila transbordará e alguns eventos serão ignorados. Quanto ao exemplo acima, apenas confirma que a EA tem um único fio de execução e que o tratamento de eventos é realizado sequencialmente, pela ordem em que os eventos são enfileirados.

Óptimo, obrigado pelas explicações! Lógico e compreensível, não há necessidade de especular

Interessante, a sua pergunta sobre multithreading de eventos tem uma espécie de resposta. E até adivinhei sobre o OnTimer :)

 
Yedelkin:
Então, acontece que os eventosTemporizador podem ser ignorados da mesma forma que os eventosNewTick? E sob certas condições, não podem ser colocados em fila de espera nos eventos do Expert Advisor?

Tanto quanto sei, é algo parecido com isto:

1. todos os eventos são colocados na mesma fila de espera. Se houver um evento NewTick na fila ou se tal evento for tratado, então o NewTick é ignorado e não é enfileirado.

2. O programador escolhe quais os eventos a tratar. Os manipuladores para OnTrade, OnTimer e OnTick são básicos e frequentemente utilizados em Expert Advisors.

3. Durante o processamento de um evento, outros não podem ser processados.

4. se a pilha de eventos transbordar, os eventos antigos são removidos da fila sem processamento.

5. Dos três tipos de eventos acima referidos, o Comércio será gerado com menos frequência, e o NewTick será gerado com mais frequência (mas as carraças, como descrito acima, podem não ser incluídas na fila de espera).

6. O manipulador mais interessante deste ponto de vista é o OnChartEvent, que trata todos os eventos a partir do gráfico + eventos personalizados.

E apenas um grande número destes eventos pode facilmente transbordar a fila de eventos (no caso de haver muitos desses eventos).

Na minha opinião, a única graça salvadora nesta situação é que os eventos OnChartEvent são gerados de forma aleatória e assíncrona.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 

Yedelkin:

Interessante, a sua pergunta sobre o tratamento de eventos com vários fios parece ser respondida. E até adivinhei sobre o OnTimer :)

Em princípio, não tive dúvidas sobre um único fio, tanto mais que o código no próprio Expert Advisor é executado num único fio.

E o que descrevi é uma espécie de sonho sobre o futuro (digamos, sobre MT6), quando haverá multi-tarefas em MT (pelo menos até que o fluxo do evento não seja separado por alguma razão).

Eu teria originalmente separado pelo menos todos os eventos ChartEvent num fio separado, mas os programadores sabem melhor...

 

Existe alguma forma de conseguir que a EA gere eventos temporais num momento específico? Por exemplo, no início do último minuto da hora ou do dia.

 
Yedelkin:

Existe alguma forma de conseguir que a EA gere eventos temporais num momento específico? Por exemplo, no início do último minuto da hora ou do dia.

Claro.
 
TheXpert:
Claro.
Como é que é (método), se não é um segredo?
 
Yedelkin:
Qual é o seu aspecto (método), se não um segredo?

Usando o gestor do temporizador. Queria escrever um artigo, mas depois, de alguma forma, fui desviado. Embora possa não se parecer com um artigo.

Um tempo específico não funcionará devido à natureza de um só fio do código e da fila de eventos, mas com um erro médio de menos de um segundo (o máximo é limitado pelo tempo máximo de execução do evento pelo código).

Além disso, existe apenas um temporizador.

Devo?