Erros, bugs, perguntas - página 1313

 
Konstantin Karpov:
Como determinar em tempo de compilação que modo de bits é o terminal? O identificador TERMINAL_X64 não se ajusta, uma vez que se destina a funções. Muito provavelmente, existem macros que não são mencionadas na ajuda, mas ocasionalmente aparecem de uma forma ou de outra :)
Infelizmente, não o fazem. Há uma variável _IsX64 mas funciona em tempo de execução.
 

Como posso deixar de usar dois dlls, um para terminais de 32 bit e outro para terminais de 64 bit? Não é kasher guardar duas cópias do programa...

A propósito, quem tem experiência, se compilar código em ME x64, ele funcionará em terminais de 32 bits sem erros ou haverá algumas características ocultas de execução de código?

 

Por exemplo, existe a função funcTest(...) na biblioteca para terminais de 32-bit library_x86.dll e para terminais de 64-bit library_x64.dll.

Se a importação for visível em todo o ficheiro, é correcto escrever uma tal construção:

void CClass::Test(...) {
  код метода...

   if(TerminalInfoInteger(TERMINAL_X64)) {
      #import  library_x64.dll
         library_x64::funcTest(...);
      #import
   } else {
      #import  library_x86.dll
         library_x86::funcTest(...);
      #import
   }

   код метода...
}
ou será que este truque não funcionará?
 
Konstantin Karpov:
Ou este truque não vai funcionar?

Tanto quanto sei, não. Pode importar ambas as dlls e chamar as funções de uma ou de outra, dependendo da taxa de bits do terminal.

Em geral, a divisão em duas versões por bit rate não é uma opção tão ilusória.

 

Tomo um indicador (qualquer um dos conjuntos padrão), chamo-o no Expert Advisor:

iCustom (NULL, 0, "Momentum", 0, 1);

Depois de executar a EA com visualização no testador - tudo funciona, o indicador é desenhado.

Agora mudo uma linha no indicador

ExtMomBuffer[i]=close[i]*100/close[i-InpMomPeriod];

a esta linha:

ExtMomBuffer[i]=100;

E agora o indicador não desenha absolutamente nada - mesmo uma escala vertical não está marcada.

Onde está o erro? MetaTrader 4 construir 765.

 
Precisa de dois valores diferentes dentro da janela para fazer aparecer a escala? EMNIP. Não tenho a certeza se isto pode ser considerado um insecto.
 

OK, vamos chamar-lhe comportamento não convencional :)

Muito obrigado, mas tenho mais uma pergunta. Sim, funcionou desta forma:

ExtMomBuffer[i]=i%2;

E foi assim que deixou de funcionar novamente:

ExtMomBuffer[0]=i%2;

Tinha-o a funcionar nas versões antigas de MT, o que há de errado com as novas versões?

 

Assim, na segunda versão há um valor.

Na verdade, posso estar enganado.

 

Bem, pode fazê-lo assim, ainda não funciona:

ExtMomBuffer[0]=cnt++;

O cerne do problema é que tentar escrever para a barra 0 do indicador em cada passo da EA - não faz nada.

 

Penso ter encontrado onde escavar. Alterado

ArraySetAsSeries(ExtMomBuffer,false);

a verdade e algo começa a aparecer. Vou-me embebedar.