Aprender e escrever juntos em MQL5 - página 17

 
Yedelkin:

Pergunta sobre a função Sleep(). Compreendo correctamente que a utilização desta função num Expert Advisor interrompe apenas a execução desta EA e transfere recursos da CPU (kernel) para as tarefas seguintes na lista de tarefas deste kernel? Por outras palavras, é correcto que a função Sleep() não abranda o próprio fio onde o Expert Advisor está a ser processado, mas funciona como um interruptor entre o Expert Advisor actual e outros programas captados por um kernel em particular?

Tanto quanto sei, se eu definir Sleep(0), a EA será interrompida por um número especificado de milissegundos.

Ao mesmo tempo, tanto quanto sei, cada Expert Advisor é um fio separado e cada um desses fios reclama tempo de processamento (a verificação do estado do fio é realizada a cada 100 milissegundos de acordo com a ajuda).

Assim, se um fio estiver inactivo, qualquer que seja a razão, o tempo de CPU é passado para outro fio e o estado do fio que "decidiu dormir" é verificado após 100 milissegundos.

PS

Quanto à distribuição de núcleos entre fios, cabe aos programadores.

 
Yedelkin:

Pergunta sobre a função Sleep(). Compreendo correctamente que a utilização desta função num Expert Advisor interrompe apenas a execução dessa EA, e transfere recursos da CPU (kernel) para as tarefas seguintes na lista de tarefas desse kernel? Por outras palavras, é correcto que a função Sleep() não abranda o fio em si onde o Expert Advisor está a ser processado, mas actua como um interruptor entre o Expert Advisor actual e outros programas captados por um kernel em particular?

Cada perito é executado no seu próprio fio. Sleep() abranda este fio. Não há ligação aos núcleos (máscara de afinidade).
 
Yedelkin:

Pergunta sobre a estrutura MqlTradeResult. Alguém se lembra se havia uma pergunta sobre a introdução de um campo de tempo adicional na estrutura MqlTradeResult? Necessidade de retirar uma ordem pendente se esta entrar subitamente na história.

O pedido não é claro. Se a encomenda tiver sido aberta, armazenará o tempo de abertura. Porque é que precisa do tempo de resposta do servidor?
 
sergeev:
O pedido não é claro. Se a ordem foi aberta, então armazenará o tempo de abertura. Porque é que precisa do tempo de resposta do servidor?

O destino da encomenda é seguido pelo bilhete, certo? No entanto, a devolução do bilhete pela função OrderSend() não garante o êxito da execução da operação comercial. De acordo com a lógica do programa, é suficiente verificar se o meu bilhete apareceu entre as ordens históricas e que acordos foram feitos após a sua colocação. Para isso, gostaria de carregar a quantidade mínima de histórico na cache de histórico - isto é, desde a resposta do servidor ao pedido inicial, e não mais. Não precisamos de trabalhar com as propriedades de uma ordem aberta - que seriam pedaços redundantes de código. A encomenda pode nem sequer abrir. Assim, o tempo de resposta do servidor é necessário para descarregar o tamanho óptimo (quantidade) de um novo histórico, usando a função HistorySelect(). Então, é claro que se trata de "tirar uma ordem da história"?

Tanto quanto sei, a questão da introdução de um campo temporal adicional na estrutura MqlTradeResult ainda não foi levantada.

 

Sobre Sleep() Entendi que o atraso do fio do Expert Advisor não afecta a execução de outros programas. Obrigado.

 

Outra questão sobre Dormir(). O comentário diz: "Não se pode chamar função Sleep() a partir de indicadores personalizados, uma vez queos indicadores são executados no fio da interface e não deve abrandá-la". Li o fórum, mas ainda não percebi o seguinte: a frase "não se pode chamar-lhe de indicadores" - é uma proibição predefinida ou uma recomendação ao programador?

 
Yedelkin:

O destino da encomenda é seguido pelo bilhete, certo? No entanto, a devolução do bilhete OrderSend() não garante a boa execução do negócio.

ahem.... deve dar uma vista de olhos num livro de texto sobre o envio de uma encomenda.
 
Yedelkin:

Outra questão sobre Dormir(). O comentário diz: "Não se pode chamar função Sleep() a partir de indicadores personalizados, uma vez queos indicadores são executados no fio da interface e não deve abrandá-la". Li o fórum, mas ainda não percebi o seguinte: a frase "não se pode chamar-lhe de indicadores" - é uma proibição predefinida ou uma recomendação ao programador?

proibição
 
sergeev:
xxm.... deve dar uma vista de olhos num livro de texto sobre o envio de uma encomenda.

Bem, já percebeu o ponto. Digo-lhe meticulosamente, pode verificar: a função OrderSend() devolve um valor booleano. Neste caso, se o pedido for verificado com sucesso, o bilhete de encomenda é escrito em variável da estrutura MqlResult. Chamo-lhe "função de devolução do bilhete de encomenda" para mim. Aqui está o link para a fonte:"Ao enviar um pedido de compra utilizando a função OrderSend(), pode ver imediatamente o bilhete da encomenda que foi criada se o pedido for verificado com sucesso.

Pela resposta sobre a "proibição" - obrigado, consegui-a.

 
Yedelkin:

Bem, já percebeu o ponto.

Infelizmente, ainda não percebi.

precisa de ter um campo "tempo" na estrutura de retorno por alguma razão. use o tempo na ordem que aparece. Isto é suficiente para controlar um pouco de história.

Razão: