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

 

Renat Fatkhullin:

All'interno di diversi Expert Advisor MQL5 lanciati in un terminale, è possibile condividere lo stesso database.
.

Ho testato il funzionamento di due Expert Advisor con lo stesso database in un terminale. Funziona senza errori - entrambi gli Expert Advisor scrivono i dati in un file con un timer di 2 secondi.

I file sono allegati e differiscono solo per il nome dell'Expert Advisor.

2020.02.19 17:56:14.624 SecondExpertDataBase (GBPUSD,H1)        16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:16.627 SecondExpertDataBase (GBPUSD,H1)        16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:18.616 SecondExpertDataBase (GBPUSD,H1)        16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:20.630 SecondExpertDataBase (GBPUSD,H1)        16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:22.078 FirstExpertDataBase (USDCHF,H1)         16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:22.629 SecondExpertDataBase (GBPUSD,H1)        16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:24.071 FirstExpertDataBase (USDCHF,H1)         16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:24.619 SecondExpertDataBase (GBPUSD,H1)        16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:26.070 FirstExpertDataBase (USDCHF,H1)         16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:26.619 SecondExpertDataBase (GBPUSD,H1)        16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:28.079 FirstExpertDataBase (USDCHF,H1)         16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:28.625 SecondExpertDataBase (GBPUSD,H1)        16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:30.079 FirstExpertDataBase (USDCHF,H1)         16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:30.617 SecondExpertDataBase (GBPUSD,H1)        16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:32.069 FirstExpertDataBase (USDCHF,H1)         16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:32.627 SecondExpertDataBase (GBPUSD,H1)        16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:34.073 FirstExpertDataBase (USDCHF,H1)         16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:34.627 SecondExpertDataBase (GBPUSD,H1)        16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:36.616 SecondExpertDataBase (GBPUSD,H1)        16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:38.079 FirstExpertDataBase (USDCHF,H1)         16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:38.615 SecondExpertDataBase (GBPUSD,H1)        16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:40.072 FirstExpertDataBase (USDCHF,H1)         16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:40.618 SecondExpertDataBase (GBPUSD,H1)        16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:42.630 SecondExpertDataBase (GBPUSD,H1)        16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:44.617 SecondExpertDataBase (GBPUSD,H1)        16:56:44: added 1 record on GBPUSD to timer.sqlite


Ecco come appare il database in MetaEditor


 
Chiripaha:

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

In MQL4 è possibile lavorare con Sqlite3_32.dll nativo attraverso il wrapper per MQL

/*
 * Interfaccia SQLite per MT4
 */

#import "sqlite3_wrapper.dll"
int sqlite_exec (string db_fname, string sql);
int sqlite_table_exists (string db_fname, string table);
int sqlite_query (string db_fname, string sql, int& cols[]);
int sqlite_next_row (int handle);
string sqlite_get_col (int handle, int col);
int sqlite_free_query (int handle);
#import

Questo è un wrapper per MQL, non confonderlo con SQLite3Wrapper.dll

Non so se sia ancora online, ma io lo usavo prima.

UPD: https: //github.com/Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
  • Shmuma
  • github.com
Database file is by default stored to . If you specify a full path as database filename, it's used. Terminal data path TERMINAL_DATA_PATH can be known by the following instruction. Open MT4 Open [File] menu Click "Open Data Folder" Sample Many sample scripts in under . Precautions Argument mess MT4 build 610 has a weird bug when dll function...
 
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.

C'è un'altra sfumatura: salvare nel database dati coerenti con un valore crescente, che non si disperdono, come le quotazioni (con una data crescente) - un'operazione MOLTO costosa. L'albero non è bilanciato, un ramo cresce all'infinito e il motore lo riequilibra regolarmente (è peggio della raccolta dei rifiuti). Forse questo vale solo per la tabella indicizzata, non ricordo più. O forse, nei pochi anni in cui non l'ho usato, il problema è già stato risolto. Dovrò provarlo. Forse anche gli sviluppatori lo analizzeranno, dovrebbero essere interessati.

 

Importazione del database()

semplice script

void OnStart()
  {
  string filename="DOMdb.db";
  int database=DatabaseOpen(filename, DATABASE_OPEN_READWRITE  );
  DatabaseImport(database,             // handle del database ricevuto in DatabaseOpen
                     "DOMtb",             // nome della tabella per l'inserimento dei dati
                     "AllDOM.csv",          // nome del file per l'importazione dei dati
                       0,             // combinazione di flag
                      ";",         // separatore di dati 
                        0,         // quante prime righe saltare 
                      "//"     // una stringa di caratteri che definisce i commenti
   );
   
  }

2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5' ha una versione più recente non supportata, si prega di aggiornare il terminale del client

la versione 5 build 2323 dell'ultimo meta-editor è la stessa e il debug non funziona.

è qualcosa di incompiuto?

 

Lafunzione DatabaseImport non è ancora stata rilasciata al pubblico.

Si prega di attendere il rilascio.

 
Forse non è nell'argomento, ma: Mi chiedo perché gli sviluppatori non abbiano ancora implementato la connessione a MS SQL Server.
 
Rashid Umarov:

La funzione DatabaseImport non è ancora stata rilasciata al pubblico.

Si prega di attendere il rilascio.

versione 5 build 2326 stessa cosa, quindi attendere una versione stabile quando?

 
IuriiPrugov:

versione 5 build 2326 la stessa cosa che è quello di attendere una versione stabile e quando?

Forum sul trading, sui sistemi di trading automatico e sul test delle strategie di trading.

Nuova versione di MetaTrader 5 build 2340: gestione delle impostazioni del conto nel tester e ampliamento dell'integrazione con Python

MetaQuotes, 2020.02.20 14:55

Venerdì 21 febbraio 2020, verrà rilasciata una versione aggiornata della piattaforma MetaTrader 5. L'aggiornamento contiene le seguenti modifiche:

  1. MetaEditor: aggiunta la possibilità di lavorare comodamente con i database SQLite.

    Nel precedente aggiornamento della piattaforma, abbiamo aggiunto il supporto per lavorare con i database SQLite direttamente da MQL5. Ora le funzioni principali sono disponibili attraverso l'interfaccia utente di MetaEditor:

    .
    • Creazione e connessione ai database
    • Visualizzazione di tabelle e interrogazioni rapide
    • Creazione ed esecuzione di query SQL, rollback delle modifiche

    Come funziona
    Per creare rapidamente i database, utilizzare la "Procedura guidata MQL5". Qui è possibile creare immediatamente la prima tabella e definire un elenco di campi.




    Dopo aver creato un database, si accede a una nuova sezione del "Navigatore". Tutto il lavoro con i dati viene eseguito da questa sezione.

    Nella parte sinistra sono visualizzate le tabelle del database. Per interrogare rapidamente i primi 1.000 record, fare doppio clic sul nome della tabella. Qui è anche possibile creare e aprire altri database e lavorare con le tabelle.

    La parte principale dell'editor è quella in cui si lavora con il database: si riempiono le tabelle di dati, si fanno ricerche e selezioni, si inseriscono query SQL, ecc.
    .



    Per maggiori dettagli sul lavoro con i database in MetaTrader 5, leggete l'articolo"SQLite: lavorare nativamente con i database SQL in MQL5".

    .
  2. MetaEditor: Continuiamo ad aggiungere il supporto per i progetti multilingue. In questa versione abbiamo ampliato le funzioni per lavorare con gli script Python:

    .
    • Ora è possibile crearli comodamente attraverso il "MQL5 Wizard", includendo immediatamente nel codice le dipendenze dalle librerie necessarie.
    • Sono state aggiunte icone speciali per gli script nel navigatore e l'evidenziazione della sintassi nell'editor.
    • Quando si esegue lo script attraverso MetaEditor, i messaggi della console Python (stdout, stderr) vengono visualizzati nella sezione "Errori".




    Per eseguire lo script nell'editor, fare clic su "Compila":
    .





    Per lavorare con Python, non dimenticate di specificare il percorso nella sezione "Impostazioni / Compilatori" di MetaEditor. Per lavorare con la libreria di MetaTrader 5, installatela con il comando:
    .
    pip install MetaTrader 5
    Per saperne di più sull'integrazione con Python, consultare la documentazione.

    .
  3. MQL5: Completamente riprogettata l'integrazione con Python. Sono state aggiunte molte nuove funzioni e la denominazione dei comandi è stata modificata.

    Nuova denominazione dei comandi
    I comandi esistenti sono stati rinominati:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    Nuovi comandi
    L'elenco dei comandi supportati è stato notevolmente ampliato. Sono state aggiunte funzioni per il trading e per lavorare con la storia del trading, per ottenere informazioni sugli strumenti finanziari e sul conto corrente.

    • account_info() - per ottenere informazioni sul conto corrente. Analogo di AccountInfoInteger, AcountInfoDouble e AccountInfoString.
    • positions_total() - riceve il numero di posizioni aperte. Analogo di PositionsTotal.
    • positions_get(symbol, ticket) - per ottenere le posizioni aperte per simbolo o ticket.
    • orders_total() - per ottenere il numero di ordini. Analogo di OrdersTotal.
    • orders_get(symbol, ticket) - ottiene gli ordini aperti per simbolo o ticket.
    • history_orders_total(from, to) - per ottenere il numero di ordini nella cronologia in un intervallo di tempo specificato.
    • history_orders_get(from, to, position, ticket) - per ottenere gli ordini dalla cronologia in un intervallo di tempo specificato per ticket o con filtro per posizione.
    • history_deals_total() - per ottenere il numero di offerte nella cronologia. Un analogo di HistoryDealsTotal.
    • history_deals_get(from, to, position, ticket) - per ottenere offerte dalla cronologia in un intervallo di tempo specificato, per ticket o con filtro per posizione.
    • symbol_info(symbol) - per ottenere informazioni su uno strumento finanziario. Analogo di SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString.
    • symbol_info_tick(symbol) - ottiene l'ultimo tick per simbolo. Analogo di SymbolInfoTick.
    • symbol_select(symbol, enable) - abilita/disabilita il simbolo nel "Market Watch". Analogo di SymbolSelect.
    • order_check(request) - verifica il margine di un ordine. Analogo di OrderCheck.
    • order_send(request) - invio di un ordine al server. Analogo di OrderSend.
    • order_calc_margin(action, symbol, volume, price) - calcolo del margine per l'ordine. Analogo di OrderCalcMargin.
    • order_calc_profit(azione, simbolo, volume, prezzo_apertura, prezzo_chiusura) - calcolo del profitto. Un analogo di OrderCalcProfit.
      .

    Esecuzione di script Python sui grafici
    Ora gli script Python possono essere eseguiti direttamente sui grafici della piattaforma, come i normali programmi MQL5. Saranno visualizzati con icone speciali nel "Navigatore".
    .



    I messaggi degli script saranno visualizzati nella sezione "Strumenti / Esperti". Se lo script utilizza la libreria MetaTrader 5, sarà in grado di ricevere informazioni sullo strumento, sul conto e sul trade.

    Gli script Python possono essere eseguiti sullo stesso grafico in parallelo con altri script MQL5 e Expert Advisor. Per interrompere l'esecuzione di uno script, è sufficiente rimuoverlo dal grafico.

    Protezione aggiuntiva
    Per proteggere ulteriormente i vostri conti quando utilizzate librerie Python di terze parti, è stata aggiunta l'opzione "Disabilita il trading automatico tramite API Python esterne" alle impostazioni del terminale.
    .




    Gli script Python potranno fare trading solo se questa opzione è esplicitamente disabilitata.

    .
  4. MQL5: Il rilancio dei programmi MQL5 e la ricreazione di indicatori personalizzati da programmi MQL5 sono stati notevolmente accelerati. In alcuni casi, la velocità è aumentata di centinaia di volte.
    .
  5. MQL5: Aggiunte funzioni per lavorare con i database:

    DatabaseImport
    Importa i dati da un file in una tabella.
    long  DatabaseImport(
       int           database,          // handle del database ricevuto in DatabaseOpen
       const string  table,             // nome della tabella per l'inserimento dei dati
       const string  filename,          // nome del file per l'importazione dei dati
       uint          flags,             // combinazione di flag
       const string  separator,         // separatore di dati 
       ulong         skip_rows,         // quante prime righe saltare 
       const string  skip_comments      // una stringa di caratteri che definisce i commenti
       );

    DatabaseExport
    Esporta una tabella o il risultato dell'esecuzione di una query SQL in un file CSV. Il file viene creato con codifica UTF-8.
    long  DatabaseExport( 
       int           database,           // handle del database ricevuto in DatabaseOpen 
       const string  table_or_sql,       // nome della tabella o query SQL 
       const string  filename,           // Nome del file CSV per l'esportazione dei dati 
       uint          flags,              // combinazione di flag 
       const string  separator           // separatore di dati nel file CSV 
       );

    DatabasePrint
    Stampa una tabella o il risultato dell'esecuzione di una query SQL nel registro di Expert Advisor.
    long  DatabasePrint(
       int           database,          // handle del database ricevuto in DatabaseOpen
       const string  table_or_sql,      // tabella o query SQL
       uint          flags              // combinazione di flag
       );

  6. MQL5: Aggiunta la funzione FileSelectDialog che richiama la finestra di dialogo del sistema per creare/aprire un file o una cartella.
    int  FileSelectDialog(
       string   caption,              // titolo della finestra
       string   initial_dir,          // cartella iniziale
       string   filter,               // filtro di estensione
       uint     flags,                // combinazione di flag
       string&  filenames[],          // array con i nomi dei file
       string   default_filename      // nome del file predefinito
       );
    La nuova funzione consentirà di implementare una comoda interazione dell'utente con il programma MQL5.

    .
  7. MQL5: DEAL_FEE - pagamento per la conduzione di una transazione - è stato aggiunto all'enumerazione ENUM_DEAL_PROPERTY_DOUBLE. In effetti, si tratta di un tipo di commissione separata che può essere addebitata da un broker.

    .
  8. Tester: è stata aggiunta la possibilità di impostare le impostazioni del proprio conto di trading quando si testano le strategie: limiti di trading, impostazioni del margine e commissioni. In questo modo, si hanno ancora più possibilità di simulare le diverse condizioni di trading dei broker.
    .




    Impostazioni generali
    In questa sezione è possibile impostare il numero massimo di ordini e posizioni aperti contemporaneamente sul conto. Inoltre, è possibile impostare le sessioni in cui il programma testato non può operare.


    Margine
    Qui è possibile controllare completamente come verrà riservato il margine e quale sistema di contabilità delle posizioni verrà utilizzato durante i test:

    .
    • Gestione del rischio - modello di gestione del rischio: OTC e exchange-traded, con compensazione e copertura. Informazioni dettagliate al riguardo sono disponibili nella Guida.
      .
    • Livello di "Margin call" - livello di fondi sul conto che, una volta raggiunto, passa allo stato di Margin call.
    • Livello "Stop out" - livello di fondi al quale il conto è costretto a ritirare gli ordini e a chiudere le posizioni di trading. Entrambi i livelli possono essere specificati in percentuale e in denaro. Nel primo caso, i livelli sono definiti come il valore dell'indicatore "Fondi" sul conto. Se si seleziona l'opzione "Percentuale", i livelli sono definiti come il valore dell'indicatore "Livello di margine" sul conto (Fondi/Margine*100).
    • Non realizzato - questo campo specifica come gli attuali profitti/perdite non realizzati saranno contabilizzati nel margine libero:
      .
      • Non utilizzare profitti/perdite non realizzati - non tenere conto delle posizioni aperte nel calcolo.
      • Usa profitti/perdite non realizzati - utilizza nel calcolo le perdite e i profitti delle posizioni aperte.
      • Utilizza il profitto non realizzato - utilizza solo il profitto.
      • Usa perdita non realizzata - usa solo la perdita.
    • Fisso giornaliero - questo campo specifica come i profitti/perdite fissati dal trader durante la giornata di trading saranno considerati nel margine libero:
      .
      • Usa profitto/perdita fissi giornalieri - tiene conto del profitto e della perdita fissati durante la giornata di trading nel margine libero.
      • Usa la perdita fissa giornaliera - considera solo la perdita fissata durante la giornata di trading nel margine libero. Durante la giornata il profitto accumulato viene fissato in un campo del conto separato ("Bloccato"). Alla fine della giornata di trading, il profitto accumulato viene rilasciato (azzerato) e si riflette sul saldo del conto (contabilizzato nel margine libero).
    • Rilasciare il profitto accumulato alla fine della giornata - questa opzione è disponibile solo se è attivata l'opzione "Usa perdita fissa giornaliera". Se è attivata, alla fine della giornata di trading il profitto accumulato durante la giornata verrà rilasciato e registrato sul saldo (e di conseguenza contabilizzato nel margine libero). In caso contrario, non lo sarà.


    Commissione
    In questa sezione si ha il pieno controllo su come vengono addebitate le commissioni su tutte le operazioni.

    .
    • Le commissioni possono essere singole o multilivello, ossia possono essere addebitate nella stessa misura indipendentemente dal volume/fatturato della transazione o variare a seconda della loro entità. Le informazioni pertinenti sono riportate nelle specifiche.
    • Le commissioni possono essere addebitate immediatamente al momento dell'esecuzione di una transazione o alla fine di un giorno/mese di negoziazione.
    • Le commissioni possono essere applicate a seconda della direzione della transazione: per l'entrata, per l'uscita o per entrambi i tipi di transazione.
    • Le commissioni possono essere applicate per lotto o per operazione.
    • Le commissioni possono essere addebitate in diversi importi: in denaro, in percentuale o in pips.



  9. Tester: lavoro ottimizzato e notevolmente accelerato nella modalità "Scansione del mercato", quando vengono effettuati diversi passaggi di prova su tutti i simboli del "Market Watch".
    .
  10. Tester: quando si calcola il profitto in pip, ora si tiene conto della dimensione di un'operazione o di una posizione. In precedenza, il calcolo veniva effettuato senza tenere conto del volume - come per un lotto.
  11. Tester: è stata migliorata l'ottimizzazione dei risultati della gestione dei grafici. Quando si esegue lo zoom su un grafico di ottimizzazione regolare, è ora possibile farlo scorrere. Un doppio clic su un punto del grafico evidenzia ora il risultato corrispondente nella tabella dei passaggi.
    .
  12. MetaEditor: Aggiunta la visualizzazione dei file di database SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) nel "Navigatore".
  13. MetaEditor: Corretti gli errori durante il salvataggio delle proprietà del progetto.
    .
  14. Aggiornamento della documentazione.

L'aggiornamento sarà disponibile tramite il sistema LiveUpdate.


 

versione stabile 5 build 2340 DatabaseImport mostra lo stesso DatabaseImport in fase di esecuzione

2020.02.22 14:01:42.338 MQL5 'DOMcopy.ex5' ha una versione più recente non supportata, aggiornare il terminale del cliente

 

Ciao!

Ho provato a creare una connessione ad un database nell'indicatore, ma per qualche motivo non ha funzionato.

Perché non è scritto da nessuna parte, in quali programmi posso usare i database?