Diskussion zum Artikel "Praktische Anwendung von Datenbanken für die Marktanalyse"
Der Artikel ist sehr nützlich, und ich werde ihn bei der Erstellung meiner eigenen Datenbanken noch oft zu Rate ziehen.
Es ist noch ein bisschen früh dafür, aber im Allgemeinen kann man schon die Leistungsfähigkeit der fünften Version spüren.
Ich muss z.B. ein Array in einer Datenbank speichern. Ich habe ein Skript geschrieben.
Es sieht wie folgt aus:
#property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #include <Object.mqh> #include <Arrays\List.mqh> // OleDb-Komponenten verbinden #include <Ado\Providers\OleDb.mqh> #include <Ado\Data.mqh> double PriceBuffer[]; //+------------------------------------------------------------------+ //| Skript-Programmstartfunktion| //+------------------------------------------------------------------+ 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; // bilden die Tabelle, die an SaveDataToDb übergeben werden soll CAdoTable *table=new CAdoTable(); table.Columns().AddColumn("Price",ADOTYPE_DOUBLE); ArrayResize(PriceBuffer,n1); // Füllen der Tabelle mit Daten aus Puffern for(int i=1; i<n1; i++) { CAdoRecord *row=table.CreateRecord(); row.Values().GetValue(0).SetValue(PriceBuffer[i]); table.Records().Add(row); } }
Aber beim Kompilieren tritt der folgende Fehler auf: "'Values' - cannot call protected member function".
Der Fehler bezieht sich auf die Zeile:
row.Values().GetValue(0).SetValue(PriceBuffer[i]);
Obwohl in der Funktion CBsvEngine::SaveData(void)
solche Zeilen normal funktionierten:
// Füllen der Tabelle mit Daten aus Puffern 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); }
Es kompiliert nicht und gibt Fehler:
'Values' - cannot call protected member function.
Assoziiert mit diesen Zeilen 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]);Und auch der gleiche Fehler in Verbindung mit zahlreichen Aufrufen von 'Values()' in CDbDataAdapter::Fill(CAdoTable *table) in der Datei DbDataAdapter.mqh
. Bin Ihnen sehr dankbar!
Kann es im Strategietester ausgeführt werden? Wenn ich adoSuite im Strategietester verwende, bricht das Programm immer ab.
Leider hat der Build 586 einen Fehler beim Aufruf von 32-bit DLLs Funktionen. Dieser wird in der nächsten Build behoben sein.
Neuer Artikel Praktische Anwendung von Datenbanken für die Marktanalyse :
Die Arbeit mit Daten ist zur Hauptaufgabe moderner Software geworden, sowohl autonomer als auch vernetzter Programme. Dazu wurde eine besondere Form von Software entwickelt. Diese Programme zur Verwaltung von Datenbanken (DBMS) ermöglichen die Strukturierung, Systematisierung und Organisation von Daten für ihre Speicherung und Verarbeitung auf Computern. Was den Börsenhandel betrifft, nutzen nur die wenigsten Analysten Datenbanken für ihre Arbeit. Es gibt jedoch Aufgaben, für die eine solche Lösung geeignet sein müsste. In diesem Beitrag wird ein Beispiel für Indikatoren vorgestellt, die sowohl unter einer Client-Server- als auch einer Datei-Server-Architektur Daten in Datenbanken speichern sowie aus diesen laden können.
Autor: Alexander