Discussione sull’articolo "SQLite: Gestione nativa dei database SQL in MQL5"

 

Il nuovo articolo SQLite: Gestione nativa dei database SQL in MQL5 è stato pubblicato:

Lo sviluppo delle strategie di trading è associato alla gestione di grandi quantità di dati. Ora è possibile lavorare con i database utilizzando query SQL basate su SQLite direttamente in MQL5. Una caratteristica importante di questo motore è che l'intero database è collocato in un unico file situato sul PC dell'utente.


Debug delle query SQL in MetaEditor

Tutte le funzioni per lavorare con il database restituiscono il codice di errore in caso di codice non riuscito. Lavorare con loro non dovrebbe causare alcun problema se si seguono quattro semplici regole:

  1. tutti gli handle delle query devono essere distrutti dopo l'uso da parte di DatabaseFinalize();
  2. il database deve essere chiuso con DatabaseClose() prima del completamento;
  3. i risultati dell'esecuzione della query devono essere controllati;
  4. in caso di errore, prima viene distrutta una query, mentre il database viene chiuso successivamente.

La cosa più difficile è capire quale sia l'errore se la query non è stata creata. MetaEditor permette di aprire file *.sqlite e di lavorare con essi utilizzando query SQL. Vediamo come fare utilizzando il file company.sqlite come esempio:

1. Aprire il file company.sqlite nella cartella common del terminale.

2. Dopo aver aperto il database, si può vedere la tabella COMPANY nel Navigatore. Fare doppio click su di esso.

3. La query "SELECT * FROM COMPANY" viene creata automaticamente nella barra di stato.

4. La query viene eseguita automaticamente. Può essere eseguita anche premendo F9 o facendo clic su Esegui.

5. Vedere il risultato dell'esecuzione della query.

6. Se qualcosa non va, gli errori vengono visualizzati nel Diario.


Le query SQL consentono di ottenere statistiche sui campi della tabella, ad esempio la somma e la media. Creiamo le query e verifichiamo se funzionano.

Autore: MetaQuotes

 

Chi l'ha capito è pregato di mostrare l'implementazione di questo compito.

  1. Ci sono due terminali.
  2. È necessario trasferire le quotazioni in tempo reale di un simbolo dal Terminale1 al corrispondente simbolo personalizzato del Terminale2.
 
Grazie per l'articolo e per i buoni esempi di applicazioni utili.
 
fxsaber:

Chi l'ha capito, è pregato di mostrare l'implementazione di tale compito.

  1. Ci sono due terminali.
  2. È necessario trasferire le quotazioni in tempo reale di un simbolo dal Terminale1 al corrispondente simbolo personalizzato del Terminale2.

Nell'ambito di questo compito, ho capito bene che in entrambi i casi (quando si legge la base sul Terminal2 e si scrive sulla base nel Terminal1) deve essere bloccato attraverso il meccanismo delle transazioni?


Qual è il modo più economico per determinare che il database è stato aggiornato?

 
fxsaber:

Nell'ambito di questo compito, ho capito bene che in entrambi i casi (quando si legge la base sul Terminal2 e si scrive sulla base nel Terminal1) dovrebbe essere bloccato attraverso il meccanismo delle transazioni?

No, si tratta di un blocco diverso. Se la base è già aperta in un altro programma MQL5 o MetaEditor, si otterrà l'errore 5124 quando si cerca di modificarla.

 
Rashid Umarov:

No, si tratta di un blocco diverso. Se la base è già aperta in un altro programma MQL5 o in MetaEditor, si otterrà l'errore 5124 quando si cerca di modificarla.

Risulta che lo scambio di dati ha meno possibilità rispetto ai file?

 
fxsaber:

Sembra che la condivisione dei dati abbia meno possibilità rispetto ai file?

dipende dall'implementazione del database stesso

i file sono sempre scomodi - accesso sequenziale e gli stessi problemi quando si lavora con un singolo file

 
fxsaber:

Sembra che la condivisione dei dati abbia meno possibilità rispetto ai file?

SQLite non è un database lato server, ma un database incorporato. Pertanto, non può fornire un uso congiunto e simultaneo da processi diversi.

Il suo scopo è l'uso interno in MQL5 e la condivisione (non l'uso simultaneo)/trasferimento con altri sistemi.

Il vantaggio del database interno è che è disponibile in qualsiasi agente e consente di lavorare comodamente con i dati in remoto e nel tester di strategia.


Nell'ambito di diversi Expert Advisor MQL5 in esecuzione in un terminale, è possibile condividere lo stesso database.

 
Renat Fatkhullin:

SQLite non è un database lato server, ma un database incorporato. Pertanto, non è in grado di garantire la condivisione e l' uso simultaneo da parte di processi diversi.

All'interno di diversi esperti in esecuzione nello stesso terminale, è possibile condividere lo stesso database.

Ora ho capito, grazie.

 

È possibile utilizzare quanto descritto per µl5 in µl4?

Le funzioni e le operazioni di libreria sono compatibili o è solo per µl5?

 
Chiripaha:

È possibile utilizzare in µl4 quanto descritto per µl5?

Le funzioni e le operazioni di libreria sono compatibili o è solo per µl5?

Il supporto nativo di SQLite è presente solo in MetaTrader 5 e MQL5.

Non si tratta di una libreria, ma di una funzionalità standard di MQL5 con una profonda integrazione nell'intero sistema, compresi gli agenti di test delle strategie.