L'articolo è molto utile e vi farò riferimento molte volte per creare i miei database.
È un po' presto per farlo, ma in generale si può già percepire la potenza della quinta versione.
Alessandro, per favore aiutami in questa situazione...
Ho bisogno, ad esempio, di salvare alcuni array in un database. Ho scritto uno script.
Si presenta così:
#property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #include <Object.mqh> #include <Arrays\List.mqh> // collegare i componenti OleDb #include <Ado\Providers\OleDb.mqh> #include <Ado\Data.mqh> double PriceBuffer[]; //+------------------------------------------------------------------+ //| Funzione di avvio del programma di script| //+------------------------------------------------------------------+ void OnStart() { long n1=100; MqlRates rates[]; ArraySetAsSeries(rates,true); double nClose[]; ArrayResize(nClose,n1); ArrayResize(t,n1); CSymbolInfo m_smbinf; m_smbinf.Name(Symbol()); int dg=m_smbinf.Digits(); int copied=CopyRates(Symbol(),0,0,n1,rates); for(int i=0;i<n1;i++) nClose[i]=rates[i].close; // forma la tabella da passare a SaveDataToDb CAdoTable *table=new CAdoTable(); table.Columns().AddColumn("Price",ADOTYPE_DOUBLE); ArrayResize(PriceBuffer,n1); // riempire la tabella con i dati dei buffer for(int i=1; i<n1; i++) { CAdoRecord *row=table.CreateRecord(); row.Values().GetValue(0).SetValue(PriceBuffer[i]); table.Records().Add(row); } }
Ma in fase di compilazione si verifica il seguente errore: "'Values' - cannot call protected member function".
L'errore è relativo alla riga:
row.Values().GetValue(0).SetValue(PriceBuffer[i]);
Sebbene nella funzione CBsvEngine::SaveData(void)
tali righe funzionavano normalmente:
// riempire la tabella con i dati dei buffer for(int i=1; i<TicksInBuffer; i++) { CAdoRecord *row=table.CreateRecord(); row.Values().GetValue(0).SetValue(TickBuffer[i].time); row.Values().GetValue(1).SetValue(TickBuffer[i].bid); row.Values().GetValue(2).SetValue(VolumeBuffer[i]); table.Records().Add(row); }
Ottimo articolo! Purtroppo ho lo stesso problema che Denkir ha commentato nella versione russa di questo articolo.
Non compila dando l'errore:
'Values' - cannot call protected member function.
Associato a queste righe in CBsvEngine::SaveData(void)
Mi piacerebbe davvero che funzionasse. Molto apprezzato!
Non compila dando l'errore:
'Values' - cannot call protected member function.
Associato a queste righe in CBsvEngine::SaveData(void)
row.Values().GetValue(0).SetValue(TickBuffer[i].time); row.Values().GetValue(1).SetValue(TickBuffer[i].bid); row.Values().GetValue(2).SetValue(VolumeBuffer[i]);E anche lo stesso errore associato a numerose chiamate a 'Values()' in CDbDataAdapter::Fill(CAdoTable *table) nel file DbDataAdapter.mqh
Mi piacerebbe davvero che funzionasse. Molto apprezzato!
Automated-Trading:
Purtroppo la build 586 presenta un errore nella chiamata delle funzioni delle DLL a 32 bit. Verrà risolto nella prossima build.
Purtroppo non è stato risolto dopo l'ultimo aggiornamento. Ci sono soluzioni o raccomandazioni? Quanto tempo potrebbe volerci? Mi è stato detto di aspettare la prossima build e questa è arrivata senza risolvere il problema.
Purtroppo la build 586 presenta un errore nella chiamata delle funzioni delle DLL a 32 bit. Verrà risolto nella prossima build.

Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Il nuovo articolo Applicazione Pratica dei Database per l'Analisi dei Mercati è stato pubblicato:
Lavorare con i dati è diventato il compito principale del software moderno, sia per applicazioni standalone che di rete. Per risolvere questo problema è stato creato un software specializzato. Si tratta di Database Management Systems (DBMS), in grado di strutturare, sistematizzare e organizzare i dati per l'archiviazione e l'elaborazione del proprio computer. Per quanto riguarda il trading, la maggior parte degli analisti non utilizza database nel proprio lavoro. Ma ci sono compiti in cui una soluzione del genere dovrebbe essere utile. Questo articolo fornisce un esempio di indicatori, in grado di salvare e caricare dati da database sia con architetture client-server che file-server.
Molto semplice, secondo me. Nell'indicatore vengono chiamate solo due funzioni della classe: ProcessTick() e SaveData(). La funzione ProcessTick() viene utilizzata per i calcoli e la funzione SaveData() è necessaria per reimpostare il buffer con i tic, sebbene non salvi i dati.
Proviamo a compilare e "voilà": l'indicatore inizia a mostrare i valori:
Figura 1. Indicatore BuySellVolume senza collegamento al database su GBPUSD M1
Eccellente! I tick stanno spuntando, l'indicatore sta calcolando. Il vantaggio di tale soluzione: abbiamo bisogno solo dell'indicatore stesso (ex5) per il suo lavoro e niente di più. Tuttavia, quando si modifica il timeframe, o lo strumento, o quando si chiude il terminale, i dati vengono irrimediabilmente persi. Per evitare ciò, vediamo come aggiungere il salvataggio e il caricamento dei dati nel nostro indicatore.
Autore: Alexander