Erros, bugs, perguntas - página 2148

 
Andrey Khatimlianskii:

Está confirmado?

Não, claro que não. Tudo aqui escrito é uma conclusão independente.

Lembro-me de Renat ou Slava dizerem que os indicadores não são duplicados, mesmo que sejam executados manualmente. O hash dos parâmetros corresponde - a mesma parte de cálculo é utilizada.

Isto não é verdade. E o mais importante, não podia sequer ser verdade.

Executar este indicador manualmente em dois gráficos idênticos

int OnCalculate( const int, const int, const int, const double &[] )
{
  Print(ChartID());
  
  return(0);
}

Se as partes de cálculo fossem as mesmas, não haveria repetições diferentes. Penso que 90% das conclusões expressas são correctas.

 
Nexxtor:

Ajude os autores, ou linguagem MQL5, dependendo de quem está fora do ***, você é tão irritante!!!

IndicatorCreate() diz:

parâmetros_cnt

[em] Número de parâmetros passados na matriz parameters_array[]. Os elementos da matriz têm um tipo especial de estruturaMqlParam. O valor por defeito é zero - os parâmetros não são passados. Se for especificado um número de parâmetros diferente de zero, o parâmetroparameters_array é obrigatório. Pode passar até 256 parâmetros.


Diga-me, já o verificou pessoalmente? Que o indicador com 256 parâmetros será chamado????


Conserte-o!!!

Não funciona? Mostre-me o código que não corre.

E, por favor, menos emoção e mais negócios.

 
fxsaber:

Não é verdade. E, mais importante ainda, nem sequer podia ser verdade.

Executar este indicador manualmente em dois gráficos idênticos

Se as partes calculadas fossem as mesmas, não haveria uma impressão diferente.

Uma conclusão muito difícil para mim.

Porque é que os indicadores devem ver o mesmo gráfico? Porque um algoritmo indicador pode ser construído com base emChartID???

 
fxsaber:

Os EAs no OBJ_CHART certamente não funcionam (ou melhor, não funcionam). Assim, por temporizador, parece estar tudo bem. Talvez nem todos os eventos estejam a funcionar aí.

Os Conselheiros Especialistas em OBJ_CHART começam e trabalham bem. Só lidam com OnChartEvent (personalizado) e podem gerar os seus eventos personalizados para outros gráficos.

 
Andrey Khatimlianskii:

Porque é que os indicadores devem ver o mesmo gráfico?

Os indicadores iCustom não têm o seu próprio gráfico. Mesmo quando adicionado a algum gráfico.

Porque um algoritmo indicador pode ser construído com base em ChartID???

Sim, as funções e eventos do gráfico aplicados ao seu gráfico (indicadores manuais/docâmara) podem ser utilizados para qualquer acção.

 

Erro na Documentação

ChartNavigate

Move o gráfico especificado pelo número especificado de barras em relação à posição especificada do gráfico.

bool  ChartNavigate(
   long  chart_id,     // идентификатор графика
   int   position,     // позиция
   int   shift=0       // значение сдвига
   );

Parâmetros

chart_id

[em] ID do gráfico. 0 significa o gráfico actual.

posição

[em] Posição da carta em relação à qual a carta será deslocada. O valor pode ser um dos valores de enumENUM_CHART_POSITION.

 
Andrey Barinov:

Os conselheiros especializados em OBJ_CHART funcionam e funcionam bem. Só lidam com OnChartEvent (personalizado) e podem gerar os seus próprios eventos personalizados para outros gráficos.

Verificado. Expert\Test.mq5

class CUSTOM
{
public:  
  CUSTOM()
  {
    Print(__FUNCSIG__);
    
    Print(EventSetTimer(1) && EventChartCustom(0, 0, 0, 0, NULL) &&
          MarketBookAdd(_Symbol) && 
          ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, true) &&
          ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true) &&
          ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true) &&
          ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true) &&
          ChartNavigate(0, CHART_BEGIN, 100) &&
          ObjectCreate(0, __FILE__, OBJ_VLINE, 0, 0, 0) &&
          ObjectDelete(0, __FILE__));
    
  }
  ~CUSTOM() { Print(__FUNCSIG__); }
};

const CUSTOM InitDeinit;

void OnTick() { Print(__FUNCSIG__); }
void OnInit() { Print(__FUNCSIG__); }
void OnDeinit( const int ) { Print(__FUNCSIG__); }
void OnChartEvent( const int id, const long&, const double&, const string& ) { Print(__FUNCSIG__ + " " + (string)id) ; }
void OnTimer() { Print(__FUNCSIG__); }
void OnBookEvent( const string& ) { Print(__FUNCSIG__); }


Roteiro

#include <fxsaber\Expert.mqh>  // https://www.mql5.com/ru/code/19003

void OnStart()
{
  if (ObjectCreate(0, __FILE__, OBJ_CHART, 0, 0, 0))
  {
    MqlParam Params[1];
    Params[0].string_value = "Experts\\Test.ex5";

    Print(EXPERT::Run(ObjectGetInteger(0, __FILE__, OBJPROP_CHART_ID), Params));
  }
}


Resultado

Test3 (EURUSD,M1)       true
Test (EURUSD,M1)        void CUSTOM::CUSTOM()
Test (EURUSD,M1)        true
Test (EURUSD,M1)        void OnInit()
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 1000
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnChartEvent(const int,const long&,const double&,const string&) 9
Test (EURUSD,M1)        void OnDeinit(const int)
Test (EURUSD,M1)        void CUSTOM::~CUSTOM()


Conclusão sobre Consultores Especialistas em OBJ_CHART

  • Trabalhará OnInit, OnDeinit, construtor/destrutor global, e OnChartEvent.
  • OnTimer, OnTick e OnBookEvent não funcionam.
  • Apenas CHARTEVENT_CHART_CHANGE e eventos personalizados são capturados.
  • Através da OnChartEvent+EventChartCustom EA pode criar "eventos" para OnTimer e OnTick, mas não para OnBookEvent.
 
No glucotrader 5 o # ficheiro de teste de propriedade não funciona correctamente quando FILE_COMMON é especificado, o ficheiro não abre no agente
 
Anton Ohmat:
Em glucotrader 5 #property tester_file não funciona correctamente quando FILE_COMMON é especificado, o ficheiro não é aberto no agente

Bem, o ficheiro não é retirado da pasta comum (comum para os agentes terminais e locais), mas sim da Sandbox.

 
fxsaber:

Bem, não da pasta comum (comum para os agentes terminais e locais), mas da Sandbox.

Testei-o nos meus servidores remotos - não funciona. A execução só é feita se a máquina local no directório MT mentir ficheiros, COMUM na optimização não vai


tester_file

corda

Nome do ficheiro para o testador, especificando a extensão, entre aspas duplas (como uma cadeia constante). O ficheiro especificado será passado ao tesoureiro para trabalho. Os ficheiros de entrada para testes, se necessário, devem ser sempre especificados