Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1423
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Então, você já tentou tornar as variáveis globais?
Queríamos verificar as condições para encontrar uma entrada EA não a cada tic, mas somente quando outra ordem é aberta ou fechada por outra EA ou manualmente (para que o processador não esteja sobrecarregado). É por isso que precisamos verificar se o número de pedidos corresponde a cada carrapato.
Podemos usar uma variável estática ? O programa funcionará de tal forma?
Alternativamente, a condição mais simples e mais fácil
OnTrade() é um análogo para mt4 com mt5
Obrigado por sua resposta. Eu entendi tudo o que você escreveu. Mas eu não entendi o significado do que você escreveu em termos do meu problema.
Por matriz bidimensional horizontal em meu código quero dizer quando há 2 linhas sob o índice 0 ou 1 e colunas sob os índices de 0 a 30. A primeira dimensão é designada como[0][0],[0][1],[0][2], ...[0][30] A segunda dimensão é designada por[1][0],[1][1] [ 1],[1][2], ...[1][30]
Por matriz bidimensional vertical em meu código quero dizer quando há 31 linhas indexadas de 0 a 30 e 2 colunas indexadas de 0 e 1. A primeira dimensão é designada como[0][0],[1[0],[2][0], ...[30][0] A segunda dimensão é designada por[0][1],[1][1],[2][1], ...[30][1]
Se você executar meu código, a matriz será preenchida verticalmente. E a função ArraySort() irá ordenar a matriz como deve ser.
PERGUNTA Por que a função ArrayFill() não funcionará neste caso ? Afinal, eu pedi para preencher a primeira dimensão da matriz (31 itens) com os mesmos valores 0,5555.
Obrigado pela ajuda.
A MQL4 pode trabalhar com não mais do que matrizes tridimensionais. Portanto, arr[31][31] é um erro. Uma matriz não pode ser maior do que arr[][4]. E a primeira dimensão é limitada não pela MQL, mas pelo que, não sei exatamente. Talvez alguém possa explicar.
Função ArrayFill() funcionará, mas precisamos entender que o número de elementos na matriz arr[3][2] será 6, e precisamos escrever 6 nesta função, não 3 pelo tamanho da primeira dimensão.
Dimensão tetradimensional: arr[][][][] ou arr[,,,].
As dimensões das três últimas dimensões devem ser especificadas na declaração e fixadas, enquanto a primeira pode ser deixada por especificar e alterada posteriormente:
No exemplo de uma matriz bidimensional, os dados da matriz estão dispostos da seguinte forma:
A ordenação move toda a horizontal, classificando pela primeira dimensão,
e ArrayFill() preenche de um elemento a outro, por exemplo, de 3 a 8. Isto resulta em uma bagunça.
Se você quiser preencher alguns valores na horizontal pela primeira dimensão, você deve controlar o início e o fim do preenchimento, sabendo como os dados são dispostos.
Por exemplo, a régua inteira do elemento zero da primeira dimensão:
Se apenas um elemento zero, então é assim:
Se muitos elementos zero, então através de looping e atribuição simples.
Não devo ter explicado muito claramente... Use a impressora, imprima tudo no laço, desta e daquela maneira, e você pegará o jeito. Dessa forma, você aprenderá mais rápido.
printf é meu amigo!
A MQL4 não pode manusear mais do que matrizes de 4 dimensões. Portanto, arr[31][31] é um erro. Uma matriz não pode ser maior do que arr[][4]. E a primeira dimensão é limitada não pela MQL, mas pelo que, não sei exatamente. Talvez alguém possa explicar.
E a primeira dimensão (ou seja, o número de cordas) é limitada por quantos? Não mais do que o número de filas na matriz multidimensional permitido pela MQL4 ?
Acho que as quatro dimensões têm um limite:INT_MAX
Sobre a estrutura.
bidimensional:
Por estrutura representa uma matriz unidimensional na qual os elementos estão dispostos da seguinte forma: primeiro a primeira linha, depois a segunda, depois a terceira.
tridimensional:
Em tridimensional, também. É uma matriz unidimensional, onde as primeiras filas são uma após a outra, depois a segunda,.....
Por que unidimensional? Porque várias células em uma linha são alocadas para a matriz na memória do computador, então elas escrevem tudo em ordem: linha00+linha01+linha02+linha10+linha11....
E também é possível acrescentar uma quarta dimensão - pilhas de folhas de matriz tridimensional.
Somente o número de filas pode ser alterado no decorrer do programa. Todas as filas, colunas, folhas e pilhas são apenas uma convenção para entender a estrutura. As dimensões não estão realmente em nosso espaço, elas são apenas medidas.
Como diz Alexei:
... coluna ... é ... horizontalmente porque estou olhando para ele deitado no sofá.........
Você notoua seguinte nota
A matrizmultidimensional ao processar com ArrayFill()aparece como unidimensional, por exemplo, a matriz[2][4] é processada como matriz[8], portanto, ao trabalhar com esta matriz é aceitável especificar um índice de elemento inicial igual a 5. Então, chame ArrayFill(array, 5, 2, 3.14) para array[2][4] irá preencher array[1][1] e array[1][2] elementos com valor 3.14.
Já descobrimos tudo, exceto o ArrayFill().
1. Quando declaro uma tabela dupla LoY[31][31]; estou essencialmente criando uma tabela de 31 filas por 31 colunas. Criei uma matriz bidimensional (ao invés de quatro dimensões), mas ainda não a preenchi.
2. Em seguida, no código, preencho cada elemento individual da matriz com um valor de Licitação. Posso preenchê-lo com 2 opções
a) LoY[31][0]=Bid; - Preencho a linha 31 e a primeira coluna da matriz com valores de Bid. E a segunda dimensão (coluna sob o índice 1, é preenchida com 0 por padrão, porque eu não a preencho. Portanto, nesta variante eu tenhoa primeira dimensão com 31 elementos preenchidos e a segunda dimensão com 1.
b) LoY[0][31]=Bid - Preencho a coluna 31 e a primeira linha da matriz com valores de Bid. E a segunda dimensão (linha sob o índice 1, é preenchida com 0 por padrão, porque eu não a preencho. Assim, nesta variante, a segunda dimensão consiste em 31 elementos preenchidos, a segunda dimensão consiste em 1.
ArraySort() classifica a matriz bidimensional apenas pela primeira dimensão. Por conseguinte, classificará a opção a) A primeira dimensão tem 31 fileiras e não ordenará a opção b), na qual a primeira dimensão tem apenas 1 fileira, porque não é possível ordenar 1 fileira.
AgoraArrayFill() Ele puxa a matriz bidimensional em uma única linha antes de atribuir os valores necessários aos elementos da matriz bidimensional. Ou seja, terá que puxar minha matriz LoY[31][31] em uma única linha de elementos de tamanho 961. É um fio muito longo e a maioria dos elementos será desnecessária.
Então vamos fazer uma matriz LoY[31][2] (variante a))ou LoY[2][31] (variante b))
É claro comoArrayFill() desenhará em 1 linha na variante b) . A segunda linha simplesmente unirá a primeira e após o último elemento da primeira linha LoY[0][31] a primeira linha da matriz em ArrayFill() continuará comLoY[0][32] e terminará comLoY[0][62] E os valores dos elementos da matriz em ArrayFill() irão na seguinte ordem do índice 0 ao 31 os elementos da matriz serão preenchidos com valores de preço e do índice 32 até o final serão preenchidos com 0 .
PERGUNTA: Como oArrayFill() desenha a opção a) em 1 linha? Afinal, há 28 filas nesta variante. E se for uma linha, em que ordem conterá os valores dos elementos da matriz? E, posso usar Print() para imprimir os elementos da minha matriz bidimensional após o ArrayFill() convertê-los em uma matriz unidimensional? Esta função em si não retorna nenhum valor, portanto Imprimir() não a imprimirá se estiver inserida nela.
Obrigado pela ajuda.
Eu estraguei um pouco aqui... Tenho vergonha de mim mesmo.
elemento individual da matriz com um valor de Licitação. Posso preenchê-lo com 2 opções
a) LoY[31][0]=Bid; - Preencho a linha 31 e a primeira coluna da matriz com valores de Bid. E a segunda dimensão (coluna sob o índice 1, é preenchida com 0 por padrão, porque eu não a preencho. Portanto, nesta variante eu tenhoa primeira dimensão com 31 elementos preenchidos e a segunda dimensão com 1.
b) LoY[0][31]=Bid - Preencho a coluna 31 e a primeira linha da matriz com valores de Bid. E a segunda dimensão (linha sob o índice 1, é preenchida com 0 por padrão, porque eu não a preencho. Assim, nesta variante, a segunda dimensão consiste em 31 elementos preenchidos, a segunda dimensão consiste em 1.
ArraySort() classifica a matriz bidimensional apenas pela primeira dimensão. Por conseguinte, classificará a opção a) A primeira dimensão tem 31 fileiras e não ordenará a opção b), na qual a primeira dimensão tem apenas 1 fileira, porque não é possível ordenar 1 fileira.
AgoraArrayFill() Ele puxa a matriz bidimensional em uma única linha antes de atribuir os valores necessários aos elementos da matriz bidimensional. Ou seja, terá que puxar minha matriz LoY[31][31] em uma única linha de elementos de tamanho 961. É um fio muito longo e a maioria dos elementos será desnecessária.
Então vamos fazer uma matriz LoY[31][2] (variante a))ou LoY[2][31] (variante b))
É claro comoArrayFill() desenhará em 1 linha na variante b) . A segunda linha simplesmente unirá a primeira e após o último elemento da primeira linha LoY[0][31] a primeira linha da matriz em ArrayFill() continuará comLoY[0][32] e terminará comLoY[0][62] E os valores dos elementos da matriz em ArrayFill() irão na seguinte ordem do índice 0 ao 31 os elementos da matriz serão preenchidos com valores de preço e do índice 32 até o final serão preenchidos com 0 .
PERGUNTA: Como oArrayFill() desenha a opção a) em 1 linha? Afinal, há 28 filas nesta variante. E se for uma linha, em que ordem conterá valores dos elementos da matriz? E, posso usar Print() para imprimir os elementos da minha matriz bidimensional após o ArrayFill() convertê-los em uma matriz unidimensional? Esta função em si não retorna nenhum valor, portanto Imprimir() não a imprimirá se estiver inserida nela.
Obrigado por sua ajuda.
Estou tendo dificuldade para entender você. Talvez seja por isso que eu não consiga entender direito. Repita a pergunta com LoY[5][3] array, ou seja, 5 linhas e 3 colunas.
O ArrayFill não converte a matriz inicial de forma alguma. Ele só processa a matriz como se fosse uma matriz unidimensional. A função realiza as ações necessárias na matriz e recua sem afetar a dimensionalidade.
De acordo com a documentação, a funçãoArrayFill (LoY, 3, 6, 12) preencherá apenas linhas com índices 1 e 2 na matriz LoY com valor 12.
LoY[1][0] será preenchido com 12.
LoY[1][1] terá valor 12.
LoY[1][2] terá o valor 12.
LoY[2][0] terá valor 12.
LoY[2][1] terá o valor 12 .
LoY[2][2] será ajustado para 12 .
Todos os outros serão deixados intocados.
Experimente um pequeno conjunto e números que sejam fáceis de entender. Por exemplo, 12 e 8, você facilmente notará que é maior. E 1.123654 e 1.123583 é mais complicado
O ArrayFill não converte a matriz original de forma alguma. Ele só processa a matriz como se fosse uma matriz unidimensional. A função realizou as ações necessárias sobre a matriz e a jogou fora sem perturbar a dimensionalidade.
Isto reduziu muito meu mal-entendido e aumentou minha compreensão. Agora vou reanalisar tudo o que escrevi levando em conta a circunstância recentemente descoberta....
De acordo com a documentação, a funçãoArrayFill (LoY, 3, 6, 12) preencherá apenas as linhas com os índices 1 e 2 na matriz LoY com o valor 12.
LoY[1][0] terá um valor de 12.
LoY[1][1] terá valor 12.
LoY[1][2] terá o valor 12.
LoY[2][0] terá valor 12.
LoY[2][1] terá um valor de 12 .
LoY[2][2] será ajustado para 12 .
PERGUNTA
Como e que valores devo inserir noArrayFill() se eu precisar preencher os elementos amarelos da mesma matriz com o valor 12?
OPÇÃO N 1
OPÇÃO N 2