Errori, bug, domande - pagina 2458

 

Quando sono passato da MQL4 a MQL5 ho incontrato un problema:

Codice:

ResetLastError();

int ObjTotal = ObjectsTotal(0);

int Error = GetLastError();

restituisce:

ObjTotal = 0.

Errore = 4022

Cos'è questo errore e perché non è menzionato nella documentazione?

Ho provato diverse varianti: ObjectsTotal(0, -1, -1), ObjectsTotal(ChartID(), 0, OBJ_TREND), ecc.

Il risultato è lo stesso.

Come farlo funzionare?

Terminale: MetaTrader 5, versione 5.00 build 2025.
 
Игорь Евдокимов:

Consiglio: se volete chiedere qualcosa, inserite il codice COMPLETO, non un pezzo di esso.

Qual è il punto: chiunque prende il tuo codice e lo esegue per conto suo. E quasi nessuno guarda il codice chunky - il codice chunky è irrispettoso.

Esempio del tuo codice:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError();
   int ObjTotal=ObjectsTotal(0);
   int Error=GetLastError();
   Print("ObjectsTotal: ",ObjTotal,", GetLastError: ",Error);
//---
  }
//+------------------------------------------------------------------+

Eseguilo su un grafico che non ha alcun oggetto grafico. Risultato:

2019.05.10 13:26:59.169 1 (EURUSD,H1)   ObjectsTotal: 0, GetLastError: 0

Cioè, non c'è nessun errore.


Usando il terminale:

2019.05.10 13:25:35.665 MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
2019.05.10 13:25:35.668 Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3712 / 8077 Mb, Disk: 77 / 415 Gb, GMT+2
2019.05.10 13:25:35.668 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075
File:
1.mq5  2 kb
 
Vladimir Karputov:

Un consiglio: se volete chiedere qualcosa, inserite il codice COMPLETO, non un pezzo.

Grazie per il consiglio, è quello che farò.

Tuttavia, la questione rimane aperta.

Chiarimento: se il pezzo di codice del post precedente è nella funzione OnDeinit() dell'indicatore, il risultato è questo:

2019.05.10 14:08:20.105 PtS (EURUSD,H1) ObjectsTotal: 0, GetLastError: 4022

Se si esegue lo stesso codice dopo aver rimosso l'indicatore dal grafico, come lo script (1.mq5 del post precedente), si ottiene

2019.05.10 14:08:33.609 1 (EURUSD,H1) ObjectsTotal: 8575, GetLastError: 0

Per favore, aiutatemi a capire il motivo.

Signori sviluppatori! Cos'è questo errore che non si trova nella documentazione?

 
Vladislav Andruschenko :

errore nel tester di strategia durante l'ottimizzazione.

"compito rifiutato dall' agente tester "

Per esempio, se la valuta del suo conto è EUR,

  • EURJPY Nessun problema
  • Errore in GBPJPY


Se la valuta del suo conto è USD

  • USDCAD Nessun problema
  • USDJPY Nessun problema
  • Errore su EURAUD


appare quando si usano altre coppie di valute nel codice.

Nel mio esempio sta usando il calcolo del lotto dinamico



cioè quando l'EA richiede il prezzo di un'altra valuta.

@Vladislav Andruschenko

Ciao, hai avuto qualche risposta o soluzione a questo problema?

 
Vladimir Pastushak:

Quando il programma/periodo viene cambiato, PBB riceve un valore di 10, indipendentemente dal valore che hai specificato nel campo di input.

Al momento della reinizializzazione, è come se fosse la prima esecuzione.

Ci sono due modi per risolvere il tuo problema

1 - Memorizzare il valore PBB nelle variabili globali e ottenere il periodo da lì.

2 - Quando OnChartEvent si innesca, reinizializzare l'indicatore MA e ottenere un nuovo handle...

Controllato tutte le opzioni. Non funziona.

Errore in MQL5.

Non inizializza nuovi valori. Solo con ingresso parametro int PBB_=. Non ci sono altre opzioni. Questo non è affatto buono.

 
Uladzimir Izerski:

Ho controllato tutte le opzioni. Non funziona.

Falla nel programma MQL5.

I nuovi valori non vengono inizializzati. Solo con ingresso int PBB_= parametro. Non ci sono altre opzioni. Questo non è affatto buono.

Tutto va bene in MQL, è solo che non capisci cosa stai facendo nel tuo codice e come tutto funziona...

Ancora una volta, quando chiamateChartSetSymbolPeriod(0,_Symbol,_Period);

Stai resettando tutto a default...

In alternativa, provate l'inite per richiedere un valore dal vostro campo di testo.

Quando avviate l'indicatore per la prima volta, tutto è creato e quando cambiate i dati nel campo, chiamerà la nuova unità e imposterà il valore dal vostro campo di testo...

 
Vladimir Pastushak:

Tutto va bene in MQL, è solo che non capisci cosa stai facendo nel codice e come tutto funziona...

Ancora una volta, quando chiamateChartSetSymbolPeriod(0,_Symbol,_Period);

Stai resettando tutto a default...

In alternativa, provate a interrogare il valore del vostro campo di testo nell'init.

Dopo la logica, il primo avvio dell'indicatore, tutto è creato, ma quando si cambiano i dati nel campo, ci sarà una nuova chiamata nell'unità e l'impostazione del valore dal vostro campo di testo...

Ho provato con il campo di testo e attraverso GlobalVariable, ma non ho mai provato nulla. È silenzioso come in un carro armato.

In un'altra varianteOnCalculate funziona senza problemi.

 
Uladzimir Izerski:

Ho provato sia da un campo di testo che tramite GlobalVariable e qualsiasi altra cosa abbia provato. È silenzioso come un carro armato.

L'altra versione di OnCalculate funziona senza problemi.

Questo significa che stai facendo qualcosa di sbagliato

 
Quando accedo al mio account si apre una finestra e dice che non devo leggere le "righe" non preparate, anche se dice che l'autorizzazione permette la connessione all'account... Cosa devo fare?
 
Vladimir Pastushak:

Allora stai facendo qualcosa di sbagliato.

Hai già pubblicato il codice.

Se io sono inetto, qualcuno deve essere un professionista. Non lo vedo ancora.

Accetto il suo sforzo per trovare una risposta. C'è molto più di questo. Cioè a livello degli sviluppatori.