[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 523

 
Roll:


Sem fazer reivindicações de alto nível, vamos colocá-lo à prova:

Sim, na prática acontece que o elemento com barras de índice*6-60,60 é a barra atual... então como você explica que no exemplo :

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);
A barra atual é array1[0][0] e depois de copiar o array ela se torna array1[Bars*6-60,60][0]... acontece que algures por aí há renumeração. Naturalmente, o resultado é claro após a utilização da função na prática. mas a lógica é confusa, na minha opinião))))
 
Lisi4ka330:

Sim, na prática acontece que o elemento com barras de índice*6-60,60 é a barra atual ...


Esta é a sua conclusão.
 
Roll:


Sem fazer reivindicações de alto nível, vamos colocá-lo à prova:

#property show_inputs
extern string s=" -----номер бара--------";
extern int a=9;//номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{if(a<10)
{double array1[][6];double array2[10][6];
  ArrayCopyRates(array1);
  ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0]),"  цена открытия - ",array2[a][1]);}return(0);}

Portanto, aqui está um elemento específico da matrizTimeToStr(array2[a][0]).

Que a saída está correta, concordo. Mas o que tem o Bars*6-60 a ver com isso? Que valor é substituído por Bar durante o cálculo? Se barras, como você obtém as últimas 10 barras?

Você pode notar que não sou o único que não entendeu isso no fórum, mas muitas pessoas entenderam.

Acontece que o número de todas as barras se multiplicou por 6 e menos 60. De onde tiramos 6 de ? Isso não faz sentido algum.

 
hoz:

Portanto, aqui está um elemento específico da matrizTimeToStr(array2[a][0]).

A saída está correta, concordo. Mas o que é que o Bars*6-60 tem de fazer... Que valor é substituído por Bar durante o cálculo? Se barras, como você obtém as últimas 10 barras?

Como você pode notar, não sou o único que não entendeu isso no fórum, muitos outros não entenderam.



int Bars -- Número de barras no gráfico atual.

 
hoz:

Acontece que o número de todas as barras se multiplicou por 6 e menos 60. De onde tiramos 6? Isso não faz sentido algum.

Referência MQL4 - Operações com matrizes - ArrayCopyRates
 
Roll:



int Bars -- Número de barras no gráfico atual.


Bem, de onde vieram os últimos 10 então?

int Bars = 10 000;

Então Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960;

O valor de59 960 é maior do que o valor das barras. E isso já significa que está fora da matriz. E 10 não está em nenhum lugar a ser rastreado...

 
hoz:

Acontece que o número de todas as barras se multiplicou por 6 e menos 60. De onde tiramos 6? Isso não faz sentido algum.

Para evitar agravar a confusão, quero corrigir o erro que cometi na resposta anterior - a notação "array1[Bars*6-60,60][0]" não é correta, porque Bars*6 é o número total de elementos do array1.Cada barra tem 6 propriedades, vamos supor que temos 30 barras, multiplicando por 6 obtemos o número de elementos na primeira matriz - 180. A segunda matriz tem apenas 60 "células" livres (ou seja, 10 x 6 propriedades), portanto, devemos selecionar apenas 60 elementos da primeira matriz para copiar. Usando a expressão [Bars*6-60,60] subtraímos 60 do total, ou seja, 180 - 60 = 120, ou seja, 120 elementos da primeira matriz serão copiados para elemento zero da segunda, 121 para a primeira, e assim por diante. Outra questão é como se conclui que as informações sobre as últimas barras formadas não são escritas no início da primeira série, mas no final ... Mas aparentemente a resposta está no código de função, e não adianta cavar mais fundo...
 
hoz:


Bem, de onde vieram os últimos 10 então?

int Bars = 10.000;

Então Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960 -- erro!!!

O valor de59 960 é maior do que o valor das barras. E isto já significa que já foi além dos limites da matriz. E 10 não está em nenhum lugar para ser visto.


Victor, não se preocupe, você vai chegar lá. "A experiência é filho de erros difíceis"... Ir do simples para o complexo, não o contrário:

"PROGRESS (do lat. progressus - movimento para frente), uma direção de desenvolvimento caracterizada por uma transição do inferior para o superior, do menos perfeito para o mais perfeito. Pode-se falar de progresso em relação ao sistema como um todo, seus elementos individuais, a estrutura do objeto em desenvolvimento. O conceito de progresso é o oposto do conceito de regressão.

REGRESS (do latim regressus - movimento inverso), o tipo de desenvolvimento, que se caracteriza pela transição de maior para menor. O oposto do progresso".

 
Roll:


Victor, não se preocupe, você está à frente do jogo. "A experiência é o filho dos erros"... Ir do simples para o complexo, não o contrário:

"Progresso (do latim progressus - movimento em frente), a direção do desenvolvimento, caracterizada pela transição de menor para maior, de menos perfeito para mais perfeito". O progresso pode ser referido ao sistema como um todo, seus elementos individuais, a estrutura do objeto em desenvolvimento. O conceito de progresso é o oposto do conceito de regressão.

REGRESS (do latim regressus - movimento inverso), o tipo de desenvolvimento, que se caracteriza pela transição de maior para menor. O oposto do progresso".


por que não explicar à pessoa? ajudá-la no caminho do progresso? e toda essa conversa de regressão é mais como a nerdice de um professor...
 
Lisi4ka330:
Para não aumentar a confusão, quero corrigir o erro que cometi na resposta anterior, a entrada "array1[Bars*6-60,60][0]" não é correta, porque Bars*6 é o número total de elementos no array1.Cada barra tem 6 propriedades, vamos supor que temos 30 barras, multiplicando por 6 obtemos o número de elementos na primeira matriz - 180. A segunda matriz tem apenas 60 "células" livres (ou seja, 10 x 6 propriedades), portanto, devemos selecionar apenas 60 elementos da primeira matriz para copiar. Usando a expressão [Bars*6-60,60] subtraímos 60 do total, ou seja, 180 - 60 = 120, ou seja, 120 elementos da primeira matriz serão copiados para elemento zero da segunda, 121 para a primeira, e assim por diante. Outra questão é como se conclui que as informações sobre as últimas barras formadas não são escritas no início da primeira série, mas no final ... mas aparentemente a resposta está no código de função, e Não faz sentido cavar mais fundo....