Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1001

 

Potete dirmi per favore perché ricevo degli errori

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 Графический объект не найден

in questo codice

      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 il primo errore è ancora comprensibile - un oggetto non viene trovato, ma l'attuazione della ricerca di un oggetto mancante senza errore non è chiara, il secondo errore non è chiaro, mentre l'oggetto è chiaramente creato - il grafico è formato e la ragione dell'errore non è chiara.

Come eliminare gli errori?

 
Aleksey Vyazmikin:

Potete dirmi per favore perché ricevo degli errori

in questo codice

Se il primo errore è ancora comprensibile - un oggetto non viene trovato, ma l'attuazione della ricerca di un oggetto mancante senza errore non è chiara, il secondo errore non è chiaro, mentre l'oggetto è chiaramente creato - il grafico è formato e la ragione dell'errore non è chiara.

Come eliminare l'errore?

ResetLastError() deve essere fatto prima di chiamare la funzione. Cosa c'è qui:

graphic.Create()

non è chiaro. Se questo è CCanvas, allora il metodo Create() crea una risorsa grafica senza riferimento all'oggetto grafico. E restituisce o vero o falso:

Creare

Crea una risorsa grafica senza legame con un oggetto grafico.

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

Parametri

nome

[Base per il nome della risorsa grafica. Il nome della risorsa è formato durante la creazione aggiungendo una stringa pseudo-casuale.

larghezza

Larghezza [in] Larghezza (dimensione X) in pixel.

altezza

[in] Altezza (dimensione dell'asse Y) in pixel.

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[Metodo di elaborazione del colore. Vedere la descrizione della funzione ResourceCreate() per maggiori dettagli sui metodi di gestione dei colori.

Il valore di ritorno è

true - se ha successo, altrimenti false


In generale, è difficile da capire da quello che avete mostrato.

Ma potete provare in questo modo:

//+------------------------------------------------------------------+
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 avete CGraphic lì, dovete entrare nel codice di Create() per capire cosa restituisce, dato che non c'è una parola al riguardo nell'aiuto:

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

ResetLastError() deve essere eseguito prima che la funzione venga chiamata. Cosa c'è qui:

non è chiaro. Se è CCanvas, il metodo Create() crea una risorsa grafica senza riferimento ad un oggetto grafico. E restituisce o vero o falso:

Creare

Crea una risorsa grafica senza legame con un oggetto grafico.

Parametri

nome

[Base per il nome della risorsa grafica. Il nome della risorsa è formato durante la creazione aggiungendo una stringa pseudo-casuale.

larghezza

Larghezza [in] Larghezza (dimensione X) in pixel.

altezza

[in] Altezza (dimensione dell'asse Y) in pixel.

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[Metodo di elaborazione del colore. Vedere la descrizione della funzione ResourceCreate() per maggiori dettagli sui metodi di gestione dei colori.

Il valore di ritorno è

true - se ha successo, altrimenti false


In generale, è difficile da capire da quello che avete mostrato.

Ma potete provare in questo modo:

Se avete CGraphic lì, dovete entrare nel codice di Create() per capire cosa restituisce, dato che non c'è nessuna parola al riguardo nell'aiuto:

Ho già controllato sopra con il reset degli errori e ho localizzato il luogo dove si verifica l'errore.

Inoltre, si verifica due volte da funzioni diverse - dopo la prima funzione l'errore viene cancellato, ma poi si ripete.

E la mia variante di creazione

Creare

Crea una risorsagrafica collegata all'oggetto grafico.

bool Create (
const longchart,// ID del grafico
const stringname,//name
const intsubwin,// numero di sottofinestra
const intx1,//coordinata x1
const inty1,//coordinata y1
const intx2,//coordinata x2
const inty2//coordinata y1
)

Parametri

grafico

L'identificatore [in] del grafico.

nome

[Nome.

subwin

[Numero di sottofinestra.

x1

[Coordinata X1.

y1

[Coordinata Y1.

x2

[Coordinata X2.

y2

[Coordinata Y2.

 
Aleksey Vyazmikin:

Ho già controllato sopra con un reset degli errori e ho localizzato dove si verifica l'errore

Non si resetta l'errore prima di accedere alla funzione di ricerca degli oggetti.

 
Artyom Trishkin:

Non si resetta l'errore prima di accedere alla funzione di ricerca degli oggetti.

Sì, nella citazione del codice non resetto, come ho già controllato il codice sopra - non c'è nessun errore lì, quindi ho cancellato linee di controllo simili come mostrato qui sotto.

 
Ciao, la mia funzione di avviso legge una stringa da un file e la restituisce in caratteri cinesi o giapponesi, come posso risolvere il problema?
 
Artyom Trishkin:

Non si azzera l'errore prima di chiamare la funzione di ricerca degli oggetti.

Ancora una volta ho deciso di ripetere l'esperimento, ecco il codice

      //--- отключим показ ценового графика
      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();
        }

Ecco il risultato.

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 Графический объект не найден
Qualche idea su cosa abbia causato l'errore?
 
Denis Nikolaev:
Ciao, la mia funzione di avviso legge una stringa da un file e la restituisce in caratteri cinesi o giapponesi, come posso risolvere il problema?

Configurare i font in Windows. Imposta il russo per "Lingua per i programmi che non supportano Unicode".

"Standard regionali" - "Avanzato".

 
Vladimir Karputov:

Configurare i font in Windows. Imposta il russo per "Lingua per i programmi che non supportano Unicode".

"Norme regionali - Avanzate.

Questo non ha funzionato.

Ottengo una traduzione automatica in giapponese o cinese di una riga letta da un file, perché succede questo?

 
Aleksey Vyazmikin:

Ancora una volta ho deciso di ripetere l'esperimento, ecco il codice

Ecco il risultato

Qualche idea su cosa abbia causato l'errore?

Bene, dal momento che hai azzerato l'ultimo errore, guarda nelle zone selvagge di CGraphic dove si verifica questo codice di errore.