Discussão do artigo "Que testes deve passar o robô de negociação antes da publicação no Mercado" - página 15

 

Olá.

Como posso verificar se tenho espaço suficiente em disco?


Agora esta mensagem.

Na terceira tentativa, ele passou sem fazer nenhuma alteração


 
Denis Nikolaev #:

Olá.

Como posso verificar se tenho espaço suficiente em disco?


Agora esta mensagem

Na terceira tentativa, ele foi aprovado sem que nenhuma alteração fosse feita


Nesse caso, a mensagem não está totalmente correta. O problema estava na RAM.

A memória do servidor foi adicionada.

 
Anton #:

Nesse caso, a mensagem não está totalmente correta. O problema estava na RAM.

A memória do servidor foi adicionada.

Muito obrigado.

 

Terminal MT5. Corretora RoboForex, instrumento - CFD AAPL.
Na primeira execução no testador de robôs 2021.05.05.05 16:30:00 recebi a mensagem " failed market buy 0.1 AAPL [Market closed] ", erro 4756, retcode 10018.

Dia útil - quarta-feira, horário de negociação, tick às 16:30:00 passa, por que razão o mercado está fechado - não está claro.

A verificação de mercado fechado não está na lista de verificações obrigatórias, ou seja, (teoricamente) a validação das corujas seria aprovada.
Mas!
Se, depois de receber esse erro, você não atrasar o tempo em 2 a 3 horas, ele não será aprovado - o erro crítico "Stack is full" será recebido e o testador será encerrado. Mesmo que seja aprovado, não gosto muito de erros no registro. Não deveria haver nenhum.

Analisei cuidadosamente todas as funções - não encontrei como obter o evento " Market closed ". Parece que ele não existe.
Pergunta para o autor do artigo:
- Como lidar com isso?
Se houver uma função que ajude a evitar esse erro, por favor, avise-me, ficarei grato.
Na negociação real, alguns minutos antes do fechamento do dia e de 5 a 10 minutos após o início de um novo dia, quase todas as corretoras fecham a negociação. Mas as cotações continuam. Portanto, o Expert Advisor, se abrir no mercado e houver um sinal permissivo, emite folhas de erros. É bom que essa "quebra de fumaça" não seja trabalhada no testador.

 
Vasyl Temchenko erro crítico "Stack is full" será recebido e o testador será encerrado. Mesmo que seja aprovado, não gosto muito de erros no registro. Não deveria haver nenhum.

Analisei cuidadosamente todas as funções - não encontrei como obter o evento " Market closed ". Parece que ele não existe.
Pergunta para o autor do artigo:
- Como lidar com isso?
Se houver uma função que ajude a evitar esse erro, por favor, avise-me, ficarei grato.
Na negociação real, alguns minutos antes do fechamento do dia e de 5 a 10 minutos após o início de um novo dia, quase todas as corretoras fecham a negociação. Mas as cotações continuam. Portanto, o Expert Advisor, se abrir no mercado e houver um sinal permissivo, emite folhas de erros. É bom que essa "quebra de fumaça" não seja trabalhada no testador.

As cotações aparecem, mas não há ticks. OnTick() funciona somente se houver outro tick.

 
Alexey Viktorov #:

As cotações estão chegando, mas não há ticks. OnTick() funciona somente se houver outro tique.

Para esclarecer:
- estamos falando do testador
- a abertura da sessão de CFD ocorre, via de regra, com um gap menor ou maior, mas gap, ou seja, o preço de abertura calculado pelo robô está no nível de "open yesterday"
- no primeiro tick, exatamente às 16:30:00, o robô tenta abrir uma negociação.

É aqui que acontece o problema: - exatamente às 16:30:00. o mercado ainda está fechado.. Talvez por uma fração de segundo. Mas o testador, nesse momento, está lançando uma folha de erros até que a pilha transborde. O gráfico permanece no primeiro tick.

Resolvi esse problema da seguinte forma:
- defina a distância do preço atual para o preço de abertura.
- quando ocorre um erro, eu redefino a variável do preço de abertura. Ele obtém o valor novamente, mas por 50-100 pips do preço atual.
- ocorre apenas um erro e, em seguida, ele é negociado normalmente.

Mas essa é uma solução meio que indireta. Há algumas outras opções:
- adicione o horário de abertura da sessão à barra de menu e comece a negociar com um atraso de 5 a 10 minutos
- controle o tempo entre o fechamento da primeira barra e a abertura da barra zero. Se houver uma lacuna, faça um atraso.
Nesse caso, isso ajuda a evitar muitos erros. Mas isso não resolve o "problema da meia-noite". As corretoras fecham as negociações por 10 a 15 minutos, mas as cotações ainda estão fluindo, o robô tenta negociar e gera repetidamente o erro "Market is closed".
É impossível evitar isso com as ferramentas disponíveis.
Se houvesse uma função que detectasse a disponibilidade real do mercado, não haveria problemas.


Ah, sim, sobre o OnTick. É verdade, mas...
A partir do OnTick, chamo a função Trade() apenas uma vez por minuto na abertura de uma nova barra e, mais adiante no código , em vez de retornar, tenho uma chamada repetida para Trade(), nem sempre tudo o que é necessário é executado em um único tick, ou seja, na minha variante, após abrir ou fechar uma negociação, o código rola pelo menos mais uma vez. Aparentemente, esse é o motivo pelo qual o código fica preso no erro "Market is closed" (O mercado está fechado)



 
Vasyl Temchenko #:

Para esclarecer:
- trata-se do testador
- a abertura da sessão de CFD ocorre, via de regra, com um gap menor ou maior, mas gap, ou seja, o preço de abertura calculado pelo robô está no nível de "open yesterday"
- no primeiro tick, exatamente às 16:00, o robô tenta abrir uma negociação.

Talvez seja melhor dar uma olhada na especificação?


Por que o primeiro tick às 16:00 se o horário do primeiro tick é às 16:30?

 
Alexey Viktorov #:

Não seria melhor dar uma olhada na especificação?
Por que o primeiro tique às 16:00 se a hora do primeiro tique é 16:30?

Sim, é claro que é 16:30
Obrigado por notar o erro de digitação - corrigi o texto.
Adicionei uma linha a OnTick().

   if(iTime(NULL,PERIOD_M5,0)-iTime(NULL,PERIOD_M5,1) > 360) return;  

Esse problema específico foi resolvido - coloquei um contador de erros na função de abertura de negociações e, na execução anual, não há erros.
Isso significa que são apenas essas frações de segundo (ou segundos/minutos) ao abrir uma sessão.
Mas eu ainda gostaria de ter uma função que informasse sobre a disponibilidade do mercado.

 

Gostaria de saber se as pessoas que se dão ao trabalho de superar os problemas do testador automático,

usam seus robôs?

É que, às vezes, são resolvidos erros que, na vida real, causariam pelo menos uma repreensão nas revistas.

Posso entender quando o testador automático dá dicas sobre lotes estranhos/etapas/itens/balance_in_1 cent....

...mas a coisa que o robô teve que pisar na operação normal - tentativas de fazer algo fora da sessão de negociação, ou o sinalizador trading_forbidden - é como?

Você nunca executou seu robô, exceto o testador local????

 
Tudo isso é uma experiência inestimável.
E um propósito diferente para escrever....
Para alguns, é apenas Pop It
E para outros, é um esforço....