Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 73

 
Alexey Viktorov:
Artem, você está errado. A matriz declarada em nível global é visível em todas as partes do programa e não é necessário passá-la para algum lugar de algum lugar. Basta preenchê-lo em um lugar no programa, ordená-lo em outro, e lê-lo no terceiro, não importa.

A mesma função pode classificar e/ou pesquisar dados em diferentes matrizes com sucesso. Certo? E se assim for, é melhor passar a matriz por referência - para o futuro. E ao chamar a função, não vai doer ver com que matriz vai trabalhar.

Estou apenas fazendo estas considerações. Onde eu estou errado?

 
Artyom Trishkin:

A mesma função pode classificar e/ou pesquisar dados em diferentes matrizes com sucesso. Certo? E se assim for, é melhor passar a matriz por referência - para o futuro. E ao chamar a função, você também deve ser capaz de ver a matriz com a qual ela irá funcionar.

Tenho toda a razão a esse respeito. Onde está errado?

Entendi. Seu conselho é para os lego-programadores. Você mesmo não faz esta perversão.

Isso deixa uma coisa errada, na medida em que a matriz deve ser declarada globalmente.

Estou feliz por nos entendermos.

 
Alexey Viktorov:

Entendi. Seu conselho é para programadores lego. Você mesmo não faz tais perversões.

Então uma coisa permanece, errada sobre a matriz ter que ser declarada globalmente.

Ainda bem que nos entendemos.

Meu ponto neste contexto é o seguinte:

  1. Precisamos conseguir o menor número possível de loops por tick.
  2. Queremos ter uma matriz constante com dados de ordens e posições de mercado e uma matriz com dados de ordens e posições apagadas/fechadas
  3. Se tivermos a matriz localmente em uma função, chamá-la repetidamente requer preenchê-la novamente. Sugiro que ele seja preenchido apenas uma vez em um novo tick - assim o array é global, caso contrário o perderíamos ao sair da função.
  4. Para encontrar algo nele (na matriz), precisamos de uma matriz preenchida e funções que retornarão os dados encontrados. Dentro das funções, podemos declarar matrizes auxiliares para os cálculos necessários.

Por esta razão, seria melhor ter matrizes globais - para encomendas e posições fechadas e abertas. Uma vez em um novo tick, passamos uma vez a quantidade necessária de pedidos/posições, preenchendo as duas arrays com eles. E então obtemos todos os dados necessários deles no mesmo carrapato. Observe que não apenas a última ordem/posição fechada/aberta e todos os seus dados são calculados, mas também todos os carrapatos de pais e filhos de todas as posições são pesquisados em caso de fechamento parcial. Assim, a qualquer momento posso ver qual ticket teve origem em uma ou outra posição, se foi fechado parcialmente mais de uma vez - tudo isso já funciona em uma classe que funciona em um timer. Tenho muitos outros dados que preciso com um pequeno número total de ciclos. A profundidade da história necessária para as arrays é definida para o testador.

E assim por diante ...

 
Artyom Trishkin:

Neste contexto, meu ponto é o seguinte:

  1. Precisamos obter o menor número possível de ciclos por carrapato.
  2. Precisamos ter uma matriz constante com dados de ordens e posições de mercado e uma matriz com dados de ordens e posições apagadas/fechadas
  3. Se tivermos a matriz localmente em uma função, chamá-la repetidamente exigirá preenchê-la novamente. Sugiro que ele seja preenchido apenas uma vez em um novo tick - assim o array é global, caso contrário o perderíamos ao sair da função.
  4. Para encontrar algo nele (na matriz), precisamos de uma matriz preenchida e funções que retornarão os dados encontrados. Dentro das funções, podemos declarar matrizes auxiliares para os cálculos necessários.

Por esta razão, seria melhor ter matrizes globais - para ordens e posições fechadas e abertas. Uma vez em um novo tick, passamos uma vez a quantidade necessária de pedidos/posições, preenchendo duas matrizes com eles. E então obtemos todos os dados necessários deles no mesmo carrapato. Observe que não apenas a última ordem/posição fechada/aberta e todos os seus dados são calculados, mas também todos os carrapatos de pais e filhos de todas as posições são pesquisados em caso de fechamento parcial. Assim, a qualquer momento posso ver qual ticket teve origem em uma ou outra posição, se foi fechado parcialmente mais de uma vez - tudo isso já funciona em uma classe que funciona em um timer. Tenho muitos outros dados que preciso com um pequeno número total de ciclos. Para o testador, a profundidade da história desejada é definida para as matrizes.

E assim por diante ...

Portanto, não nos entendemos muito bem.

Se a matriz é global, por que passá-la para uma função por referência se ela já é visível dentro desta função?

 
Alexey Viktorov:

Então, não nos entendemos bem.

Se a matriz é global, por que passá-la para uma função por referência, se ela já é visível dentro desta função?

Sobrecarga de funções - existe essa noção ;)

Se você precisar fazer as mesmas ações com matrizes diferentes em uma função, então...

No entanto - estamos discutindo diferentes casos especiais.

 
Artyom Trishkin:

Sobrecarga de funções - existe tal conceito ;)

Se você precisa fazer as mesmas ações com matrizes diferentes em uma função, então...

No entanto - estamos discutindo diferentes casos especiais.

Bem, graças a Deus, eu entendi seus pensamentos. Mas eles são muito parecidos com os conselhos aos lego-programadores.
 
Alexey Viktorov:
Bem, graças a Deus que recebo seus pensamentos. Mas eles são muito parecidos com conselhos aos programadores de lego.

Seria muito estranho ter um grande número de funções 100% funcionais em estoque e escrevê-las sempre de novo. Este não é um conselho para a construção de casas a partir de cubos. É um conselho para acumular suas próprias bibliotecas de funções e classes. E o que há de errado com uma função que lida com múltiplas matrizes, dependendo de qual delas é passada por referência? E o que há de errado com os modelos de funções?

Se você tem código para ordenar uma matriz, por que escrever uma função separada para cada tipo de matriz? Você pode simplesmente sobrecarregar e classificar qualquer tipo. Como você acha que o ArraySort() funciona? Você passa diferentes tipos de arrays lá, e em um output você recebe o classificado que foi passado - ou meta quotas também lego-coders ou o quê?

 
Artyom Trishkin:

Seria muito estranho ter um grande número de funções 100% funcionais em estoque e escrevê-las sempre de novo. Este não é um conselho para a construção de casas a partir de dados. É um conselho para acumular suas próprias bibliotecas de funções e classes. E o que há de errado com uma função que lida com múltiplas matrizes, dependendo de qual delas é passada por referência? E o que há de errado com os modelos de funções?

Se existe código para ordenar uma matriz, por que devemos escrever uma função separada para cada tipo de matriz? Você pode simplesmente fazer uma sobrecarga e classificar qualquer tipo. Como você acha que o ArraySort() funciona? Você passa diferentes tipos de arrays lá, e a saída é classificada, que você passou - ou metaquotes também lego-coders, ou o quê?

O principal é não chegar a isso.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Простой советник. Проверка размера бара. Покупка/продажа
Простой советник. Проверка размера бара. Покупка/продажа
  • www.mql5.com
Что должен делать советник: на каждом тике проверять размер бара как только размер бара станет равным или превысит заданный размер то: если свеча б...
 
Alexey Viktorov:

O principal é não chegar a isso.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Não adianta aí. Ele tem um cheque para verificar e depois um cheque para ver se está certo. Ainda está torto. Não é esse o caso - é aí que os professores são necessários.
 

há uma variável

int Nível = 0;

Enquanto o programa está em execução, ele está em constante mudança. Ajude-me a escrever uma condição: se o Nível NÃO mudou, não faça nada, se o Nível mudou (não importa se mudou mais ou menos), faça alguma ação { operador }