Erros, bugs, perguntas - página 512

 
Neofit:
Definiro tamanho da matriz. ArrayResize
 
Neofit:

Por favor, diga-me como trabalhar correctamente com um conjunto de elementos que são estruturas Mqlrates.

Isto é exactamente o que eu quero saber:

MqlRates AdaptedRates[];

ArraySetAsSeries(AdaptedRates,true); 

AdaptedRates[300].open=1;

O depurador dá um erro - Acesso inválido à matriz.

Compreendo que utilizando esta forma de gravação, só podemos ler elementos de uma estrutura que é um elemento de uma matriz.

A questão é como escrever correctamente os elementos da estrutura. Não estou interessado em todas elas. O importante é o preço de .abrir .alto .baixo .fechar.

Peço desculpa antecipadamente por esta pergunta provavelmente muito trivial (não sou o programador), mas na ajuda não encontrei a resposta. Ficarei grato por qualquer ajuda.

Está a utilizar uma matriz dinâmica AdaptedRates[]. Tanto quanto me lembro, ao trabalhar com arrays dinâmicos, o seu tamanho deve ser definido usando a função ArrayResize(). Mas até agora, o compilador queixou-se do índice 300 especificado na terceira linha.
 
Swan:
Definir o tamanho da matriz. ArrayResize
Tanto quanto sei, se eu definir o tamanho, por exemplo
MqlRates AdaptedRates[302];  
, não posso definir o tipo de indexação como série.
 
Neofit:
Tanto quanto sei, se eu definir tamanho, por exemplo
MqlRates AdaptedRates[302];  
não poderei definir o tipo de indexação como série.

:) Não se define matriz estática, mas sim o tamanho da matriz dinâmica com ArrayResize().

Bem, como: ArrayResize(AdaptedRates,302); etc.

 
Yedelkin:
Está a utilizar uma matriz dinâmica AdaptedRates[]. Tanto quanto me lembro, ao trabalhar com arrays dinâmicos deve definir o seu tamanho usando a função ArrayResize(). E até agora o compilador está a colidir com o índice 300 especificado na terceira linha.
As matrizes estáticas não podem ser representadas como séries temporais, ou seja, a função ArraySetAsSeries(), que define o acesso aos elementos da matriz desde o fim da matriz até ao seu início, não é aplicável a elas. Se quiser fornecer acesso a um array como nas séries temporais, utilize um objecto de array dinâmico.

Esta é uma citação da ajuda.

Swan, Yedelkin obrigado por uma resposta tão rápida.

 
Neofit:
Tanto quanto sei, se eu definir um tamanho, por exemplo
MqlRates AdaptedRates[302];  
, não posso definir o tipo de indexação como série.

sim.

MqlRates AdaptedRates[];// deixando assim a matriz dinâmica

ArrayResize(AdaptedRates,302);// e definir o tamanho certo

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура исторических данных - Документация по MQL5
 
Yedelkin:

:) Não se define um array estático, mas sim um array dinâmico usando o ArrayResize().

Bem, como ArrayResize(AdaptedRates,302); etc.

Obrigado pela explicação popular, tanto quanto entendo é aconselhávelArrayResize para os limites certos antes de qualquer referência a uma célula de matriz dinâmica, vou tentar.
 
pusheax:

Uma falha no testador de estratégias.

De repente pára e todos os agentes locais e remotos terminaram e assim ficam pendurados.

Pode dizer-me como recomeçar, é uma pena começar tudo de novo?
Faço-o regularmente :-) Não posso recomeçar, desactivo as nuvens e depois volto a lançar as nuvens. É pior, quando acontece à noite, fica ligado até eu acordar :-)
 
Neofit:
Obrigado pela explicação popular, tanto quanto entendo é desejável que o ArrayResize até aos limites necessários antes de qualquer referência a uma célula de matriz dinâmica , vou tentar.

Nota. Apenas para amortecedores indicadores, isto não precisará de ser feito. O subsistema executivo do terminal trata disto por si só.

Nota 2:ArrayResize() deve de preferência ser aplicado apenas quando é necessário alterar o tamanho de um array dinâmico, e não antes de qualquer acesso aos seus elementos. É bem possível que uma vez seja dado um tamanho a um conjunto dinâmico, e então o programa simplesmente acederá aos seus itens.

 
Yedelkin:

Nota. Apenas para amortecedores indicadores, isto não precisará de ser feito. O subsistema executivo do terminal trata disto por si só.

Nota 2:ArrayResize() deve de preferência ser aplicado apenas quando é necessário alterar o tamanho de um array dinâmico, e não antes de qualquer acesso aos seus elementos. É bem possível que uma vez seja dimensionada uma matriz dinâmica e depois o programa simplesmente aceda aos seus elementos.

Bem, estou a ser tolo ao dizer isto, na verdade compreendo que se já expandi uma matriz dinâmica para 302, posso aceder a qualquer elemento de 0 a 301 sem o ArrayResize.