"Piyasa Analizi için Veritabanlarının Pratik Uygulaması" makalesi için tartışma

 

Yeni makale Piyasa Analizi için Veritabanlarının Pratik Uygulaması yayınlandı:

Verilerle çalışmak, hem bağımsız hem de ağ uygulamaları için modern yazılımların ana görevi haline geldi. Bu sorunu çözmek için özel bir yazılım oluşturuldu. Bunlar, bilgisayar depolama ve işlemeleri için verileri yapılandırabilen, sistematikleştirebilen ve düzenleyebilen Veritabanı Yönetim Sistemleridir (DBMS). Alım satım işlemine gelince, analistlerin çoğu çalışmalarında veritabanlarını kullanmaz. Ancak böyle bir çözümün işe yaraması gereken görevler vardır. Bu makale, hem istemci-sunucu hem de dosya-sunucu mimarileriyle veritabanlarından veri kaydedebilen ve yükleyebilen göstergelere ilişkin bir örnek sağlar.

Bence çok basit. Göstergede sınıfın yalnızca iki işlevi çağrılır: ProcessTick() ve SaveData(). ProcessTick() işlevi hesaplamalar için kullanılır ve verileri kaydetmese de, arabelleği ticklerle sıfırlamak için SaveData() işlevi gereklidir.

Derlemeye çalışalım, "Ve işte!" - Gösterge değerleri göstermeye başladı:


 Şekil 1. GBPUSD M1'deki veritabanına bağlantısı olmayan BuySellVolume göstergesi

Mükemmel! Tickler işaretliyor, gösterge hesaplıyor. Bu tip bir çözümün avantajı çalışması için yalnızca göstergenin kendisine (ex5) ihtiyacımız olması; başka bir şeye ihtiyacımız yok. Ancak, zaman dilimini veya enstrümanı değiştirirken veya terminali kapattığınızda, veriler geri döndürülemez bir şekilde kaybolur. Bunu önlemek için, göstergemize veri kaydetme ve yükleme özelliğini nasıl ekleyebileceğimizi görelim.

Yazar: Alexander

 

Makale çok faydalı ve kendi veritabanlarımı oluşturmak için birçok kez başvuracağım.

Bunun için biraz erken, ancak genel olarak beşinci sürümün gücünü şimdiden hissedebilirsiniz.

 
Alexander, lütfen bu durumda bana yardım et...

Örneğin, bazı dizileri bir veritabanına kaydetmem gerekiyor. Bir betik yazdım.

Şuna benziyor:

#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 bileşenlerini bağlayın
#include <Ado\Providers\OleDb.mqh>
#include <Ado\Data.mqh>

double PriceBuffer[];
//+------------------------------------------------------------------+
//| Betik program başlatma işlevi|
//+------------------------------------------------------------------+
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;
     
// SaveDataToDb'ye aktarılacak tabloyu oluşturun
   CAdoTable *table=new CAdoTable();
   table.Columns().AddColumn("Price",ADOTYPE_DOUBLE);
   ArrayResize(PriceBuffer,n1);
// dable'ı tamponlardan gelen verilerle doldurun
   for(int i=1; i<n1; i++)
     {
      CAdoRecord *row=table.CreateRecord();
      row.Values().GetValue(0).SetValue(PriceBuffer[i]);
      table.Records().Add(row);
     }
  }

Ancak derleme sırasında şu hata oluşuyor: "'Values' - cannot call protected member function".

Hata hatla ilgilidir:

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

CBsvEngine::SaveData(void) fonksiyonunda olmasına rağmen

bu tür hatlar normal şekilde çalıştı:

// dable'ı tamponlardan gelen verilerle doldurun
      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);
        }
 
MT5'ten ADO olmadan MySQL (libmySQL.dll aracılığıyla) ve SQLite(sqlite3.dll aracılığıyla) ile çalışmak için sınıflar var mı?
 
Harika bir makale! Ne yazık ki Denkir'in bu makalenin Rusça versiyonunda yorumladığı gibi aynı sorunu yaşıyorum.

Hata vererek derlenmiyor:
'Values' - cannot call protected member function.

CBsvEngine::SaveData(void) içindeki şu satırlarla ilişkili
row.Values().GetValue(0).SetValue(TickBuffer[i].time);
row.Values().GetValue(1).SetValue(TickBuffer[i].bid);
row.Values().GetValue(2).SetValue(VolumeBuffer[i]);
Ve ayrıca DbDataAdapter.mqh dosyasındaki CDbDataAdapter::Fill(CAdoTable *table) içindeki 'Values()' öğesine yapılan çok sayıda çağrı ile ilişkili aynı hata

Bunu çalıştırmayı gerçekten çok isterim. Çok minnettarım!
 
strateji test cihazında çalıştırılabilir mi? adoSuite'i strateji test cihazında kullandığımda, programı her zaman sonlandırıyor.
 
zephyrrr:

strateji test cihazında çalıştırılabilir mi? adoSuite'i strateji test cihazında kullandığımda, programı her zaman sonlandırıyor.
Maalesef yapı 586'da 32 bit DLL işlevlerinin çağrılmasında bir hata var. Bir sonraki derlemede düzeltilecektir.
 
Automated-Trading:
Maalesef 586 derlemesinde 32-bit DLL fonksiyonlarının çağrılmasında bir hata var. Bir sonraki derlemede düzeltilecektir.
Ne yazık ki son güncellemeden sonra bu sorun çözülmedi. Herhangi bir çözüm veya öneri var mı? Bu ne kadar sürebilir? Bir sonraki derlemeye kadar beklemem söylendi ve sorun çözülmeden geldi.
 
Alexander
  • 2010.04.20
  • www.mql5.com
交易者的个人资料