Errori, bug, domande - pagina 202

 
Interesting:

Ora, a differenza di MT4, il periodo non significa il numero di secondi in un periodo.

Leggete più attentamente, ho scritto di _Period, non di PeriodSeconds. E non ingombri la pagina con i suoi errori di percezione, per favore.
 
ANG3110:
Non ha mai mostrato il numero di secondi, anche nel caro MT4... Ma i minuti in MT4 lo hanno mostrato chiaramente. Cosa mostra allora _Period sul grafico H1? Mi sembra un bug serio.
ANG3110:
Leggete attentamente, ho scritto di _Period, non di PeriodSeconds. E non intasate la pagina con i vostri errori di percezione, per favore.
Già fissato. Il punto generale è che usando PeriodSeconds otteniamo esattamente i secondi in un periodo, e poi ci facciamo quello che vogliamo...

Quindi H1 = 16385 non è senza senso, è la rappresentazione numerica di H1 in ENUM_TIMEFRAMES.


Leggi l'aiuto di Period-u

Periodo

Restituisce il valore del timeframe del grafico corrente.

ENUM_TIMEFRAMESPeriodo();

Valore restituito

Contenuto della variabile _Period , che contiene il valore del timeframe del grafico corrente. Ilvalore può essere uno dei valori dell'enumerazione ENUM_TIMEFRAMES.

PS

Così,non restituisce il numero di minuti corrispondenti al periodo (come era in MT4), ma l'elemento dell'enumerazione ENUM_TIMEFRAMES(o la sua rappresentazione numerica, se necessario)...

 
Interesting:
Già corretto. Il punto generale è che usando PeriodSeconds si ottengono esattamente i secondi in un periodo, e poi si fa quello che si vuole con loro...

Quindi H1 = 16385 non è una sciocchezza, ma una rappresentazione numerica di H1 in ENUM_TIMEFRAMES.

Dannazione, che casino. Prima era tutto semplice e facile - bastava scrivere Period() e si ottenevano minuti. Ora ottieni alcuni identificatori di servizio che non ti servono davvero per il tuo lavoro. Ok, cercherò di ottenere i minuti in secondi.
 

Quindi, se richiedo _Period su H1 e ottengo questo ENUM_TIMEFRAMES= 16385, come posso ottenere i minuti da esso?

Anche se, ovviamente, dividere PeriodSeconds()/60 non vale niente. Ma cosa sono questi identificatori e come lavorare con loro?

 
ANG3110:

Quindi, se richiedo _Period su H1 e ottengo questo ENUM_TIMEFRAMES= 16385, come posso ottenere i minuti da esso?

Ho usato questa funzione nella mia libreria di migrazione per 11 mesi e finora ha funzionato bene

//Fumction PeriodToMinute
int PeriodToMinute(ENUM_TIMEFRAMES Value)
{
//----------------------------------------------------------------------------//
//Work variables
int Result; //Returned importance
//----------------------------------------------------------------------------//
Result = PeriodSeconds(Value)/60;
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

ANG3110:

Anche se, naturalmente, dovreste dividere PeriodSeconds()/60 per se stesso. Ma ancora, che tipo di identificatori sono questi e come lavorare con loro.

Questa domanda può essere riferita alle basi dell'OOP. Riguarda gli identificatori e gli enumeratori. Si prega di fare riferimento al Riferimento o a qualsiasi buon libro sulla programmazione C++ per i dettagli.

Questo è già stato implementato in MQL4, ma non è così ovvio.

Ogni identificatore (sia scritto in MQL5 che creato dall'utente) può avere la sua "rappresentazione numerica".

Per dirla in modo semplice (mi spiego meglio che posso)...

Si può pensare che sia per la compatibilità con l'ambiente esterno, per esempio la DLL o un'altra (che non ha idea di MQL e dei suoi identificatori).

Quindi, se avete bisogno di lavorare con un periodo all'interno del programma MQL5, sarebbe ragionevole utilizzare l'identificatore PERIOD_H1 dell'enumerazione ENUM_TIMEFRAMES.

Ma se avete bisogno di dire all'ambiente esterno (per esempio DLL) che stiamo lavorando con il periodo H1, è più facile farlo con la rappresentazione numerica di questo identificatore, nel nostro caso è 16385.

 
ANG3110:

Quindi, se richiedo _Period su H1 e ottengo questo ENUM_TIMEFRAMES= 16385, come posso ottenere i minuti da esso?

Anche se, ovviamente, dividere PeriodSeconds()/60 non vale niente. Ma cosa sono questi identificatori e come dovrei lavorare con loro?

come questo

int minute = PeriodSeconds(_Period)/60;
 
Interesting:

Sto usando questa funzione nella mia libreria di migrazione da 11 mesi ormai, e finora è andata bene

Capito. Grazie per la risposta!
 
sergey1294:

come questo

Grazie anche a te!
 

Sviluppatori.

1. La stringa OHLC inizia ad ammiccare in alcune condizioni. Rivelato durante il test di EA su computer single core (CPU probabilmente sovraccarica)...

2. È possibile mettere l'elenco delle classi e le loro funzionalità (il stuffing) nel navigatore, proprio come si fa in Delphi (perché non è molto comodo lavorare con l'elenco delle procedure e delle funzioni di un modulo)?

 
Ashes:

Tentativo di salvare il rapporto del tester in formato Open XML. Minuti di attesa (Pentium 4, 3.0GHz), l'applicazione non rispondeva, il processo terminal.exe si scatenava nel task manager (circa il 50% della CPU) consumando la RAM (circa 250Mb), Risultato - niente. MT5 risponde solo, nessuna quotazione in arrivo (indicatore di stato della connessione con cerchio grigio che gira). Un secondo tentativo, è lo stesso. La finestra "Strumenti" ha 2 voci di giornale "MemoryException 107878464 bytes not available", il tempo corrispondente al tentativo di ricevere un rapporto in OpenXML.
Il file HTML è stato generato quasi istantaneamente (circa 12 Mb). Ci vuole molto tempo per aprire, ma non è colpa di MT5...

Ripeto. Tutto uguale, ma con build 358. Solo che ci vuole ancora più tempo. C'è una dipendenza dalla dimensione del rapporto - un rapporto corto viene elaborato senza problemi.
Motivazione: