Perguntas sobre a MQL4 - página 12

 
a única pergunta é: будет ли работать заметно быстрее, если обработку массивов вынести в DLL?
alguém tem algum compilador instalado? por favor, verifique! não é tão chato assim?


Os acessos às matrizes são dez vezes mais lentos que as variáveis locais.


O tempo de endereçamento de um item de matriz SEMPRE não é maior do que o tempo de endereçamento de uma variável.
Os números específicos serão diferentes para diferentes compiladores, mas a tendência deve permanecer a mesma.

O compilador é o Visual Studio 2005. O processador é Athlon XP 2500+.
O tempo de execução junto com a inicialização da matriz é de 1.06-1.07 seg.
Dim t1, t2 As Double t1 = DateAndTime.Timer() Dim x, y, z As Double Dim d, k As Double Dim Open(5001), Close(5001) As Double Dim For d = 5000 To 1 Step -1 For k = 1 To 4999 z = Close(k) : y = Close(k + 1) : x = Close(k + 2) z = Open(k + 1) : y = Open(k + 1) : x = Open(k + 2) Next t2 = DateAndTime.Timer() MsgBox(CStr(t2 - t1) + " segundos")



O mesmo laço, mas com

z = Fechado(1) : y = Fechado(1) : x = Fechado(1) z = Aberto(1) : y = Aberto(1) : x = Aberto(1)


dá de 0,37 a 0,4 segundos.

E finalmente,

z = k : y = k : x = k z = k : y = k : x = k


0,56-0,6 с.

Portanto, gostaria de tirar a seguinte conclusão:
não é sobre um compilador e não sobre "array/não-array", mas sobre a estruturação correta dos dados e o código correto!
P.S. Naturalmente, todas as teses acima, exceto as medidas de tempo, são minha opinião pessoal, profundamente subjetiva e modesta, assim como um programador.

 
Obrigado!

sim, a otimização do código resultante em compilador é um poder afinal de contas...
Não quero entrar em detalhes, mas parece que o copiador de estúdio visual otimiza os acessos à matriz por si só.
para fazer o teste justo, você precisa inserir uma variável, digamos, S; e inserir entre todas as atribuições x,y,z algo como S=S+x, S=S+y, S=S+z, e depois sair S além do tempo para obter velocidade "pura".

embora o otimizador do compilador possa descobrir parcialmente esta trapaça... :)
 
para garantir a integridade do teste, precisamos introduzir uma variável


Há muito tempo, eu já rejeitei tais pensamentos. Eu até já fiz testes. E cheguei a uma conclusão:

O compilador realiza todas as operações prescritas e simplesmente não tem o direito de não realizá-las porque é simplesmente impossível saber 100% de onde pretendo acessar estas variáveis - no mesmo método, a partir de algum timer (e código estruturalmente não relacionado) ou mesmo a partir de algum outro processo.
Portanto, tudo é justo. Verificado.

P.S. Offtopics, desculpe. Não resistiu.
 
sobre acessos a array...
qual é o array especificado pelo parâmetro no ArrayCopySeries?

é um array regular de valores, ou um array de indicadores de valores?

(esta é obviamente uma pergunta tola, mas eu não programo há 10 anos, muito menos em C, muito menos em Windows)

e onde ler sobre tudo isso?
 
Existe alguma forma de determinar o estado do gatilho da EA entre carrapatos?
Eu realmente preciso...

Há alguma forma de... Eu não sei. É permitida a invocação recursiva do início()?
 
então o deinit() não é acionado quando o botão é desligado?
 
Existe alguma maneira de determinar o estado do botão de habilitação da EA entre os carrapatos? <br / translate="no">

não há como. o EA não iniciará se o botão for desativado.

É permitido o acesso recursivo para iniciar()?

é permitido.
 
Slawa,
Obrigado por sua resposta.


Bem, uh... Então e agora...?
Eu não sei... ou ir por 5, mas ontem... e hoje por 3... os pequenos.

Terei que me contentar com muitos pequenos. Eu não queria. Bem, e agora... :(
Parece tão fácil...

(não se importe comigo, é meditação já salpicando sobre o teclado)
 
FirstVisibleBar() e BarsPerWindow() não são destacadas em cores em ME.
É impressão minha ou é suposto ser?
 
FirstVisibleBar() e BarsPerWindow() não são destacadas em cores em ME. <br / translate="no"> É impressão minha ou deveria ser?

Eles são e sempre foram destacados normalmente. Acabei de verificar a construção do 183 e do 187.