Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 9

 
gyfto:

Você poderia escrever se((b-a)*(c-a)*(d-a)>0), mas não necessariamente mais rápido. A multiplicação lógica AND é binária, é apenas mais uma notação da mesma expressão, a única diferença é o tamanho dos tipos de variáveis. a>b é uma variável booleana, 4 bytes, e b-a, se forem o dobro, então a diferença é o dobro (8 bytes), e esta multiplicação é pelo menos 2 vezes maior.


Conselhos inestimáveis.

Deixe-me explicar. Você pode reescrever sua expressão como se(((a>b)*(a>c)*(a>d)==1), porque as expressões entre parênteses levam valores 0 ou 1 (e elas, por sua vez, são definidas no pré-compilador como falsas e verdadeiras).

Obrigado - acho que isto vai funcionar mais rápido
 

Rapazes, por favor, avisem.

No modo de teste de estratégia, não posso alterar os números nas propriedades de otimização:

Saldo mínimo 200

Lucro máximo de 10000

etc.

Qual é o problema?

 

Você pode me dizer quais valores podem retornar init, start e deinit e o que eles significam?

Tentei procurar no fórum, mas não consegui encontrá-lo. Não há esta informação no Manual. Provavelmente, são as informações confidenciais. : )))(Texto emocional eliminado... )

Como eu suponho - "0" - tudo correu bem... Mas, como seu tipo é interger, aparentemente pode haver mais do que apenas 2 valores...

 
Chiripaha:

Você pode me dizer que valores podem retornar init, start e deinit e o que eles significam?

Tentei procurar no fórum, mas não consegui encontrá-lo. Não há esta informação no Manual. Provavelmente, são as informações confidenciais. : )))(Texto emotivo eliminado... )

Como eu suponho - "0" - tudo correu bem... Mas, como seu tipo é interger, aparentemente pode haver mais do que apenas 2 valores...

Isto tem sido discutido muito recentemente. Referência:

Há 3 funções com nomes pré-definidos na MQL4:

init() - função chamada durante a inicialização do módulo. Se estiver faltando, nenhuma função é chamada durante a inicialização.

start() - a função principal. Ele é chamado aos Conselheiros Especialistas após o recebimento do próximo tick. Para indicadores personalizados é chamado durante o recálculo após o indicador ser anexado ao gráfico, quando o terminal do cliente é aberto (se o indicador for anexado ao gráfico), e também após a chegada do próximo tick. Nos roteiros é executado imediatamente após anexado ao gráfico e inicializado. Se não houver função start() no módulo, este módulo (Expert Advisor, script ou indicador personalizado) não poderá ser lançado.

deinit() - a função que é chamada durante a desinicialização do módulo. Se ela estiver ausente, nenhuma função é chamada durante a desinicialização.

Funções pré-definidas podem ter parâmetros. Entretanto, quando estas funções são chamadas pelo terminal do cliente, nenhum parâmetro será passado de fora, mas os valores padrão serão usados.
As funções start(), init() e deinit() podem ser chamadas de qualquer parte do módulo de acordo com as regras gerais, juntamente com outras funções.

É indesejável chamar a função start() ou trade from the init(), pois no momento da inicialização do módulo os dados do gráfico de inicialização, preços de mercado, etc., podem não estar prontos. As funções init() e deinit() devem terminar seu trabalho o mais rápido possível e, em nenhum caso, ficar presas tentando iniciar a operação completa antes que a função init() seja chamada.

Para chamadas de sistema, o retorno não importa.
 

Ok, então vou tentar esclarecer a questão.

Por exemplo, quero verificar alguns parâmetros na fase de inicialização e dependendo do resultado: ou passar ou não para a fase inicial.

Se eu entendi seu comentário corretamente, Vadim, então o resultado da inicialização não importará (neste caso) e a função Start será iniciada?

 

então você precisa ligar para o init desde o início.

Por que você tem que passar por todo esse trabalho? Variáveis globais ainda não foram canceladas...

 
Chiripaha:

Ok, então vou tentar esclarecer a questão.

Por exemplo, quero verificar alguns parâmetros na fase de inicialização e dependendo do resultado: ou passar ou não para a fase inicial.

Se eu entendesse seu comentário corretamente, Vadim, o resultado da inicialização não importaria (neste caso) e a função Iniciar seria iniciada?

Rustam respondeu:

FAQ:

então você mesmo tem que chamar o init desde o início.

Por que uma complicação desse tipo? Ninguém cancelou variáveis globais ainda...

Você declara variáveis globais e as inicializa conforme necessário. Todas as funções no mesmo módulo podem ver as variáveis globais.
 
Zhunko:

Rustam respondeu:

Você declara as variáveis globalmente e as rubrique conforme necessário. Todas as funções em um módulo podem ver as variáveis globais.

Sim, a menos que seja um cheque para restringir o acesso ao programa, por exemplo.
 
FAQ:

então você precisa ligar para o init desde o início.

Por que você tem que passar por todo esse trabalho? Variáveis globais ainda não foram canceladas...


Não seria mais fácil verificar com uma bandeira? É claro que...
 
hoz:

Não seria mais fácil verificá-lo com uma bandeira? Certamente global...

Não, não é mais fácil. Porque se houvesse uma bandeira negativa (ou uma variável global), a verificação ainda precisaria ser executada. Tanto a bandeira quanto a variável global só funcionarão no caso positivo. E algumas funções ainda são necessárias no início (embora, aqui, seja diferente).

Seja como for, comece de qualquer forma: ou por refazer o "inite", que é igualmente irritante, ou por refazer as funções necessárias.