função alternativa de sono - página 2

 
paulepanke:

tenha cuidado com tal afirmação. há sempre uma razão lógica para dormir(). em Tester e até mesmo em indicadores.

Eu não disse que não havia razão lógica para usar o sono(), há muitos, eu disse que não havia razão para esperar que o sono() funcionasse no Testador de Estratégia. Funciona em um Indicador rodando em um gráfico do Testador de Estratégia, eu não sei, talvez funcione . . funciona em uma EA rodando no Strategy Tester, tanto quanto sei, não funciona.
 
RaptorUK:
Dê uma olhada no que o TimeSeconds() lhe dá, depois pense no que o TimeCurrent() lhe dá. . de qual você precisa e por quê ?


Simon,

int TimeSeconds( data/hora)

Retorna a quantidade de segundos transcorridos desde o início do minuto para o tempo especificado.

data/hora TempoCorrente( )
Retorna o último tempo conhecido do servidor (tempo de entrada da última cotação) como número de segundos decorridos a partir de 00:00 de 1 de janeiro de 1970.


"De qual você precisa e por quê?" - Simon

Eu usaria ambos de e'm em concerto, porque eles andam de mãos dadas. - Nathan

TimeSeconds(data/hora) requer uma variável colocada dentro de seus aparelhos. O TimeCurrent() é então colocado dentro destas chaves, o que me apresenta uma solução viável. Eu fiz este b4, mas não entendi porque os valores de tempo retornados pareciam saltar e pausar (devido à falta de um tick/ticks ativo).

O que você diz a isto?


Obrigado.

 
WHRoeder:

  1. Nenhum tipo de carrapato é criado até que você retorne e ele cria o próximo e chama sua partida(). Se você computar por 5 minutos e retornar o volume (contagem de carrapatos) na próxima chamada será +1. Em um gráfico ao vivo, se você computar por 5 minutos, então você perderá 5 minutos de carrapatos e na M1 várias novas barras terão se formado.

William,

Obrigado por expor sobre este assunto.

Minha interpretação de "2." é, quando um tick é criado, a função de retorno é chamada. Em seguida, a função Start() é chamada diretamente após chamar a função return(0), que aciona a execução do programa mais uma vez. Esta interpretação desta parte do 2. está correta?


"Se você computar por 5 minutos", como posso ter certeza que a EA irá computar por 5 minutos (mesmo que a EA computar por 5 minutos, não acredito que isto garanta que um tique será criado. A probabilidade de criação de um tick é aumentada)?


Desculpe, estou tendo dificuldade para ler isto:

"Se você computar por 5 minutos e retornar o volume (contagem do tick) na próxima chamada será +1. Em um gráfico ao vivo, se você computar por 5 minutos, então você perderá 5 minutos de carrapatos e na M1 várias novas barras terão se formado".


Muito obrigado por sua resposta.

 
RaptorUK:
Eu não disse que não havia razão lógica para usar o sono(), existem muitos, eu disse que não havia razão para esperar que o sono() funcionasse no Testador de Estratégia. Funciona em um Indicador rodando em um gráfico do Testador de Estratégia, eu não sei, talvez funcione . . funciona em uma EA rodando no Strategy Tester, tanto quanto sei, não funciona.

Simon,

"Um EA em execução no Testador de Estratégia pode ser feito para fazer uma pausa? sim, pode".

Você poderia, por favor, expressar suas idéias a respeito deste método que você usaria para "pausar" um EA no testador?


Obrigado

 
  1. A EA retorna do início() de volta ao testador. O testador cria o próximo tick e chama o início(). Se a EA não retornar, não haverá próximo tick. Não importa quanto tempo o início() leva para retornar. O próximo tick é criado quando ele retornar.
  2. Você não pode pausar ou dormir no EA no testador. Você pode programar o botão de pausa para pausar o testador após o EA retornar desde o início.
 

William,

Então, um novo tick chama a função start() em um EA, sim?

Minha pergunta para você é esta: "Você conhece alguma outra forma de chamar a função start() além da função de um novo tick? Possivelmente uma ação repetitiva consistente para substituir uma chamada para Iniciar()"?

(Estou pensando, existe alguma maneira de rastrear segundos consistentes que não dependam de carrapatos)


"...O próximo tick é criado quando o faz".

Creio que o que você quis escrever foi: "Na criação de um novo tick, Start() é então executado" ;)


Então, você diz que um EA não pode ser pausado ou dormir no testador, sim?


Vou revisar o link que você forneceu, mas, nesse meio tempo, você pode explicar sobre este método de "pressionar um botão de pausa para pausar o testador" após um EA sendo testado retornar desde o início?

Quando executado no testador, este método simularia o desempenho do EA sendo pausado por um segmento de tempo decidido em "tempo real" em uma conta real?


Entendo que o testador tem limitações e as "soluções de trabalho" devem ser usadas para a simulação do desempenho em "tempo real".


Muita gratidão William.


Além disso, você se importa se eu simplesmente chamá-lo Will? Isso me pouparia um segundo de tempo a cada mensagem. Seu telefonema.

Eu gosto de uma característica que sua EA possui e que é: "Eu queria fechar todas as ordens antes do final da semana (o mercado fecha na sexta-feira,) para evitar perdas caso a lacuna do mercado acabe no final da semana, passando o SL".

(batendo palmas com alegria.) Hahaha! ;) Ao acrescentar esta característica ao seu EA, você corta perdas desnecessárias, mas isto é diferente do que eu tento fazer atualmente. Atualmente, estou tentando rastrear segundos de tempo consistentemente sem a necessidade de carrapatos para atualizar os segundos. Desejo um meio diferente para atualizar a função Start(), Entendido?


Obrigado.

 
WhooDoo22:

Atualmente estou tentando rastrear segundos de tempo de forma consistente sem a necessidade de carrapatos para atualizar os segundos. Desejo um meio diferente para atualizar a função Start(), Entendido?

Suspeito que o que você está tentando fazer é uma solução falha para seu problema devido à falta de compreensão. Por que você precisa saber o segundo de um segundo para o outro se o preço não mudou por 30 segundos ? quando o preço muda você recebe um tique.

Um ponto de esclarecimento do que oWHRoeder disse, todos os carrapatos são criados antes do Tester de Estratégia começar a chamá-los/executá-los, eles são salvos para um .fxt no testador/histórico, o ST chama um primeiro tique e este, por sua vez, faz com que o início() seja executado, o próximo tique não é chamado/utilizado até que o início() tenha terminado a execução, é muito importante entender isto. Somente quando start() tiver terminado, o próximo tick será usado para que a EA possa chamar start() novamente. Quando o ST é executado em velocidade máxima, é a velocidade em que o start() funciona que governa a velocidade do ST, portanto, uma função start() muito simples permitirá que o ST funcione muito rapidamente, uma função start() complexa fará com que o ST funcione mais lentamente.

Em uma situação de Live/Demo, se a função start() for muito complexa e demorar muito tempo para funcionar, talvez alguns décimos de segundo, é possível que o próximo tick possa chegar antes do start() estar concluído, nesta situação o tick será perdido e não fará com que o start() seja chamado de . . . . este NÃO PODE acontecer com o ST.

 
WhooDoo22:

Simon,

"Um EA em execução no Testador de Estratégia pode ser feito para fazer uma pausa? sim, pode".

Você poderia, por favor, expressar suas idéias a respeito deste método que você usaria para "pausar" um EA no testador?

Claro, não é muito elegante, então eu não sugeriria que ninguém a usasse. Eu usei um conjunto GlobalVariable definido e desajustado por um script, quando a EA no ST viu que a GlobalVariable estava definida, ela se sentava em um loop continuamente verificando se a GlobalVariable estava desajustada, quando o script tinha desajustado a GlobalVariable a EA saía do loop e sua função de início() podia terminar.
 
WhooDoo22:

"Qual você precisa e por quê?" - Simon

Eu usaria ambos de e'm em concerto, porque eles andam de mãos dadas. - Nathan

TimeSeconds(data/hora) requer uma variável colocada dentro de seus aparelhos. O TimeCurrent() é então colocado dentro destas chaves, o que me apresenta uma solução viável. Eu fiz este b4, mas não entendi porque os valores de tempo devolvidos pareciam saltar e pausar (devido à falta de um tick/ticks ativo).

Vamos supor que você tem 2 eventos e estes eventos estão separados por 10 segundos, qual será a diferença entre os valores retornados porTimeSeconds(datetime time) para estes 2 eventos ?
 
RaptorUK:

Suspeito que o que você está tentando fazer é uma solução falha para seu problema devido à falta de compreensão. Por que você precisa saber o segundo de um segundo para o outro se o preço não mudou por 30 segundos ? quando o preço muda você recebe um tique.

Um ponto de esclarecimento do que oWHRoeder disse, todos os carrapatos são criados antes do Tester de Estratégia começar a chamá-los/executá-los, eles são salvos para um .fxt no testador/histórico, o ST chama um primeiro tick e este, por sua vez, faz com que o start() seja executado, o próximo tick não é chamado/usado até que o start() tenha terminado a execução, é muito importante entender isto. Somente quando start() tiver terminado, o próximo tick será usado para que a EA possa chamar start() novamente. Quando o ST é executado em velocidade máxima, é a velocidade em que o start() funciona que governa a velocidade do ST, portanto, uma função start() muito simples permitirá que o ST funcione muito rapidamente, uma função start() complexa fará com que o ST funcione mais lentamente.

Em uma situação de Live/Demo, se a função start() for muito complexa e demorar muito tempo para funcionar, talvez alguns décimos de segundo, é possível que o próximo tick possa chegar antes do start() estar concluído, nesta situação o tick será perdido e não fará com que o start() seja chamado de . . . . este NÃO PODE acontecer com o ST.

Simon,

Suspeito que o que você está tentando fazer é uma solução falha para seu problema devido à falta de compreensão. Por que você precisa saber o segundo de um segundo para o outro se o preço não mudou por 30 segundos ? quando o preço muda você recebe um tique.

Admito que tenho uma falta de compreensão, é por isso que estou discutindo o tópico no fórum da MQL4. Desejo economizar sempre que mudar (eu entendo como fazer isso). Além disso, entendo como economizar preços a cada segundo de forma consistente em um gráfico LIVE/DEMO usando Sleep(). Objetivo: Desejo rastrear segundos de forma consistente (sem rastrear segundos com base na criação de ticks) até o máximo de um minuto ou menos, e depois redefinir os segundos rastreados para zero. Eu entendo porque desejo atingir este objetivo. Sendo assim, preciso testar um EA no testador e não posso usar Sleep() enquanto estiver testando. O que fazer corretamente? Opções de coleta.

Detalhes então hm? ;)

Codifique um temporizador (utilizável no testador) para um EA. Este temporizador conta de 0-30 ou de 30-0 para cima. Enquanto este tempo está contando para cima/para baixo, tenho uma ação de rastreamento de preço vetorial separada (um vetor de tamanho muito grande).

Minhas condições são tais,

Se o preço viaja x pontos (dentro de 0-30 ou 30-0 segundos), tome uma decisão.

Se o preço não viaja x pontos (dentro de 0-30 ou 30-0 segundos), ArrayInitialize().


O que você diz a este Simon?


Obrigado.
Razão: