Erros, bugs, perguntas - página 921

 
sergeev:

- O corretor apoia a definição de uma ordem com tempo?

Para o fazer, prima F9 e verifique se a hora pode ser definida.


Tudo funciona aqui, ou seja, todas as ordens pendentes são executadas sem erros.
 
Olá, tenho esta pergunta - comprei um EA instalado no meu computador, depois encomendei um servidor VPS e instalei o mesmo EA. No final recusei o servidor alugado porque o corretor tem um serviço gratuito, mas não posso instalar o Expert Advisor pela terceira vez (em três hardware). O que é que posso fazer? Posso desistir de um servidor por outro? Para onde ir? Obrigado!
 

Duas perguntas sobre como trabalhar com ficheiros.

1. Existe um ficheiro de texto contendo cordas em várias línguas (incluindo japonês, árabe, etc.). Consequentemente, a codificação do ficheiro é UTF8. Os dados no ficheiro são escritos como "Alias=Translation", onde o pseudónimo está sempre em inglês e a tradução é em qualquer outra língua. Eu tinha a certeza que FILE_UNICODE deveria ser utilizado durante a leitura. Mas se se abrir o ficheiro desta forma:

int fileHandle = FileOpen(fileName, FILE_READ|FILE_TXT|FILE_UNICODE, 0, CP_UTF8);

obtemos um conjunto de hieróglifos sem sentido ao lermos as cordas. Mas se a abrir assim:

int fileHandle = FileOpen(fileName, FILE_READ|FILE_TXT|FILE_ANSI, 0, CP_UTF8);

depois lê e posteriormente produz normalmente (verifiquei em inglês, russo, ucraniano, japonês, árabe).

Pergunta: porque precisamos de usar a bandeira FILE_ANSI? Afinal, ANSI é para caracteres de byte único e codificação de caracteres unicode UTF8...


2. Há uma classe que tem um método deste tipo:

string CTranslator::getTranslate(string str) {
//---
   int fileHandle = FileOpen(filename, FILE_READ|FILE_TXT|FILE_ANSI, 0, CP_UTF8);
   
   if ( fileHandle == INVALID_HANDLE ) {
      return(str);
   }
//---
   string temp, alias, traslation;
   int delimiterPos;
      
   for ( ; !FileIsEnding(fileHandle); ) {
      temp = FileReadString(fileHandle);
      delimiterPos = StringFind(temp, "=");
      alias = StringSubstr(temp, 0, delimiterPos);
      
      if ( StringCompare(str, alias, false) == 0 ) {
         traslation = StringSubstr(temp, delimiterPos+1);
          
         return(traslation);
      }   
   }
   FileClose(fileHandle);
//---
   return(str);
}

O nome do ficheiro é uma propriedade e é-lhe dado um valor quando se inicializa um objecto. Ou seja, quando chamamos o método, abrimos o ficheiro, lemos linha a linha, e assim que encontramos a corda correspondente, devolvemos o seu substrato. Se o ficheiro não for aberto ou se não houver uma corda correspondente, devolvemos a corda que foi alimentada à entrada.

Se chamarmos o método uma vez, tudo funciona. Mas se telefonar várias vezes seguidas - funciona apenas na primeira vez, enquanto a segunda e subsequentes tentativas de abrir o ficheiro - INVALID_HANDLE (verificado com impressão). Qual poderá ser o problema?

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Rone:

2. Há uma classe que tem este método:

O nome do ficheiro é uma propriedade e é-lhe atribuído um valor durante a inicialização do objecto. Ou seja, quando o método é chamado, abrimos o ficheiro, lemos linha a linha, e assim que encontramos uma linha adequada, devolvemos o seu substrato. Se o ficheiro não for aberto ou se não houver uma corda correspondente, devolvemos a corda que foi alimentada à entrada.

Se chamarmos o método uma vez, tudo funciona. Mas se telefonar várias vezes seguidas - funciona apenas na primeira vez, enquanto a segunda e subsequentes tentativas de abrir o ficheiro - INVALID_HANDLE (verificado com impressão). Qual poderá ser o problema?

Esta pode ser a razão:

      if ( StringCompare(str, alias, false) == 0 ) {
         traslation = StringSubstr(temp, delimiterPos+1);
          
         return(traslation);
      }   
 
Rone:

...

2. Há uma classe que tem um método como este:

O nome do ficheiro é uma propriedade e é atribuído um valor quando o objecto é inicializado. Ou seja, quando o método é chamado, abrimos o ficheiro, lemos linha a linha, e assim que encontramos uma linha adequada, devolvemos o seu substrato. Se o ficheiro não for aberto ou se não houver uma corda correspondente, devolvemos a corda que foi alimentada à entrada.

Se chamarmos o método uma vez, tudo funciona. Mas se telefonar várias vezes seguidas - funciona apenas na primeira vez, enquanto a segunda e subsequentes tentativas de abrir o ficheiro - INVALID_HANDLE (verificado com impressão). Qual poderá ser o problema?

Talvez porque se "devolver a string que foi alimentada à entrada" o ficheiro não é fechado?
 

talvez funcione lá

Mas será que a sua empresa de corretagem tem uma opção de data?

 
Contender:

Talvez seja essa a razão:

...

portagem64

...


Obrigado pelas respostas rápidas!

Desculpem, não o vi, saí para fumar e fui buscá-lo.

Aqui está:

      if ( StringCompare(str, alias, false) == 0 ) {
         traslation = StringSubstr(temp, delimiterPos+1);
         FileClose(fileHandle);

         return(traslation);
      }

Está a funcionar agora. Mas a primeira questão continua de pé.

 
sergeev:

talvez seja aí que funciona.

mas será que a sua empresa de corretagem tem uma opção de data?

Não ouço nada claro do meu corretor há uma semana ... rrrrrrr....

 
Rone:


Obrigado pelas suas respostas rápidas!

Desculpem, não o vi, saí para fumar e fui buscá-lo.

Aqui está:

Está a funcionar agora. Mas a primeira questão continua de pé.

Sobre a primeira pergunta.

Se o ficheiro for aberto como unicode, nenhuma conversão é feita (isto é, o seu CP_UTF8 é simplesmente ignorado), os dados são lidos "tal como estão".

A página de código funciona ao converter para texto Unicode interno ( dados do tipo string) ao ler a partir de um ficheiro de texto aberto em modo ANSI.

 
Nikos52:

Já há uma semana que não ouço nada claro do meu corretor... rrrrrr....


o F9 do seu terminal de corretagem está avariado?
Razão: