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]);}
};
intOnInit()
{
//---
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
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.
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[].
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.
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).
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...
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...
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:
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
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?
Olá a todos!
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[].
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.
Explique o que quer dizer com isso.
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).
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...
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...