Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1001

 

Pode dizer-me por favor porque estou a receber erros

2019.02.17 06:13:28.974 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02.17 06:13:28.983 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден

neste código

      if(ObjectFind(chart,name)<0)
        {
         Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
         graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта 
         Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
        }

Se o primeiro erro ainda for compreensível - um objecto não é encontrado, mas a implementação da procura de um objecto em falta sem um erro não é clara, o segundo erro não é claro, enquanto o objecto é claramente criado - o gráfico é formado e a razão do erro não é clara.

Como se ver livre de erros?

 
Aleksey Vyazmikin:

Pode dizer-me por favor porque estou a receber erros

neste código

Se o primeiro erro ainda for compreensível - um objecto não é encontrado, mas a implementação da procura de um objecto em falta sem um erro não é clara, o segundo erro não é claro, enquanto o objecto é claramente criado - o gráfico é formado e a razão do erro não é clara.

Como se livrar do erro?

ResetLastError() precisa de ser feito antes de chamar a função. O que é isto aqui:

graphic.Create()

não é claro. Se isto for CCanvas, então o método Create() cria um recurso gráfico sem referência ao objecto gráfico. E retorna ou verdadeiro ou falso:

Criar

Cria um recurso gráfico sem ligação a um objecto gráfico.

virtual bool  Create(
   const string       name,                                 // имя
   const int          width,                                // ширина
   const int          height,                               // высота
   ENUM_COLOR_FORMAT  clrfmt=COLOR_FORMAT_XRGB_NOALPHA      // формат
   );

Parâmetros

nome

[em] Base para o nome do recurso gráfico. O nome do recurso é formado durante a criação através da adição de uma cadeia pseudo-aleatória.

largura

Largura [em] Largura (tamanho X) em pixels.

altura

[em] Altura (tamanho do eixo Y) em pixels.

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[em] Método de processamento de cor. Ver a descrição da função ResourceCreate() para mais detalhes sobre os métodos de manuseamento de cores.

O valor de retorno é

verdadeiro - se bem sucedido, caso contrário falso


Geralmente, é difícil de compreender pelo que se mostrou.

Mas pode tentar desta forma:

//+------------------------------------------------------------------+
ResetLastError();
if(ObjectFind(chart,name)<0)
  {
   Print("1 Тут ошибка потому, что объекта нет ещё",GetLastError()," ",cLng::CodeDescription(GetLastError()));
   ResetLastError();
   if(!graphic.Create(chart,name,0,0,0,pix_X,pix_Y))
      Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
  }
//+------------------------------------------------------------------+

Se tiver lá CGraphic, precisa de entrar no código Create() para compreender o que ele retorna, uma vez que não há nenhuma palavra sobre ele na ajuda:

Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
  • www.mql5.com
Стандартная библиотека / Научные графики / CGraphic / Create - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

ResetLastError() deve ser executado antes da função ser chamada. O que está aqui:

não é claro. Se for CCanvas, o método Create() cria um recurso gráfico sem referência a um objecto gráfico. E retorna ou verdadeiro ou falso:

Criar

Cria um recurso gráfico sem ligação a um objecto gráfico.

Parâmetros

nome

[em] Base para o nome do recurso gráfico. O nome do recurso é formado durante a criação através da adição de uma cadeia pseudo-aleatória.

largura

Largura [em] Largura (tamanho X) em pixels.

altura

[em] Altura (tamanho do eixo Y) em pixels.

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[em] Método de processamento de cor. Ver a descrição da função ResourceCreate() para mais detalhes sobre os métodos de manuseamento de cores.

O valor de retorno é

verdadeiro - se bem sucedido, caso contrário falso


Geralmente, é difícil de compreender pelo que se mostrou.

Mas pode tentar desta forma:

Se tiver lá CGraphic, precisa de entrar em código Create() para compreender o que retorna, pois não há uma palavra sobre isso na ajuda:

Já verifiquei acima com a reposição do erro e localizei o local onde o erro ocorre.

Além disso, ocorre duas vezes a partir de funções diferentes - após a primeira função o erro é eliminado, mas depois ocorre novamente.

E a minha variante de criação

Criar

Cria um recursográfico ligado ao objecto gráfico.

bool Criar (
const longchart,// ID do gráfico
const stringname,//nome
const intsubwin,// número de subwindow
const intx1,//coordenado x1
const int inty1,//coordenado y1
const intx2,//coordenado x2
const inty2//coordenado y1
)

Parâmetros

quadro

O identificador [in] do gráfico.

nome

[em] Nome.

subwin

[Número da subjanela.

x1

[Coordenada X1.

y1

[em] Coordenada Y1.

x2

[em] Coordenada X2.

y2

[em] Coordenada Y2.

 
Aleksey Vyazmikin:

verifiquei acima com uma reposição de erro e localizei onde o erro ocorre

Não se reinicia o erro antes de aceder à função de pesquisa de objectos.

 
Artyom Trishkin:

Não se reinicia o erro antes de aceder à função de pesquisa de objectos.

Sim, na citação do código não reinicializo, pois já verifiquei o código acima - não há aí nenhum erro, por isso apaguei linhas de verificação semelhantes, como se mostra abaixo.

 
Olá, a minha função de alerta lê uma cadeia de caracteres de um ficheiro e produz um ficheiro em caracteres chineses ou japoneses, como posso corrigi-la?
 
Artyom Trishkin:

Não se reinicia o erro antes de chamar a função de pesquisa de objectos.

Uma vez mais decidi repetir a experiência, aqui está o código

      //--- отключим показ ценового графика
      ChartSetInteger(0,CHART_SHOW,false);
      long chart=ChartID();

      CGraphic graphic;
         Print("0 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
      if(ObjectFind(chart,name)<0)
        {
         Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
         graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта 
         Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
        }

Aqui está o resultado.

2019.02.17 08:55:19.845 Test_4G_CB (Si Splice,H1)       0 Тут ошибка 0 Операция выполнена успешно
2019.02.17 08:55:19.860 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02.17 08:55:19.860 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден
Alguma ideia do que causou o erro?
 
Denis Nikolaev:
Olá, a minha função de alerta lê uma cadeia de caracteres de um ficheiro e produz um ficheiro em caracteres chineses ou japoneses, como posso corrigi-la?

Configurar as fontes no Windows. Definir Russo para "Língua para programas que não suportam Unicode".

"Normas regionais" - "Avançadas".

 
Vladimir Karputov:

Configurar as fontes no Windows. Definir Russo para "Língua para programas que não suportam Unicode".

"Normas Regionais - Avançadas".

Isto não funcionou.

Recebo uma tradução automática para japonês ou chinês de uma linha lida de um ficheiro, porque é que isto está a acontecer?

 
Aleksey Vyazmikin:

Uma vez mais decidi repetir a experiência, aqui está o código

O resultado é o seguinte

Alguma ideia do que causou o erro?

Bem, uma vez que reiniciou o último erro, procure na zona selvagem da CGraphic onde este código de erro ocorre.