Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 855

 

È importante per me avere una risposta a queste domande.

Per i metodi CTrade::Buy, CTrade::Sell, CTrade::ClosePosition

Significa che se viene restituito false, Retcode dovrebbe essere ignorato?

Significa che se viene restituito true, Retcode viene sempre riempito con il valore corretto?

Grazie.

 

Colleghi, aiutatemi.

Sto cercando di capire come lavorare con il registro, ho fatto un semplice Expert Advisor per il test. La lettura dei dati dal registro di sistema va senza problemi, ma ci sono problemi di scrittura, MT e crash di memoria... (((

Forse il mio occhio è già zuppo e non vedo l'ovvio...

File:
TestReg.mq5  25 kb
 
Алексей Барбашин:

Colleghi, aiutatemi.

Sto cercando di capire come lavorare con il registro, ho fatto un semplice Expert Advisor per il test. La lettura dei dati dal registro di sistema va senza problemi, ma ci sono problemi di scrittura, MT e crash di memoria... (((

Forse il mio occhio è già zuppo e non vedo l'ovvio...

Qui dovrebbe essere semplice. Prima e dopo ogni chiamata alla funzione API stampa qualcosa nel log. Dopo il crash, i registri mostreranno dove è avvenuto il crash.

 
. ... Rick D. ... .:

Dovrebbe essere abbastanza semplice. Prima e dopo ogni chiamata della funzione API stampa qualcosa nel log. Dopo il crash sarà chiaro dai log dove è avvenuto il crash.

In questo modo il registro non ha nemmeno il tempo di essere scritto, il terminale si chiude con un errore. (( Presumo che ci sia una perdita di memoria. Ma gli oggetti dinamici non sono utilizzati (nuovi). Non so come affrontarlo e cercare questi problemi ;(.

 
Алексей Барбашин:

In questo modo il registro non ha nemmeno il tempo di essere scritto, il terminale si chiude con un errore. (( Presumo che ci sia una perdita di memoria. Ma gli oggetti dinamici non sono utilizzati (nuovi). Non so come affrontarlo e come individuare tali problemi ;(

Potrei aver modificato un po' il tuo esempio.
File:
TestReg.mq5  26 kb
 
. ... Rick D. ... .:
Ho modificato un po' il tuo esempio.

Я ... scioccato, piacevolmente scioccato. Metti la tua modifica su diversi grafici contemporaneamente per garantire un carico asincrono su registry.... Tutto funziona in modo coerente. Hai cambiato il principio del passaggio dei parametri nell'API, cioè, dove si usano i valori di ritorno, lì hai applicato gli array con il passaggio per riferimento, che in mql significa passare un indirizzo, o puntatore in termini di++. Ma ho pensato che questo approccio, descritto 10 anni fa, fosse anacronistico, perché tutti i tipi di dati semplici in API sono comunque passati per riferimento..... Ma a quanto pare è stato un mio errore e una miopia, significa che i tipi semplici non sono così indolori da passare alle API. Grazie mille per avermi indicato la giusta direzione! )))

 
Алексей Барбашин:

Я ... scioccato, piacevolmente scioccato. Metti la tua modifica su diversi grafici contemporaneamente per garantire un carico asincrono su registry.... Tutto funziona in modo coerente. Avete cambiato il principio del passaggio dei parametri nell'API, cioè, dove si usano i valori di ritorno, lì avete applicato gli array con il passaggio per riferimento, che in mql significa passare un indirizzo, o puntatore in termini di++. Ma ho pensato che questo approccio, descritto 10 anni fa, fosse anacronistico, perché tutti i tipi di dati semplici in API sono comunque passati per riferimento.... Ma a quanto pare è stato un mio errore e una miopia, significa che i tipi semplici non sono così indolori da passare alle API. Grazie mille per avermi indicato la giusta direzione! )))

Qualche tempo fa con MT4 mi è stato insegnato a passare puntatori a funzioni API tramite array unidimensionali. Se qualcosa è cambiato al momento, e qualcuno può confermarlo, userò un nuovo approccio.

Ma avevi ancora i tipi incasinati. In particolare, le lunghezze in Windows e in MQL5 hanno dimensioni diverse.
Forse troverete altre differenze.

 
. ... Rick D. ... .:

Una volta in MT4 si insegnava a passare i puntatori alle funzioni API tramite array monodimensionali. Se qualcosa è cambiato al momento e qualcuno può confermarlo, userò il nuovo approccio.

Ma avete anche fatto un po' di confusione con i tipi. In particolare, le lunghezze in Windows e in MQL5 hanno dimensioni diverse.
Forse troverete altre differenze.

Ho visto tutte le differenze))) Grazie mille!

L'unica questione riguarda la dimensione dei dati memorizzati nel registro. Secondo l'esempio della documentazione (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx), possiamo memorizzare un po' più dati che nel file corretto (ushort buff[1024];). Ho capito bene?
RegQueryValueEx function (Windows)
  • msdn.microsoft.com
Retrieves the type and data for the specified value name associated with an open registry key. To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function. Syntax Parameters hKey [in] lpValueName [in, optional] The name of the registry value. If lpValueName is NULL or an...
 
Алексей Барбашин:

Ho visto tutte le differenze))) Grazie mille!

L'unica questione riguarda la dimensione dei dati memorizzati nel registro. Secondo l'esempio della documentazione (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) si possono memorizzare un po' più dati che nel file fisso (ushort buff[1024];). Sto leggendo bene?
Corretto. Ci possono essere più dati. Per dati grandi, è corretto richiedere prima la lunghezza, poi ridimensionare dinamicamente l'array, quindi ottenere tutti i dati.
 
. ... Rick D. ... .:
Giusto. Ci possono essere più dati. Per i grandi dati, è corretto richiedere prima la lunghezza, poi ridimensionare dinamicamente l'array, quindi ottenere tutti i dati.

Hmmm... Probabilmente non ho guardato molto attentamente l'API, ma non ho visto questa funzione.... E probabilmente sarebbe utile.

Altri suggerimenti... forse la domanda è troppo... ridicola... Come faccio a tradurre un numero, ad esempio doppio, in un array di char? Cioè, in alcune API è richiesto di passare i numeri come puntatore. I puntatori sono passati come array unidimensionali... È chiaro che con le stringhe sono previste le funzioni StringToShortArray e StringToCharArray, ma con i numeri non ho ancora capito come convertirli in array di byte (char).