Erros, bugs, perguntas - página 548

 
ivandurak:

Boa noite . Estou apenas a começar a dar uma boa vista de olhos. Parece ser um insecto claro. Cito o código abaixo, se comentar numa linha (está marcado) parece funcionar, qual é o problema - não compreendo. Não encontrei nada na documentação sobre este assunto.

Não atribuiu a matriz Raznica. É declarada mas não é atribuída memória, ao mesmo tempo que não é um buffer indicador (a memória para os buffers é atribuída automaticamente).

Aqui:

   SetIndexBuffer(0,BaseMaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MaForMaBuffer,INDICATOR_DATA);

diz ao compilador que as matrizes BaseMaBuffer e MaForMaBuffer são amortecedores indicadores. As outras matrizes devem ser atribuídas através de

ArrayResize()
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ivandurak:

Boa noite . Comecei agora mesmo a estudar o assunto. Parece ser um insecto óbvio. Cito o código abaixo, se eu comentar uma linha abaixo (está marcado) então parece funcionar - não compreendo qual é o problema. A situação pode ser evitada especificando um tamanho explícito para a matriz Raznica[]. Não encontrei nada na documentação sobre este assunto.

Não existe nenhum bug. Deve especificar o tamanho das matrizes dinâmicas usando o

int  ArrayResize(
   void  array[],              // массив, переданный по ссылке
   int   new_size,             // новый размер массива
   int   reserve_size=0        // резервное значение размера (избыточное)
   );

A função só pode ser aplicada a matrizes dinâmicas, mas deve ter em conta que as matrizes dinâmicas atribuídas como amortecedores indicadores pela função SetIndexBuffer() não podem ser redimensionadas. Para amortecedores indicadores, todas as operações de redimensionamento são realizadas pelo subsistema de execução do terminal.


 
Consegui, obrigado pelo espancamento inteligente. Outra questão, se uma matriz for redimensionada, o que acontecerá com os dados? E também mudar a direcção de indexação como nas séries temporais só é possível para a matriz dinâmica?
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
ivandurak:
Consegui, obrigado pelo espancamento inteligente. Outra questão, se a matriz for redimensionada, o que acontecerá com os dados? E é possível mudar uma direcção de indexação como nas séries temporais apenas numa matriz dinâmica?

Os dados permanecerão no lugar, se reduzir e depois restaurar, é incerto (o resultado é indefinido).

A propósito, a direcção de indexação muda apenas a referência de indexação, a matriz é distribuída na mesma direcção.

Ou seja, os dados não podem ser deslocados através de uma nova partição da matriz.

 

Isto já foi relatado, mas o testador continua a redefinir o valor do depósito inicial definido pelo utilizador em $10.000.

O conjunto de valores iniciais disponíveis é bastante tortuoso. Acrescentar-lhe-ia pelo menos 1000 dólares.

construir 523

Ganhar EXP

 
Foi assim, ou fez algo quebrar... Em geral, é permitido o livre acesso ao método protegido em não-descendentes
#include <Arrays/List.mqh>
//---------------------------------------
class CBasket;

class CFruit: public CObject {
private:
        double _weight;
protected:
        double GetWeight(){return _weight;}     
public:
        CFruit(double weight){_weight = weight;};
        ~CFruit(){};
};
//---------------------------------------
class CBasket {
private:
        CList _fruits;
protected:
public:
        CBasket(){};
        ~CBasket(){};
        double Weight() {
                double weight = 0;
                for(CFruit* f = _fruits.GetFirstNode(); f != NULL; f = _fruits.GetNextNode()) {
                        weight += f.GetWeight(); //свободный вызов protected метода другого класса
                }
                return weight;
        }
        
        void Attach(CFruit* f) {
                _fruits.Add(f);
        }
};
//---------------------------------------
int OnInit() {
        CBasket* b = new CBasket();
        
        CFruit* f1 = new CFruit(3.5);
        CFruit* f2 = new CFruit(6.5);
        b.Attach(f1);
        b.Attach(f2);
        Print(b.Weight());
      
   return(0);
}
//---------------------------------------
 

Após a optimização, o ficheiro de resultados não pode ser aberto,

Construir 527 + Escritório 2007

O registo de erros contém os seguintes dados


Erro XML em "Tabela
Causa: Valor errado.
Ficheiro: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Grupo: Célula
Tag: Dados
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erro XML em "Tabela".
Causa: Valor errado
Ficheiro: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Grupo: Célula
Tag: Dados
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erro XML em "Tabela".
Causa: Valor errado
Ficheiro: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Grupo: Célula
Tag: Dados
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erro XML em "Tabela".
Causa: Valor errado
Ficheiro: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Grupo: Célula
Tag: Dados
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Erro XML em "Tabela".
Causa: Valor errado
Ficheiro: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Grupo: Célula
Tag: Dados
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

etc.

 

Penso que estás a receber um valor vazio.

Pode ler

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

VAZIO_VALOR

Valor vazio no tampão indicador

DBL_MAX

DBL_MAX

Valor máximo que pode ser representado por tipo duplo

1.7976931348623158e+308

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Vigor:
Foi assim, ou fez algo quebrar... De qualquer forma, é permitido o livre acesso ao método protegido em não-descendentes

Obrigado pelo poste, bug corrigido, a correcção irá para a próxima construção.
 
Karlson:

Penso que estás a receber um valor vazio.

Pode ler

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

VAZIO_VALOR

Valor vazio no tampão indicador

DBL_MAX

DBL_MAX

Valor máximo que pode ser representado por tipo duplo

1.7976931348623158e+308

E como podem os valores vazios entrar no ficheiro? Na janela do testador há resultados de optimização normais.