[ARQUIVO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 4. - página 311

 
drknn:


1. A variável Velas não é usada em nenhum lugar.

2. A linha

não está escrito corretamente. Está no loop - a cada iteração do loop você cria uma nova variável Cls. E você não precisa dele lá. Você só precisa escrever


1. Esqueci de ressaltar que o trabalho do indicador não foi concluído. Mas em qualquer caso, isto não deve afetar de forma alguma o funcionamento desta função em particular.

2. Foi assim no início. Mas quando começou a me dar um erro, pensei que o problema poderia de alguma forma estar na passagem de dados de um array para um array.

 
drknn:

E tente a linha

substitua-o por


Não ajudou. O erro ainda é o mesmo.
 
drknn:
Há mais uma coisa. Se você declarou uma dimensão de 4 células em uma das dimensões da matriz, você não pode chamar Buffer_OHLC[4][] - a questão é que a numeração começa com zero, não com um. Portanto, o máximo que você pode chamar é Buffer_OHLC[3][];


A célula zero também pode permanecer vazia. Um exemplo semelhante foi descrito no livro didático. Bem, em geral, mesmo mudando o tamanho da matriz, o erro permanece.

PS O indicador deve pegar dados de outra ferramenta e aplicá-los à ferramenta atual. Talvez eu esteja fazendo algo fundamentalmente errado ao resolver esta tarefa?

 
silhouette:


A célula nula também pode permanecer vazia. Um exemplo semelhante foi descrito no livro didático. Bem, em geral, mesmo depois de mudar o tamanho da matriz, o erro persiste.

PS O indicador deve pegar dados de outra ferramenta e aplicá-los à ferramenta atual. Talvez eu esteja fazendo algo fundamentalmente errado ao resolver este problema?

Você simplesmente não está trabalhando corretamente com uma matriz bidimensional

 

1. Trocar o primeiro índice com o segundo índice

2. Use o ArrayResize

 
silhouette:


A célula zero também pode permanecer vazia. Um exemplo semelhante foi descrito no livro didático. Bem, em geral, mesmo mudando o tamanho da matriz, o erro permanece.

PS O indicador deve pegar dados de outra ferramenta e aplicá-los à ferramenta atual. Talvez eu esteja fazendo algo errado, em princípio, ao resolver esta tarefa?


Você declarou a matriz Buffer_OHLC[4][]. Você está abordando uma célula inexistente da matriz, a saber, Buffer_OHLC[4][i] - não existe uma célula desse tipo na matriz que você declarou. O máximo que existe é o Buffer_OHLC[3][i].

Deixe-me explicar: você declarou 4 células na segunda dimensão da matriz (digamos, 4 fileiras de alguma tabela com um número infinito de colunas). Como a numeração começa de zero, a primeira linha que pode ser acessada é Buffer_OHLC[0][], a segunda é Buffer_OHLC[1][], a terceira é Buffer_OHLC[2][], e a quarta é Buffer_OHLC[3][]. A linha Buffer_OHLC[4][] não existe na matriz que você declarou !

 
Também não existe [3,i] quando i>0 :)
 

Não ligue para os freios, esta é a primeira vez que lido com arrays multidimensionais :)

drknn, obrigado! Entendo seu comentário

tara:

1. Troque o primeiro índice com o segundo

2. Use o ArrayResize

Obrigado! Eu tenho o resultado. Mas também gostaria de esclarecer sobre a função ArrayResize e o tamanho da primeira dimensão da matriz.

   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
   
   ArrayResize(Buffer_OHLC,limit-1);
   for(int i=limit; i>=0; i--)
    {
      Buffer_OHLC[i][0]=iOpen (Smb,Period(),i);
      Buffer_OHLC[i][1]=iHigh (Smb,Period(),i);
      Buffer_OHLC[i][2]=iLow  (Smb,Period(),i);
      Buffer_OHLC[i][3]=iClose(Smb,Period(),i);
      
      if(Line==true)
       {
        Buffer_ind[i]=Buffer_OHLC[i][3];
       }
    }
   return(0);

Ao usar o limite-1, há um gráfico, mas o erro 4051 "Valor inválido do parâmetro da função" aparece.

 
Alguém pode explicar como abrir um pedido em qualquer momento de um bar e só abrir o próximo pedido no próximo bar?
 
silhouette:

Não ligue para os freios, esta é minha primeira vez lidando com arrays multidimensionais :)

É mais fácil orientar-se se você pensar em uma matriz multidimensional como algo mais. Nomeadamente, se você encontrar um modelo para a matriz que capte sua essência - o modelo é mais fácil de manter diante de seus olhos.

Uma matriz unidimensional são objetos em uma linha (um raio de coordenadas começando de zero). Um exemplo de um conjunto desse tipo seria uma fila de espera em uma loja. A primeira na fila é a pessoa que está bem atrás da pessoa que está comprando agora. A pessoa que compra não pode ser chamada a primeira da fila - ele está comprando - ele é zero. Ele está dentro da célula zero da matriz unidimensional.

Uma matriz bidimensional é um objeto em um plano (plano de coordenadas). Um exemplo seria um auditório. Fila de sucessos e sucessos, lugar de sucessos e sucessos. Adicione linha zero e assento zero a este modelo, e você tem um modelo exato de uma matriz bidimensional.

Uma matriz tridimensional é um objeto no espaço (espaço de coordenadas) - a coordenada do objeto é dada por três valores. É um cubo, com rostos. Um modelo poderia ser um edifício residencial com número de entrada zero, andar zero e apartamento zero (entre todos os outros). Desde que em cada entrada a numeração plana comece a partir de zero.

Uma matriz tetradimensional é semelhante a uma matriz unidimensional. É um raio de coordenadas, todos os pontos das quais são matrizes tridimensionais. O modelo é uma rua. A matriz de coordenadas será especificada pelos valores: número da casa, número de entrada, número do piso, número plano.

E assim por diante em enn-dimensionalidade - de ruas para distritos, de distritos para cidades, de distritos para cidades, de cidades para países, de países para planetas...