Errori di sincronizzazione del cloud - pagina 3

 
Clock:

Sembra una grande idea e sono grato per questo suggerimento.

Tuttavia, 3 cose su questo:

1) Come ho detto sopra, ho anche il problema del loop "infinito", ma poiché ho capito da questo thread che "loop infinito" è solo la migliore ipotesi per "un evento ha richiesto più di dieci minuti", accetto che potrebbe essere il mio codice. Uso indicatori abbastanza complessi, e dato che (almeno credo) calcolano tutta la loro storia quando viene creato il loro handle, questo potrebbe (su computer lenti) richiedere più di dieci minuti.

2) Tuttavia! Di solito il mio cloud si blocca dopo 10-15 minuti. Ma ieri sera ha funzionato perfettamente per 8 ore. Nessun singolo crash, anche se non ho cambiato affatto il codice. Strano!

3) E più importante, perché legato al tuo approccio: Quando si rifiuta un agente in base alla sua memoria, l'agente (e per questo l'intera nuvola) non va in crash, l'ho capito. Ma non credo che una macchina più potente proverà di nuovo lo stesso set di parametri, quindi in pratica si perdono i punti dati dell'ottimizzazione, ho ragione? Diresti che questo è il prezzo da pagare?


Sarò curioso di vedere se i miei agenti funzionano ancora una volta che sono tornato dal lavoro...

Ciao Clock,

1) Innanzitutto, a meno che tu non stia usando gli indicatori su, diciamo, 10 anni di dati da 1 milione e che gli indicatori siano incredibilmente complessi, sarei molto sorpreso che, al giorno d'oggi e nell'era della potenza di elaborazione, qualcosa possa richiedere anche solo 5 minuti su un sistema NORMALE. Il motivo per cui sottolineo normale qui è che ho ancora il sospetto che ci sia un certo numero di agenti nella nuvola che sono in esecuzione su macchine che sono o estremamente cariche o semplicemente hanno un brutto caso di Windows (stress post traumatico) blues di rallentamento. E basta un solo agente difettoso per uccidere la vostra ottimizzazione....

2) Ho avuto esattamente la stessa cosa di te - cioè dopo che un'ottimizzazione è stata avviata, un certo numero di agenti cloud restituiva risultati senza problemi. Poi dopo 5-20 minuti o un po' di più a volte, un agente lanciava il temuto errore e BANG - fine dell'ottimizzazione. E ho anche avuto l'ottimizzazione occasionale in cui ha completato senza problemi. MOLTO frustrante perché non si ha alcun accesso ai file di log degli agenti, ai dettagli del sistema, all'uso della CPU ecc. per essere in grado di vedere cosa sta succedendo.

3) Questo è un punto molto interessante che fai. Dalla mia comprensione delle cose, l'ottimizzatore considera una particolare combinazione di parametri "usata" solo quando ha ottenuto i risultati per quella particolare combinazione di parametri, anche se potrei sbagliarmi su questo. Forse qualcuno a MetaQuotes potrebbe commentare questo punto?

Comunque, spero che tu stia facendo progressi! :)

 
angevoyageur:
Quanti agenti sono disponibili quando si rifiutano tutti quelli con meno di 32G di ram?

Ciao,

Sembra una grande quantità di RAM per un PC di tipo consumer, ma il cloud non sembra avere problemi a trovare macchine con queste specifiche. Quando avvio un'ottimizzazione, l'ottimizzatore trova facilmente i 64 agenti iniziali e poi sale abbastanza rapidamente a 128 (a seconda della configurazione dei parametri impostati, ovviamente). Inizialmente ho provato 8GB - l'ottimizzazione ha funzionato più a lungo e spesso è stata completata, ma ho ancora avuto regolarmente un agente che ha prodotto l'errore e, di conseguenza, ucciso l'ottimizzazione. Ho poi provato con 16GB - di nuovo, era meglio ma non impeccabile. Non mi sono preoccupato di provare 24GB - ho pensato di passare direttamente a 32GB e vedere cosa succedeva :) E voilà - ottimizzazioni impeccabili.

Volevo giocare molto di più e vedere se potevo affinare un po' meglio i requisiti di configurazione dell'agente, ma quando ti fanno pagare per giocare, l'incentivo scompare rapidamente :)

 
cowil:

Ciao,

Sembra una grande quantità di RAM per un PC di tipo consumer, ma il cloud non sembra avere problemi a trovare macchine con queste specifiche. Quando avvio un'ottimizzazione, l'ottimizzatore trova facilmente i 64 agenti iniziali e poi sale abbastanza rapidamente a 128 (a seconda della configurazione dei parametri impostati, ovviamente). Inizialmente ho provato 8GB - l'ottimizzazione ha funzionato più a lungo e spesso è stata completata, ma ho ancora avuto regolarmente un agente che ha prodotto l'errore e, di conseguenza, ucciso l'ottimizzazione. Ho poi provato con 16GB - di nuovo, era meglio ma non impeccabile. Non mi sono preoccupato di provare 24GB - ho pensato di passare direttamente a 32GB e vedere cosa succedeva :) E voilà - ottimizzazioni impeccabili.

Volevo giocare molto di più e vedere se potevo affinare un po' meglio i requisiti di configurazione dell'agente, ma quando ti fanno pagare per giocare, l'incentivo scompare rapidamente :)

Sarebbe interessante avere qualche ritorno da Metaquotes. Se una macchina con 16G di ram non è sufficiente per eseguire qualche ottimizzazione c'è qualcosa da indagare. Se ho ben capito, quando si esegue l'ottimizzazione in locale non si ha alcun problema, perché allora quando si utilizza il cloud c'è bisogno di così tanta memoria?
 
angevoyageur:
Sarebbe interessante avere qualche ritorno da Metaquotes. Se una macchina con 16G di ram non è sufficiente per eseguire qualche ottimizzazione c'è qualcosa da indagare. Se ho ben capito, quando si esegue l'ottimizzazione in locale non si ha alcun problema, perché allora quando si utilizza il cloud c'è bisogno di così tanta memoria?

Non ne ho assolutamente idea. La mia macchina locale è una macchina con processore i7 da 8GB, sulla quale MT5 ha installato 8 agenti locali (ovviamente è solo un processore a 4 core, ma con Hyper-Threading, Windows e quindi MT5 lo vedono ovviamente come un processore a 8 core). Quando viene effettuata un'ottimizzazione, gli agenti sembrano utilizzare circa 400 MB di memoria ciascuno, il che ovviamente equivale a circa 3,2 GB di memoria richiesta per gli 8 agenti. Da nessuna parte vicino ai 32 GB....

L'altra cosa a cui stavo pensando, che potrebbe effettivamente essere la causa principale di questo problema, è il fatto che un agente cloud "cattivo" termina l'intera ottimizzazione. Ciò che potrebbe in effetti accadere è che quando il server cloud alloca gli agenti per un lavoro di ottimizzazione (senza che i requisiti di memoria siano dichiarati), lo stesso agente "cattivo" è/sono selezionato/i. Quando i requisiti di memoria vengono dichiarati in OnInit(), gli agenti "cattivi" vengono ignorati perché le scatole su cui sono in esecuzione non soddisfano i requisiti e vengono selezionati solo gli agenti buoni. Pensandoci, sospetto che questo sia probabilmente più il caso.

E sì, ho registrato questo problema con MetaQuotes ma non ho ancora ricevuto risposta.

 

Se OnInit (o qualsiasi altra funzione) viene eseguito per più di 10 minuti anche su un agente lento, è considerato come un loop infinito dannoso per la rete MQL5 Cloud (Si noti che non vi è alcuna limitazione di questo tipo per gli agenti locali e remoti).

Per questo tipo di situazioni, abbiamo implementato il codice di ritorno INIT_AGENT_NOT_SUITABLE per la funzione OnInit. Usandolo, un utente della rete cloud può controllare e rifiutare gli agenti non idonei proprio all'inizio dell'esecuzione di un test.

Puoi considerare questo commento come una risposta ufficiale al tuo ticket di Service Desk. Sappiamo che siete a conoscenza delle informazioni fornite sopra.

Inoltre: In ogni caso, qualsiasi funzione è considerata anormale, inefficace e non ottimale se la sua esecuzione richiede più di 10 minuti anche su un PC più lento.

 
MetaQuotes:

Se OnInit (o qualsiasi altra funzione) viene eseguito per più di 10 minuti anche su un agente lento, è considerato come un loop infinito dannoso per la rete MQL5 Cloud (si noti che non vi è alcuna limitazione di questo tipo per gli agenti locali e remoti).

Per questo tipo di situazioni, abbiamo implementato il codice di ritorno INIT_AGENT_NOT_SUITABLE per la funzione OnInit. Usandolo, un utente della rete cloud può controllare e rifiutare gli agenti non idonei proprio all'inizio dell'esecuzione di un test.

Puoi considerare questo commento come una risposta ufficiale al tuo ticket di Service Desk. Sappiamo che siete a conoscenza delle informazioni fornite sopra.

Inoltre: In ogni caso, qualsiasi funzione è considerata anormale, inefficace e non ottimale se la sua esecuzione richiede più di 10 minuti anche su un PC più lento.

Ciao MetaQuotes,

In primo luogo, grazie mille per i tuoi commenti - molto apprezzati.

Il problema che affronto (e altri apparentemente se guardi indietro su questo post) è che quando un'ottimizzazione viene eseguita utilizzando i miei agenti locali, l'ottimizzazione funziona bene - cioè lo stato "percentuale completata" su ogni agente aumenta costantemente mentre l'ottimizzazione procede. Se il gestore dell'evento OnTick() nel mio Expert contenesse del codice che richiedesse più di un minuto (per non parlare di 10 minuti) per essere completato, sicuramente quelle percentuali di "percentuale completa" si fermerebbero in questi momenti? Non dovrei vedere pause di 10 minuti (o più) in queste percentuali di stato se il mio codice contenesse le forme di looping senza fine a cui alludono gli errori del cloud agent?

 

Bene, dopo molte ore passate a ridurre il mio Expert, sembra che io abbia trovato la fonte dei problemi con gli errori di "loop infinito" di OnInit() o OnTick() - questo è il comando SymbolInfoInteger(). Non so se SymbolInfoDouble() o SymbolInfoTick() causano gli stessi problemi perché non ho ancora avuto modo di sperimentare ulteriormente. Se qualcuno vuole provarlo, eseguite il seguente Expert nell'ottimizzatore, usando gli agenti cloud:

/+------------------------------------------------------------------+
//|                                              MultiSymbolTest.mq5 |
//|                                                                  |
//+------------------------------------------------------------------+
input double var1 = 45;
input double var2 = 54;

input bool onInit = true;
input bool onTick = false;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit() { 

    
    if (onInit) {
    
        string pairsToTrade[] = {"AUDUSD","EURJPY","EURUSD","GBPUSD","AUDJPY","USDJPY","AUDCAD"};
        for (int i=0; i<ArraySize(pairsToTrade); i++) {
            int digits = SymbolInfoInteger(pairsToTrade[i], SYMBOL_DIGITS);
            if (digits == -1)
                return(INIT_FAILED);
        }
    }           

    // Return...
    return(INIT_SUCCEEDED);
}



//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void OnTick() {

    if (onTick) {
    
        string pairsToTrade[] = {"AUDUSD","EURJPY","EURUSD","GBPUSD","AUDJPY","USDJPY","AUDCAD"};
        for (int i=0; i<ArraySize(pairsToTrade); i++) {
            int digits = SymbolInfoInteger(pairsToTrade[i], SYMBOL_DIGITS);
            if (digits == -1)
                return;
        }
    }           

    ExpertRemove();
}    

Selezionate se volete testare OnInit() o OnTick(), date a var1 e var2 valori di start/step/stop sufficienti a generare circa 1000 combinazioni (probabilmente anche meno, ma questo è quello che ho usato io) e accendete l'ottimizzatore. In circa 10 minuti, vedrete l'errore "loop infinito rilevato".

Oh, e la ragione per cui ho messo "ExpertRemove()" alla fine di OnTick() era per mostrare che basta una sola iterazione di OnTick() per generare l'errore.

Inutile dire che l'ho segnalato anche al service desk...

 
Oh, e ho dimenticato di dire che, per qualsiasi ragione, la correzione della memoria che ho fornito sopra sembra risolvere il problema la maggior parte delle volte ma non tutte. Come/perché/che cosa funziona, non lo so. Deve solleticare qualcosa nelle viscere di MT5... :)
 

Posso confermare questo problema:

2013.05.20 14:22:31 MQL5 Cloud Europe 2 passaggi genetici (0, 22) testati con errore "ciclo infinito rilevato nella funzione OnInit, esperto respinto da MQL5 Cloud Network" in 602 sec (PR 140)

 
Bisogno di pensare...
Motivazione: