Erros, bugs, perguntas - página 1405

 
Tapochun:
Pode dizer-me, por favor, que valores de spread são passados para spread[] array quando OnCalculate() é chamado no indicador? Valores máximos/mínimos/ médios por vela?
Aqueles que o terminal recebe do servidor.
 

Surgiu uma questão sobre a ordem em que o .dll é carregado. Se declarado

#import "Test1.dll" //1
#import "Test2.dll" //2
#import

serão carregados em ordem inversa, ou seja, "Test2.dll" primeiro. Parece que não faz qualquer diferença. Verificou-se que faz a diferença e em alguns casos (.dll requer uma certa ordem de carregamento) falha: Carga de Sappot 'Test1.dll'.
A questão
é se se deve alterar a ordem de carga para dirigir, o que, na perspectiva do código, seria mais lógico - ou assegurar que esta ordem não será alterada no futuro (para que o código ajustado à ordem inversa não deixe de funcionar subitamente). Neste momento, precisamos de ajustar o código à ordem inversa.

 

Construir 1191. Erro de compilação: erro de geração de código


Nem sequer sei onde procurar a razão. Mas na construção 1162 está tudo bem.

 
A100:

Construir 1191. Erro de compilação: erro de geração de código


Nem sequer sei onde procurar a razão. Mas na construção 1162 está tudo bem.

Favor enviar o código para Servicedesk.
 
Alexander:
Favor enviar o código para Servicedesk.

Está fortemente distribuído - tentarei colocá-lo todo num só ficheiro.

Outro código - repare no tempo - é provavelmente 20 vezes maior

 
Ilyas:

Dois casos são conhecidos até à data:
1) Em bool &= operação (bool expression)
2) Uma vírgula extra na inicialização das sequências: val={{...},{...}, }

Aqui está o primeiro caso - tenho muitas operações deste tipo no meu código. Não tive problemas antes quando tive o 1159 construído. Quando podemos esperar correcções?

 

Erro de geração de código

Enviei o código fonte para Servicedesk: #1332553

 
Alexander:
Favor enviar o código para Servicedesk.

erro de geração de código


//build 1191
class A {};
class B : public A {};
void f( A& a ) {}
B *h() { return new B; }
void OnStart()
{
        f( h() );
}

Por favor, tenha cuidado para não acabar como eu descrevi no bolso. Se o puder fazer sem * como funciona agora e funcionou antes no exemplo seguinte

//build 1191
class A {};
void f( A& a ) {}
A *h() { return new A; }
void OnStart()
{
        f(  h() ); //нормально
        f( *h() ); //нормально
}
por favor faça, se não - talvez faça sentido voltar tudo atrás antes de começar a usar a inovação

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Insectos, insectos, perguntas

A100, 2015.08.26 10:35

Na verdade, está a oferecer uma entrada simples e directa

a = (b + c) - d*e + f;
substituir por
*a = (*b + *c) - *d**e + *f;
E isto é para quê? Para que possa escrever
bool c = *a == *b;

enquanto uma função especial pode ser usada para comparar apontadores com a igualdade, e todas as outras operações aritméticas (adição, subtracção, multiplicação, etc.) com apontadores não têm significado per se, e são interessantes apenas em termos de ser capaz de os sobrecarregar.

Apenas criando uma base matemática e classe derivada, redefinindo várias (em vez de uma ou duas) operações aritméticas, tornando-as virtuais e depois testando expressões complexas (não apenas a = b + c) na sua base - apenas isto o aproximará da compreensão de que tudo é agora OPTIMALMENTE feito. Entretanto, está a raciocinar a um nível de entrada.

Se levarmos a comparação de ponteiro de igualdade numa função separada, ficamos apenas com um(!) gargalo de estrangulamento

class A {};

A *a = b; //однозначно присвоение указателю значения
a = b;    //неоднозначно
que no entanto também deve ser tratada como uma atribuição e não como uma chamada de operador=(), porque actualmente não existe outra sintaxe para atribuir um valor a um ponteiro, enquanto a.operator=( b ) também pode ser chamada explicitamente
 
A100:


Outro código - preste atenção ao tempo - deve ter crescido 20 vezes

Este é um novo compilador optimizador para MQL5 (MQL4 não o tem).

Tem de pagar por um melhor código alvo com um tempo de compilação mais longo. Algumas funções longas que consistem em centenas de linhas são muito difíceis de optimizar.

 
Renat Fatkhullin:

É assim que funciona o novo compilador de optimização para MQL5 (está ausente em MQL4).

Para um melhor código alvo tem de pagar por um tempo de compilação mais longo. Algumas funções longas que consistem em centenas de linhas, é muito teimosamente optimizadora.

Será realmente necessário? O preço deste "código de alta qualidade" não é demasiado elevado? Para abrandar a velocidade de compilação dezenas de vezes em prol de um ganho de desempenho relativamente pequeno... Tanto mais que, em muitos casos, este ganho não é muito importante, e prolongar o tempo de compilação é uma tortura para o programador.

Não seria melhor fazer as opções de compilação "Debug" e "Release"?