Discussion de l'article "Application Pratique des Bases de Données pour l'Analyse des Marchés"

 

Un nouvel article Application Pratique des Bases de Données pour l'Analyse des Marchés a été publié :

Travailler avec des données est devenu la tâche principale des logiciels modernes, à la fois pour les applications autonomes et en réseau. Pour résoudre ce problème, un logiciel spécialisé a été créé. Ce sont des Systèmes de Gestion de Bases de Données (SGBD), qui peuvent structurer, systématiser et organiser les données pour leur stockage et leur traitement informatique. Quant au trading, la plupart des analystes n'utilisent pas de bases de données dans leur travail. Mais il y a des tâches où une telle solution devrait être pratique. Cet article fournit un exemple d'indicateurs, qui peuvent enregistrer et charger des données à partir de bases de données à la fois avec des architectures client-serveur et serveur de fichiers.

Très simple, à mon avis. Dans l'indicateur, seules deux fonctions de la classe sont appelées : ProcessTick() et SaveData(). La fonction ProcessTick() est utilisée pour les calculs et la fonction SaveData() est nécessaire pour réinitialiser le tampon avec des tics, bien qu'elle n'enregistre pas les données.

Essayons de compiler et "voila" - l'indicateur commence à afficher des valeurs :

 

 Figure 1. Indicateur BuySellVolume sans lien vers la base de données sur GBPUSD M1

Excellent Les tiques tournent, l'indicateur calcule. L'avantage d'une telle solution - nous n'avons besoin que de l'indicateur lui-même (ex5) pour son travail et rien de plus. Cependant, lors d'un changement de période, d'instrument ou lorsque vous fermez le terminal, les données sont irrémédiablement perdues. Pour éviter cela, voyons comment nous pouvons ajouter des données de sauvegarde et de chargement dans notre indicateur.

Auteur : Alexander

 

L'article est très utile et je m'y référerai souvent pour créer mes propres bases de données.

Il est un peu tôt pour cela, mais en général on peut déjà sentir la puissance de la cinquième version.

 
Alexander, aidez-moi dans cette situation...

J'ai besoin, par exemple, de sauvegarder un tableau dans une base de données. J'ai écrit un script.

Il ressemble à ceci :

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"

#include <Object.mqh>
#include <Arrays\List.mqh>

// connecter les composants OleDb
#include <Ado\Providers\OleDb.mqh>
#include <Ado\Data.mqh>

double PriceBuffer[];
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de 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;
     
// forme le tableau à transmettre à SaveDataToDb
   CAdoTable *table=new CAdoTable();
   table.Columns().AddColumn("Price",ADOTYPE_DOUBLE);
   ArrayResize(PriceBuffer,n1);
// remplir le tableau avec les données des tampons
   for(int i=1; i<n1; i++)
     {
      CAdoRecord *row=table.CreateRecord();
      row.Values().GetValue(0).SetValue(PriceBuffer[i]);
      table.Records().Add(row);
     }
  }

Mais lors de la compilation, l'erreur suivante se produit : "'Values' - cannot call protected member function".

L'erreur est liée à la ligne :

row.Values().GetValue(0).SetValue(PriceBuffer[i]);

Bien que dans la fonction CBsvEngine::SaveData(void)

ces lignes fonctionnaient normalement :

// remplir le tableau avec les données des tampons
      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);
        }
 
Existe-t-il des classes permettant de travailler avec MySQL (via libmySQL.dll) et SQLite(via sqlite3.dll) sans ADO depuis MT5 ?
 
Très bon article ! Malheureusement, j'ai le même problème que Denkir dans la version russe de cet article.

Il ne se compile pas et donne l'erreur :
'Values' - cannot call protected member function.

Associé à ces lignes dans 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]);
Et aussi la même erreur associée à de nombreux appels à 'Values()' dans CDbDataAdapter::Fill(CAdoTable *table) dans le fichier DbDataAdapter.mqh

J'aimerais vraiment que cela fonctionne. Merci beaucoup !
 
Peut-on l'utiliser dans le testeur de stratégie ? Lorsque j'utilise adoSuite dans le testeur de stratégie, le programme s'arrête toujours.
 
zephyrrr:

Le programme peut-il être exécuté dans le testeur de stratégie ? Lorsque j'utilise adoSuite dans le testeur de stratégie, le programme s'arrête toujours.
Malheureusement la build 586 a une erreur dans l'appel des fonctions des DLLs 32-bit. Cette erreur sera corrigée dans la prochaine version.
 
Automated-Trading:
Malheureusement, la version 586 comporte une erreur dans l'appel des fonctions des DLL 32 bits. Cette erreur sera corrigée dans la prochaine version.
Malheureusement, ce problème n'a pas été résolu après la dernière mise à jour. Des solutions ou des recommandations ? Combien de temps cela peut-il prendre ? On m'a dit d'attendre la prochaine version et elle est arrivée sans résoudre le problème.
 
Alexander
  • 2010.04.20
  • www.mql5.com
交易者的个人资料