Erros, bugs, perguntas - página 1564

 
Anton Zverev:

iCustom+IndicatorRelease. Provavelmente não é uma solução de muleta para produzir entidades complexas no local. Não há discussão sobre gostos. A questão é saber quanto é que uma muleta dessas em múltiplos agentes irá desperdiçar recursos.

Bem, quase tudo é fixe em 5. A velocidade é de primeira qualidade. E aqui, desculpe, alguma pilosidade total onde não seria de esperar.

Porquê fazer um indicador de libertação?

Que envie um evento gráfico ao perito em teste em cada novo tick.

Criação de um indicador em cada tic seguido de um lançamento - é aí que se encontram os recursos desperdiçados

 
Anton Zverev:

Vasiliy mencionou que em FORTS (não no testador) o mecanismo funciona através de assinatura e BookEvent. Isto elimina a necessidade de ligar a EA a qualquer gráfico.

O BookEvent ainda não está implementado no testador
 
Slawa:

Porquê fazer uma liberação para um indicador?

Que envie um evento gráfico ao perito em teste em cada novo tick.

Criação de um indicador a cada tick e depois sua libertação - isso é um desperdício de recursos

Não sou muito bom a exprimir-me, por isso não compreende. Clique aqui para mais detalhes https://www.mql5.com/ru/code/280

E quantos recursos consome esta solução para implementar uma coisa tão simples!

Мультивалютный обработчик событий OnTick(string symbol)
Мультивалютный обработчик событий OnTick(string symbol)
  • votos: 27
  • 2011.02.01
  • Konstantin Gruzdev
  • www.mql5.com
Упрощенная реализация полноценного мультивалютного режима в MetaTrader 5. Нет необходимости вникать в то, как это работает. Минимум простых настроек. Максимум удобства для пользователей. Работает в тестере.
 
Slawa:
O BookEvent ainda não foi implementado no testador
Então, qual é a sua utilidade no testador se nem sequer funciona no mercado cambial? Vasiliy fez o que eu penso ser uma sugestão sensata acima.
 
Slawa:

E não fazer um loop por um segundo, mas por pouco menos de uma hora. Com verificação obrigatória de IsStopped()

O sono, a propósito, é obrigatório. Caso contrário, pendurará o testador. E os recursos do sistema serão devastados durante o funcionamento normal do Expert Advisor.

Nem sequer teste a sua variante

2016.04.26 19:39:05     Core 1  2016.04.25 00:16:48   infinite Sleep loop detected while testing
2016.04.26 19:39:05     Core 1  EURUSD : 2016.04.25 00:00 - 2016.04.26 00:00  1439 minute bars absent in total while real ticks present
2016.04.26 19:39:05     Core 1  EURUSD : real ticks begin from 2016.01.04 00:00:00
2016.04.26 19:39:05     Core 1    SleepPause=10
2016.04.26 19:39:05     Core 1    TimerInterval=1000

Código

sinput uint TimerInterval = 1000; // Через сколько секунд вызывать OnTimer
sinput uint SleepPause = 10;      // На сколько милисекунд делать Sleep
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   EventSetTimer(TimerInterval);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   const uint Amount=TimerInterval*1000/SleepPause;

   for(uint i=0;(i<Amount) && (!IsStopped()); i++)
      Sleep(SleepPause);
  }
//+------------------------------------------------------------------+
 
Anton Zverev:

Nem mesmo para testar a sua opção

Código

E o que estava a testar aqui?
 
Slawa:
E o que estava a testar aqui?
Executei esse código no testador. Fico pendurado com umlaço de sono infinito detectadodurante os testes.
 
Anton Zverev:
Lanço esse código no testador. Fico pendurado com olaço de sono infinito detectado durante os testes.

Já foi dito muitas vezes: "Leia a documentação".

Não disse: "Eu li toda a documentação. Várias vezes"?

Já leu isto? Parece que ainda não...

Se o tempo actual no testador exceder o fim do período de teste quando a função Sleep() for executada, obterá um erro "um loop infinito em Sleep". Se tal erro ocorrer, os resultados dos testes não são descartados, todos os cálculos são efectuados na totalidade (quantidade de negócios, levantamento, etc.) e os resultados são passados para o terminal.

 
Slawa:

Já leu isto?

Tenho-o e leio-o com muito cuidado. A questão é que se o Sleep for utilizado no OnTimer, o programador não pode determinar quando sai do intervalo de teste. IsStopped (introduzi-o imediatamente no código devido à leitura da documentação) não funciona no momento da saída. De quem é a culpa?
 
Slawa:

E sobre carraças em falta no OnTimer precisa de provas reprodutíveis. Têm-nas?

Escreveu sobre isso em documentação!

No testador, as chamadas Sleep() não atrasam o processo de teste. Ao chamar Sleep(), as carraças geradas são "tocadas" dentro do prazo especificado, em resultado do qual as ordens pendentes, param e assim por diante podem desencadear. Após a chamada Sleep(), o tempo modelado no testador é aumentado pelo intervalo especificado no parâmetro Função de Sono.

Portanto, o Conselheiro Especialista não pode ser chamado em cada um destes carrapatos. A prova é aceite?