Erros, bugs, perguntas - página 1520

 
Slawa:

Ainda não há outra forma.

Discutimos a introdução de um novo comando de saída que terminaria imediatamente o programa, mas há aqui questões não resolvidas

É uma pena. Sim, uma saída() como em C++ seria agradável. Hoje em dia, puxar a resposta das funções aninhadas para dentro da função chamadora é bastante problemático. E não existem bibliotecas universais.
 
Alexey Kozitsyn:
É uma pena. Sim, uma saída() como em C++ seria agradável. Hoje em dia, puxar a resposta das funções aninhadas para dentro da chamada é bastante problemático. E não existem bibliotecas universais.
Outra forma é criar uma função que remova todos os objectos de um programa separadamente e chamá-lo quando a condição para remover o programa do terminal for cumprida, seguida deExpertRemove(), neste caso tudo deve terminar mais rapidamente... embora não com certeza :)
 
coderex:
Em alternativa, pode criar uma função separada para apagar todos os objectos do programa e chamá-lo quando a condição para apagar o programa do terminal for cumprida, seguida deExpertRemove(), neste caso deve terminar mais rapidamente... embora não com certeza :)

Como já escrevi anteriormente, e foi sugerido anteriormente num artigo deste site, em caso de erro numa função profundamente aninhada, pode chamar divisão por 0 ou sair fora da matriz. Mas não é agradável.

Sim, e não é apenas no OOP (tanto quanto entendi, é a sério). Simplesmente - se um erro não puder ser corrigido, o programa será terminado.

 
Slawa:
Pára, mas não imediatamente
Não compreendo, é ou não correcto trabalhar com ExpertRemove() nos indicadores?
 
Alexey Kozitsyn:
Não compreendo, é correcto trabalhar com ExpertRemove() em indicadores ou não?

Penso que existe uma função para os indicadores, ou já não é relevante

ChartIndicatorDelete();
 
Alexey Kozitsyn:
Não compreendo, é correcto trabalhar com ExpertRemove() em indicadores ou não?

No. ExpertRemove() é sobreposto nos indicadores.

"Pára, mas não imediatamente" é dito sobre a ExpertRemove em geral. Esta função não interrompe o funcionamento do programa.

 
Slawa:

No. ExpertRemove() é sobreposto nos indicadores.

"Pára, mas não imediatamente" é dito sobre a ExpertRemove em geral. Esta função não interrompe o funcionamento do programa.

Em geral, existe algum plano para resolver o problema com a saída()? Ou os utilizadores resolvem-no através de muletas?)
 
Slawa:
Por favor, dê um exemplo. Dar o código fonte do indicador para ilustrar o problema
Inserir o texto no OnCalculate do indicador padrão criado no redactor. Coloque-o em qualquer gráfico. Verá o funcionamento do indicador no canto superior esquerdo da janela do gráfico. Após seleccionar "Eliminar" da lista de indicadores, não deixará de funcionar, vê-lo-á no canto superior esquerdo. Continuará mesmo depois de a janela estar fechada. Depois de abrir uma nova janela, ela continuará na nova janela. Esta janela não tem necessariamente o mesmo símbolo que a que tinha no início :)
O trabalho do indicador só pára quando o terminal está fechado. E não sei se pára ou não - só tive de remover manualmente o terminal através do Gestor de Tarefas para o reiniciar...

Ao mesmo tempo, a ajuda da função IsStopped diz que a operação do programa é interrompida após 3 segundos se houver um comando para terminar um programa mql.

   int i=0;
   while(true){
      Comment(i++);
      Sleep(100);
   }

E se while(true) for substituído por while(!IsStopped()), o indicador termina com sucesso quando removido do gráfico.

 

Uma razão engraçada para o erro interno do compilador (função utilizada no indicador):

void SaveData ( uint handle_, int wrdata_, int interv_, int dpath_, int tmode_, int tmult_, long ctime_, long& ltime_ )
{
int ierr, wrtint;
// ----
se ( interv_ > 0 ) // modo de trabalho
{
se ( MQLInfoInteger ( MQL_TESTER ) == 0 ) { wrtint = interv_; } // não tem significado
senão{ wrtint = interv_ * tmult_; } // não importa
//
se ( ( ctime_ - ltime_ ) >= ( wrtint * 60 ) // se esta linha for comentada, o erro desaparecerá
{
// algum código para guardar os dados ... não tem significado - testado
//
ltime_ = ctime_; // em geral também não importa
} // if ( ( ctime_ - ltime_ ) >= ( wrtint * 60 )
} // se ( interv_ > 0 )
// ----
regressar;

} // nulo Salvar Dados

( Desculpe, não usei o botão SRC intencionalmente, porque não consigo seleccionar as partes necessárias do texto com ele )

A cura é óbvia, mas deve concordar - é uma falha bastante engraçada. :)))

 

Uma empresa de corretagem tem uma comissão de 16x2 dólares por um volume de negócios de 1 milhão. Aparentemente, fixaram uma comissão de 16 dólares nas configurações do servidor. E agora quando os testes no seu servidor a comissão 16x2 é deduzida de cada transacção independentemente do seu tamanho de lote, ou seja, o teste adequado só pode ser feito com 10 lotes.

Será a sua falta de habilidade na configuração de servidores ou uma verdadeira limitação do MT5? O que posso aconselhá-los a fazer exactamente nos servidores, para que a comissão seja processada correctamente no testador?

Razão: