Erros, bugs, perguntas - página 1547

 
Комбинатор:
Agora preste atenção à questão - como fazer o terminal redesenhar imediatamente os dados que foram calculados desta forma?

Extrai dados de amortecedores que não estão na OnCalculate

OnCalculate tem um tempo mínimo de sorteio de 1 minuto

Indicadores de carrapato desenham cada carrapato

 
comp:
Parece que não.

O ChartRedraw fará 100% do trabalho em quatro, no entanto.

E acabou por ficar bem em cinco também.

Assim, o ChartRedraw funcionará bem em ambas as plataformas.

 

Quando CHARTEVENT_CHART_CHANGE chega, faço um cálculo que por vezes dura um segundo/evento. Se durante o cálculo, por exemplo, um gráfico é movido, então após o cálculo CHARTEVENT_CHART_CHANGE é chamado novamente da fila.

É possível saber durante o cálculo que existe algo na fila de eventos? Então não poderia fazer um cálculo que já não é relevante, interrompê-lo e iniciar um novo cálculo?

Por exemplo, se mesmo uma parte de cálculo muito pesada tiver uma verificação para IsStopped(), então o fecho do Expert Advisor seria instantâneo, sem esperar pelo cálculo.

Aqui seria algo semelhante, mas não com o evento de encerramento, mas com ChartEvent.

 
comp:

Quando CHARTEVENT_CHART_CHANGE chega, faço um cálculo que por vezes dura um segundo/evento. Se durante o cálculo, por exemplo, um gráfico é movido, então após o cálculo CHARTEVENT_CHART_CHANGE é chamado novamente da fila.

É possível saber durante o cálculo que existe algo na fila de eventos? Então não poderia fazer um cálculo que já não é relevante, interrompê-lo e iniciar um novo cálculo?

Por exemplo, se mesmo uma parte de cálculo muito pesada tiver uma verificação para IsStopped(), então o fecho do Expert Advisor seria instantâneo, sem esperar pelo cálculo.

Aqui seria algo semelhante, mas não com o evento de encerramento, mas com ChartEvent.


fazer um segundo fio de processamento (sob a forma de um temporizador ms, por exemplo)

e exactamente ali para efectuar o cálculo, desde que a bandeira do contador==XXX esteja definida, incrementada em CHARTEVENT_CHART_CHANGE.

Assim, rapidamente vai buscar toda a fila ChartEvent, coloca uma bandeira e, em paralelo com esta, o temporizador verifica esta bandeira e calcula-a.

---

No mesmo temporizador, verificar o valor do contador de bandeiras. É possível parar o cálculo se o valor actual do contador for superior ao valor em que o cálculo foi iniciado. Assim, é como IsNewChanged

 
o_O:

por isso, agarra toda a fila ChartEvent muito rapidamente, coloca uma bandeira, e em paralelo o temporizador puxa essa bandeira e calcula-a.

Está a dizer que os eventos ChartEvent e Timer decorrem em paralelo?
 

O Service Desk fez esta declaração

SetIndexBuffer делается однократно на вызове OnInit

Alguém usa SetIndexBuffer não no OnInit e/ou repetidamente? No MT4 utilizo-o a toda a hora. Em MT5 não se pode fazer isto, infelizmente.

 
comp:
Está a dizer que os eventos ChartEvent e Timer decorrem em paralelo?

mesmo que sejam executados sequencialmente - não está impedido de utilizar pelo menos isto.

retira instantaneamente todo o ChartEvent e coloca apenas uma encomenda.

---

sobre o paralelismo do temporizador e dos eventos gráficos é uma questão pertinente.

Pergunte ao servicedesk.

 
o_O:

mesmo que sejam executados sequencialmente - não está impedido de utilizar pelo menos isto.

retira instantaneamente todo o ChartEvent e coloca apenas uma encomenda.

---

sobre o paralelismo do temporizador e dos eventos gráficos é uma questão pertinente.

Pergunte no balcão de serviço.

Ninguém lê a documentação...

O terminal do cliente envia os eventos gerados para os gráficos abertos correspondentes. Também os eventos podem ser gerados por gráficos (eventos de gráficos) ou programas mql5 (eventos personalizados). A geração de eventos de criação e eliminação de objectos gráficos num gráfico pode ser activada ou desactivada através da definição das propriedades CHART_EVENT_OBJECT_CREATE e CHART_EVENT_OBJECT_DELETE de um gráfico. Cada programa de mql5 e cada gráfico tem a sua própria fila de eventos, onde todos os novos eventos são armazenados.

O programa recebe eventos apenas do gráfico, no qual está a decorrer. Todos os eventos são processados um a um na ordem de recepção. Se já houver um evento NewTick na fila ou se este evento estiver no estado de processamento, um novo evento NewTick não é colocado na fila do programa mql5. Da mesma forma, se a fila do programa mql5 já contém o evento ChartEvent ou se tal evento estiver a ser processado, um novo evento deste tipo não será enfileirado. Os eventos Temporizador são tratados de acordo com o mesmo esquema - se houver um evento Temporizador na fila ou se o evento Temporizador já for tratado, um novo evento Temporizador não é colocado na fila.

 
Slawa:

Ninguém lê a documentação...

Então não há maneira de fazer uma interrupção de cálculo baseada em eventos.
 
Slawa:

Ninguém lê a documentação...

Já lá vai muito tempo