Erros, bugs, perguntas - página 645

 

Olá a todos!

Por favor, ajude um principiante a compreender a utilização de matrizes nas aulas. Cortar o código chave numa pequena peça para representar o problema:

class base
{
protected:
int Stf_ZZ_Handle;
double Stf_ZZ_Val[];
public:
void InitArray()
  {
   Stf_ZZ_Handle=iCustom(_Symbol,_Period,"Examples\\ZigZag",12,0,0);
   ArraySetAsSeries(Stf_ZZ_Val,true);
   CopyBuffer(Stf_ZZ_Handle,0,0,200,Stf_ZZ_Val);
   Print("array[0]= ",Stf_ZZ_Val[0]);
  }
};
class second : public base
  {
    public:
    void Printer() {Print("array[0]= ",Stf_ZZ_Val[0]);}
  };
int OnInit()
  {
//---
base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();
//---
   return(0);
  }

Ao executar recebe um erro Array fora de alcance na cadeia da classe herdada, na classe pai recebo o 0 esperado.

2012.02.13 00:41:25 2011.01.01.01 00:00:00 array fora do alcance em 'test1.mq5' (29,36)
2012.02.13 00:41:25 2011.01.01.01 00:00:00 array[0]= 0.0

   void Printer() {Print("array[0]= ",Stf_ZZ_Val[0]);}

Compreendo que estou a passar (ou a endereçar) incorrectamente um array a uma classe herdeira, embora com variáveis normais não haja erro com tal manipulação.

O que é que estou a fazer mal?

 

Tenho visto esta mensagem com muita frequência ultimamente quando corro ficheiros *.mq5:

Qual poderá ser o problema?

 
Radix:

Olá a todos!

base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();

O que é que estou a fazer mal?

Olhe, quando declara "segundo Csecond;" na segunda linha, o método InitArray() não é chamado, certo? Ao mesmo tempo, o próprio objecto Csecond já foi criado. Assim, acontece que quando se chama o "Csecond".Printer();", refere-se à matriz não inicializada e undimensional Stf_ZZ_Val[].

 
Pode dizer-me se o limite de 1000 bar de histórico disponível desde a data de início (como em MT4) foi removido ao testar?
 
muallch:

Por favor, diga-me se o limite de 1000 barras históricas disponíveis desde a data de início foi removido (como em MT4) durante os testes?

Explique o que quer dizer com isso?

Em Cinco, os dados são carregados do ano anterior, desde o início dos testes. Assim, se estiver a testar a partir de 2012.02.01, os dados serão carregados a partir de 2011.01.01.

A única excepção são os testes em Dias, Semanas e Meses - o início dos dados lá é calculado com base na necessidade de ter 100 barras antes do início dos testes.

 
stringo:

Explique o que quer dizer com isso.

Ao correr, por exemplo, a partir de 2011.01.01.01 em dailies, precisamos de uma história de pelo menos 3000 bares. Assim, temos de estabelecer um período intencionalmente mais longo do que o necessário para testar e traçar programáticamente o "ponto de partida". Qual é a dificuldade de fornecer todo o historial (ou a pedido) durante os testes?
 
Há também a questão da disponibilidade da história, não em testes, mas em verdadeiras auto-comercializações. O que devemos fazer neste caso? O testador pode ser ludibriado...
 
muallch:
Ao correr, por exemplo a partir de 2011.01.01 sobre dados diários, precisamos de um histórico com pelo menos 3000 barras. Por outras palavras, temos de estabelecer um período intencionalmente mais longo, do que o necessário para os testes, e de seguir programticamente o "ponto de partida". Qual é a dificuldade de fornecer todo o historial (ou a pedido) durante os testes?

Não há qualquer dificuldade. Não quisemos introduzir uma caixa de verificação extra nas definições de teste, que teria sido incompreensível para a maioria dos utilizadores e que teria sido mal utilizada num grande número de casos.

É uma solução normal especificar um período intencionalmente mais longo.

Outra solução - encomendar testes numa base mensal, e utilizar indicadores diários e dados de preços (ou seja, em vez do conjunto PERÍODO_CURRENTE PERIOD_D1 explicitamente).

 
muallch:

Há também a questão da disponibilidade da história, não em testes, mas em verdadeiras auto-comercializações. O que devemos fazer neste caso? O testador pode ser ludibriado...
Pode descarregar toda a história disponível. Verificar a documentação para organização do acesso aos dados
 

Obrigado pelo esclarecimento!

Numa nota lateral: Estou a testar com agentes remotos através da Internet. Porque é que os agentes recebem o histórico completo dos minutos se estou a testar a preços de abertura do dia? O tempo de preparação antes do início dos testes é simplesmente obsceno - uma hora, por exemplo. Bom para quem tem um tubo de 10-100 megabit, mas aqui está sentado num mísero megabit...

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