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.1917:56:14.624 SecondExpertDataBase (GBPUSD,H1) 16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:16.627 SecondExpertDataBase (GBPUSD,H1) 16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:18.616 SecondExpertDataBase (GBPUSD,H1) 16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:20.630 SecondExpertDataBase (GBPUSD,H1) 16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:22.078 FirstExpertDataBase (USDCHF,H1) 16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:22.629 SecondExpertDataBase (GBPUSD,H1) 16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:24.071 FirstExpertDataBase (USDCHF,H1) 16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:24.619 SecondExpertDataBase (GBPUSD,H1) 16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:26.070 FirstExpertDataBase (USDCHF,H1) 16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:26.619 SecondExpertDataBase (GBPUSD,H1) 16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:28.079 FirstExpertDataBase (USDCHF,H1) 16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:28.625 SecondExpertDataBase (GBPUSD,H1) 16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:30.079 FirstExpertDataBase (USDCHF,H1) 16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:30.617 SecondExpertDataBase (GBPUSD,H1) 16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:32.069 FirstExpertDataBase (USDCHF,H1) 16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:32.627 SecondExpertDataBase (GBPUSD,H1) 16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:34.073 FirstExpertDataBase (USDCHF,H1) 16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:34.627 SecondExpertDataBase (GBPUSD,H1) 16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:36.616 SecondExpertDataBase (GBPUSD,H1) 16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:38.079 FirstExpertDataBase (USDCHF,H1) 16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:38.615 SecondExpertDataBase (GBPUSD,H1) 16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:40.072 FirstExpertDataBase (USDCHF,H1) 16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.1917:56:40.618 SecondExpertDataBase (GBPUSD,H1) 16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:42.630 SecondExpertDataBase (GBPUSD,H1) 16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.1917:56:44.617 SecondExpertDataBase (GBPUSD,H1) 16:56:44: added 1 record on GBPUSD to timer.sqlite
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...
Chi l'ha capito, è pregato di mostrare l'implementazione di tale compito.
Ci sono due terminali.
È 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.
voidOnStart()
{
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 dati0, // 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.
Venerdì 21 febbraio 2020, verrà rilasciata una versione aggiornata della piattaforma MetaTrader 5. L'aggiornamento contiene le seguenti modifiche:
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. .
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.
.
MQL5: Completamente riprogettata l'integrazione con Python. Sono state aggiunte molte nuove funzioni e la denominazione dei comandi è stata modificata.
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.
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_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.
.
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. .
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 DatabaseOpenconststring table, // nome della tabella per l'inserimento dei daticonststring filename, // nome del file per l'importazione dei datiuint flags, // combinazione di flagconststring separator, // separatore di dati ulong skip_rows, // quante prime righe saltare conststring 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 conststring table_or_sql, // nome della tabella o query SQL conststring filename, // Nome del file CSV per l'esportazione dei dati uint flags, // combinazione di flag conststring 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 DatabaseOpenconststring table_or_sql, // tabella o query SQLuint flags // combinazione di flag
);
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 finestrastring initial_dir, // cartella inizialestring filter, // filtro di estensioneuint flags, // combinazione di flagstring& filenames[], // array con i nomi dei filestring default_filename // nome del file predefinito
);
La nuova funzione consentirà di implementare una comoda interazione dell'utente con il programma MQL5.
.
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.
.
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.
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". .
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.
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. .
MetaEditor: Aggiunta la visualizzazione dei file di database SQLite (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) nel "Navigatore".
MetaEditor: Corretti gli errori durante il salvataggio delle proprietà del progetto. .
Aggiornamento della documentazione.
L'aggiornamento sarà disponibile tramite il sistema LiveUpdate.
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.
Ecco come appare il database in MetaEditor
È possibile utilizzare in µl4 quanto descritto per µl5?
In MQL4 è possibile lavorare con Sqlite3_32.dll nativo attraverso il wrapper per MQL
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-wrapperChi l'ha capito, è pregato di mostrare l'implementazione di tale compito.
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
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.
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?
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:
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:
.
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"..
.
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:
.
.
Nuova denominazione dei comandi
I comandi esistenti sono stati rinominati:
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.
.
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.
.
.
DatabaseImport
Importa i dati da un file in una tabella.
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.
DatabasePrint
Stampa una tabella o il risultato dell'esecuzione di una query SQL nel registro di Expert Advisor.
La nuova funzione consentirà di implementare una comoda interazione dell'utente con il programma MQL5.
.
.
.
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:
.
.
.
.
Commissione
In questa sezione si ha il pieno controllo su come vengono addebitate le commissioni su tutte le operazioni.
.
.
.
.
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?