Erros, bugs, perguntas - página 950

 
fyords:

Por favor, informe se alguém encontrou algo assim.

Existe um código:

Em tempo real em terminal funciona: mas em testador o mesmo código dá um resultado diferente:

O tamanho da matriz deve ser obtido independentemente do evento que ocorreu?

 
tol64:

E o tamanho da matriz deve ser obtido independentemente do evento que ocorreu?

Bem, primeiro escrevi o indicador e depois reduzi tudo a um simples exemplo.
Acontece que sim - em qualquer evento, e os registos que são dados são repetidos em cada linha.

Alterando o código para o seguinte:

//+------------------------------------------------------------------+
double date[];
//+------------------------------------------------------------------+
void OnInit()
{
   ArrayResize(date,3);
   Print(__FUNCTION__," ArraySize(date)=",ArraySize(date));
}
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   Print(__FUNCTION__," ArraySize(date)=",ArraySize(date));
}
//+------------------------------------------------------------------+

tornou-se ainda mais divertido. Terminal de resultados:

FD      0       12:57:59        test (EURGBP.m,M5)      OnInit ArraySize(date)=3
JO      0       12:57:59        test (EURGBP.m,M5)      OnChartEvent ArraySize(date)=3
DG      0       12:57:59        test (EURGBP.m,M5)      OnChartEvent ArraySize(date)=3

Testador:

JM      0       12:58:09        test (EURGBP.m,M15)     2013.01.01 00:00:00   OnInit ArraySize(date)=3
FE      0       12:58:09        test (EURGBP.m,M15)     2013.01.01 00:00:00   OnChartEvent ArraySize(date)=0
FR      0       12:58:09        test (EURGBP.m,M15)     2013.01.01 00:00:00   OnChartEvent ArraySize(date)=0
 
fyords:

Bem, primeiro escrevi o indicador e depois reduzi tudo a um simples exemplo.
Acontece que sim - por qualquer acaso, com os registos dados a repetirem cada linha.

...

Não o consegui reproduzir. Estou a testar este código:

//+------------------------------------------------------------------+
//|                                                     !indTEST.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
#property indicator_chart_window
#property indicator_buffers 1 
#property indicator_plots   1
#property indicator_type1   DRAW_NONE
//---
double date[];
//---
//+------------------------------------------------------------------+
//| ИНИЦИАЛИЗАЦИЯ                                                    |
//+------------------------------------------------------------------+
void OnInit()
  {
   ArrayResize(date,3);
  }
//+------------------------------------------------------------------+
//| ДЕИНИЦИАЛИЗАЦИЯ                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   Print("ArraySize(date)=",ArraySize(date));
  }
//+------------------------------------------------------------------+

//---

Testado o indicador no modo de visualização.

 
tol64:

...

Testado o indicador no modo de visualização.

Da mesma forma, descobrir o que se passa.
 
fyords:
Da mesma forma, estou a tentar descobrir.
Tanto quanto sei, os eventos de interacção programados são actualmente ignorados no testador. Os eventos personalizados podem ser tratados.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
tol64:
Tanto quanto sei, os eventos relacionados com a interacção com o gráfico são ignorados neste momento no testador. Os eventos personalizados podem ser tratados.

Não me interessa quais, desde que venham:)

Também interessante é que o seu código dá o resultado 0, ou seja, o erro persiste.
PS. Win7 x64 + UAC e não portátil.

 
fyords:

Não me interessa quais, desde que venham:)

Também interessante é que o seu código me dá o resultado 0, ou seja, o erro persiste.
PS. Win7 x64 + UAC e não portátil.

Não recebo quaisquer eventos com este código. Então, em que eventos é que a mensagem é impressa no provador? Até me perguntei, era por isso que queria saber. )) Preciso de um código para o reproduzir.

 
tol64:

Não recebo quaisquer eventos com este código. Então, em que eventos é que a mensagem é impressa no provador? Até me perguntei, foi por isso que perguntei. )) Preciso de código para a reproduzir.

Eu também não o compreendo - já não funciona ))).
Estranho, porque o evento CHARTEVENT_CHART_CHANGE deve vir de qualquer forma no testador. Certo?
 

fyords:
... 

Estranho, porque o evento CHARTEVENT_CHART_CHANGE deve vir de qualquer forma no testador. Certo?
Em tempo real, este evento é gerado quando o gráfico é deslocado e as janelas/sub-janelas são redimensionadas. No testador este evento ainda não funciona (e talvez não o façam de todo). De todos os eventos, apenas os eventos de utilizadores de outros programas podem ser monitorizados por agora.
 

Testei o ExpertMACD Expert Advisor padrão no testador de estratégia, que é entregue juntamente com o MT5, gerando erros:

2013.03.30 19:18:09 Passe genético do núcleo 2 (0, 15) testado com erro "OnInit failed" em 46 ms

2013.03.30 19:18:08 Passe genético Core 1 (0, 13) testado com erro "OnInit failed" em 32 ms

2013.03.30 19:18:07 Passe genético do núcleo 2 (0, 5) testado com erro "OnInit failed" em 0 ms

Descobri ao pesquisar que o erro está no módulo: "SignalMACD" ao optimizar os períodos MACD rápidos e lentos (ao assinalar as caixas nos parâmetros do testador de estratégia).

Alguém já se deparou com tal problema e como lidar com ele? (Quando há apenas uma carraça, funciona de alguma forma, mas há erros assim que se verificam duas carraças)