"SQLite: MQL5'te SQL veritabanlarıyla yerel olarak çalışma" makalesi için tartışma - sayfa 2

 

Renat Fatkhullin:

Bir terminalde başlatılan farklı MQL5 Uzman Danışmanlarında aynı veritabanını paylaşabilirsiniz.
.

Bir terminalde aynı veritabanına sahip iki Uzman Danışmanın çalışmasını test ettim. Hatasız çalışıyor - her iki Uzman Danışman da verileri 2 saniyelik bir zamanlayıcı ile bir dosyaya yazıyor.

Dosyalar eklenmiştir, yalnızca Uzman Danışman adına göre farklılık gösterirler.

2020.02.19 17:56:14.624 SecondExpertDataBase (GBPUSD,H1)        16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:16.627 SecondExpertDataBase (GBPUSD,H1)        16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:18.616 SecondExpertDataBase (GBPUSD,H1)        16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:20.630 SecondExpertDataBase (GBPUSD,H1)        16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:22.078 FirstExpertDataBase (USDCHF,H1)         16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:22.629 SecondExpertDataBase (GBPUSD,H1)        16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:24.071 FirstExpertDataBase (USDCHF,H1)         16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:24.619 SecondExpertDataBase (GBPUSD,H1)        16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:26.070 FirstExpertDataBase (USDCHF,H1)         16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:26.619 SecondExpertDataBase (GBPUSD,H1)        16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:28.079 FirstExpertDataBase (USDCHF,H1)         16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:28.625 SecondExpertDataBase (GBPUSD,H1)        16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:30.079 FirstExpertDataBase (USDCHF,H1)         16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:30.617 SecondExpertDataBase (GBPUSD,H1)        16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:32.069 FirstExpertDataBase (USDCHF,H1)         16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:32.627 SecondExpertDataBase (GBPUSD,H1)        16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:34.073 FirstExpertDataBase (USDCHF,H1)         16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:34.627 SecondExpertDataBase (GBPUSD,H1)        16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:36.616 SecondExpertDataBase (GBPUSD,H1)        16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:38.079 FirstExpertDataBase (USDCHF,H1)         16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:38.615 SecondExpertDataBase (GBPUSD,H1)        16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:40.072 FirstExpertDataBase (USDCHF,H1)         16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:40.618 SecondExpertDataBase (GBPUSD,H1)        16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:42.630 SecondExpertDataBase (GBPUSD,H1)        16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:44.617 SecondExpertDataBase (GBPUSD,H1)        16:56:44: added 1 record on GBPUSD to timer.sqlite


Veritabanının MetaEditor'da nasıl göründüğü aşağıda açıklanmıştır


 
Chiripaha:

µl5 için anlatılanları µl4'te kullanmak mümkün mü?

MQL4'te, MQL için sarmalayıcı aracılığıyla yerel Sqlite3_32.dll ile çalışabilirsiniz

/*
 * MT4 için SQLite arayüzü
 */

#import "sqlite3_wrapper.dll"
int sqlite_exec (string db_fname, string sql);
int sqlite_table_exists (string db_fname, string table);
int sqlite_query (string db_fname, string sql, int& cols[]);
int sqlite_next_row (int handle);
string sqlite_get_col (int handle, int col);
int sqlite_free_query (int handle);
#import

Bu, MQL için bir sarmalayıcıdır, SQLite3Wrapper.dll ile karıştırmayın

Ancak hala çevrimiçi olup olmadığını bilmiyorum, daha önce kullanmıştım.

UPD: https: //github.com/Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
  • Shmuma
  • github.com
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...
 
fxsaber:

Bunu kim çözdü, lütfen böyle bir görevin uygulamasını gösterin.

  1. İki Terminal vardır.
  2. Bir sembolün gerçek zamanlı kotasyonlarını Terminal1'den Terminal2'nin ilgili özel sembolüne aktarmak gerekir.

Başka bir nüans daha var - veritabanına değeri artan tutarlı verileri kaydetmek, tırnak işaretleri gibi dağılmamak (artan bir tarihle) - ÇOK pahalı bir işlem. Ağaç dengeli değildir, bir dal sonsuza kadar büyür ve motor ağacı düzenli olarak yeniden dengeler (bu çöp toplamadan daha kötüdür). Belki de bu sadece indeksli tablo için geçerlidir, artık hatırlamıyorum. Ya da belki de kullanmadığım birkaç yıl içinde çoktan çözülmüştür. Denemem gerekecek. Belki geliştiriciler bile bunu analiz eder, bununla ilgileniyor olmalılar.

 

DatabaseImport()

basit senaryo

void OnStart()
  {
  string filename="DOMdb.db";
  int database=DatabaseOpen(filename, DATABASE_OPEN_READWRITE  );
  DatabaseImport(database,             // DatabaseOpen'da alınan veritabanı tanıtıcısı
                     "DOMtb",             // veri ekleme için tablo adı
                     "AllDOM.csv",          // verileri içe aktarmak için dosya adı
                       0,             // bayrak kombinasyonu
                      ";",         // veri ayırıcı 
                        0,         // kaç ilk satırın atlanacağı 
                      "//"     // yorumları tanımlayan bir karakter dizisi
   );
   
  }

2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5'in desteklenmeyen yeni bir sürümü var, lütfen istemci terminalinizi güncelleyin

sürüm 5 yapı 2323 en son meta düzenleyici aynı ve hata ayıklama çalışmıyor.

tamamlanmamış bir şey mi var?

 

DatabaseImport özelliği henüz herkese açık olarak yayınlanmadı.

Lütfen sürüm için bekleyin.

 
Belki konuyla ilgili değil ama: Geliştiricilerin neden MS SQL Server bağlantısını henüz uygulamadıklarını merak ediyorum?
 
Rashid Umarov:

DatabaseImport işlevi henüz kamuya açıklanmamıştır.

Lütfen sürüm için bekleyin.

sürüm 5 yapı 2326 aynı şey, bu yüzden kararlı bir sürümü ne zaman bekleyeceksiniz?

 
IuriiPrugov:

sürüm 5 yapı 2326 aynı şey yani kararlı bir sürüm için beklemek ve ne zaman?

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerini test etme üzerine forum.

MetaTrader 5 yapı 2340'ın yeni sürümü: Test cihazında hesap ayarlarını yönetme ve Python ile entegrasyonu genişletme

MetaQuotes, 2020.02.20 14:55

21 Şubat 2020 Cuma günü, MetaTrader 5 platformunun güncellenmiş bir sürümü yayınlanacak. Güncelleme aşağıdaki değişiklikleri içeriyor:

  1. MetaEditor: SQLite veritabanlarıyla rahatça çalışma yeteneği eklendi.

    Önceki platform güncellemesinde, doğrudan MQL5'ten SQLite veritabanlarıyla çalışma desteği ekledik. Artık ana işlevler MetaEditor kullanıcı arayüzü üzerinden kullanılabilir:

    .
    • Veritabanı oluşturma ve veritabanlarına bağlanma
    • Tabloları ve hızlı veri sorgusunu görüntüleme
    • SQL sorguları oluşturma ve yürütme, değişiklikleri geri alma

    Nasıl çalışır
    Veritabanlarını hızlı bir şekilde oluşturmak için "MQL5 Sihirbazı "nı kullanın. Burada hemen ilk tabloyu oluşturabilir ve alanlarının bir listesini tanımlayabilirsiniz.




    Bir veritabanı oluşturduktan sonra, "Navigator "un yeni bir bölümüne gideceksiniz. Verilerle ilgili tüm çalışmalar bu bölümden gerçekleştirilir.

    Sol kısımda, veritabanı tabloları görüntülenir. İlk 1.000 kaydı hızlı bir şekilde sorgulamak için tablo adına çift tıklayın. Burada ayrıca başka veritabanları oluşturabilir ve açabilir ve tablolarla çalışabilirsiniz.

    Düzenleyicinin ana bölümü veritabanıyla çalıştığınız yerdir: tabloyu verilerle doldurun, arama ve seçim yapın, SQL sorguları girin, vb.
    .



    MetaTrader 5'te veritabanlarıyla çalışma hakkında daha fazla ayrıntı için lütfen"SQLite: MQL5'te SQL Veritabanlarıyla Yerel Çalışma" makalesini okuyun.

    .
  2. MetaEditor: Çok dilli projeler için destek eklemeye devam ediyoruz. Bu sürümde Python komut dosyalarıyla çalışmak için işlevleri genişlettik:

    .
    • Artık bunları "MQL5 Sihirbazı" aracılığıyla rahatça oluşturabilir, gerekli kütüphanelere olan bağımlılıkları hemen koda dahil edebilirsiniz.
    • Bunlar için gezgine özel simgeler ve düzenleyiciye sözdizimi vurgulaması eklendi.
    • MetaEditor aracılığıyla kod çalıştırılırken, Python konsolundan (stdout, stderr) gelen mesajlar "Hatalar" bölümünde görüntülenir.




    Komut dosyasını düzenleyicide çalıştırmak için "Derle" ye tıklayın:
    .





    Python ile çalışmak için, MetaEditor'daki "Ayarlar / Derleyiciler" bölümünde yolunu belirtmeyi unutmayın. Ve MetaTrader 5 kütüphanesi ile çalışmak için şu komutla yükleyin:
    .
    pip install MetaTrader 5
    Belgelerde Python ile entegrasyon hakkında daha fazla bilgi edinin.

    .
  3. MQL5: Python ile entegrasyon tamamen yeniden tasarlandı. Birçok yeni özellik eklendi ve komut isimlendirmesi değiştirildi.

    Yeni komut isimlendirmesi
    Mevcut komutlar yeniden adlandırıldı:
    MT5Initialize       -> initialize
    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

    Yeni komutlar
    Desteklenen komutların listesi büyük ölçüde genişletildi. İşlem yapma ve işlem geçmişiyle çalışma, finansal araçlar ve cari hesap hakkında bilgi alma işlevleri eklendi.

    • account_info() - mevcut hesap hakkında bilgi alır. AccountInfoInteger, AcountInfoDouble ve AccountInfoString'in bir benzeri.
    • positions_total() - açık pozisyonların sayısını alır. PositionsTotal'ın bir benzeri.
    • positions_get(symbol, ticket) - açık pozisyonları sembole veya bilete göre alır.
    • orders_total() - emir sayısını alır. OrdersTotal'ın bir benzeri.
    • orders_get(symbol, ticket) - açık emirleri sembole veya bilete göre alır.
    • history_orders_total(from, to) - belirli bir zaman aralığında geçmişteki emirlerin sayısını alır.
    • history_orders_get(from, to, position, ticket) - geçmişten belirli bir zaman aralığındaki siparişleri bilete göre veya pozisyona göre filtreleyerek alır.
    • history_deals_total() - geçmişteki anlaşma sayısını alır. HistoryDealsTotal'ın bir benzeri.
    • history_deals_get(from, to, position, ticket) - Belirli bir zaman aralığında geçmişteki anlaşmaları bilete göre veya pozisyona göre filtreleyerek alır.
    • symbol_info(symbol) - bir finansal araç hakkında bilgi alma. SymbolInfoInteger, SymbolInfoDouble, SymbolInfoString'in bir benzeri.
    • symbol_info_tick(symbol) - sembole göre son tıklamayı alır. SymbolInfoTick'in bir benzeri.
    • symbol_select(symbol, enable) - "Market Watch" içinde sembolü etkinleştirir/devre dışı bırakır. SymbolSelect'in bir benzeri.
    • order_check(request) - bir emir için marjı kontrol eder. OrderCheck'in bir benzeri.
    • order_send(request) - sunucuya bir emir gönderir. OrderSend'in bir benzeri.
    • order_calc_margin(action, symbol, volume, price) - emir için marj hesaplaması. OrderCalcMargin'in bir benzeri.
    • order_calc_profit(action, symbol, volume, price_open, price_close) - kar hesaplaması. OrderCalcProfit'in bir benzeri.
      .

    Grafiklerde Py thon komut dosyaları çalıştırma
    Artık Python komut dosyaları, normal MQL5 programlarına benzer şekilde doğrudan platformdaki grafiklerde çalıştırılabilir. "Navigator "da özel simgelerle görüntüleneceklerdir.
    .



    Komut dosyası mesajları "Araçlar / Uzmanlar" bölümünde görüntülenecektir. Komut dosyası MetaTrader 5 kütüphanesini kullanıyorsa, enstrüman, hesap ve işlem hakkında bilgi alabilecektir.

    Python komut dosyaları, diğer MQL5 komut dosyaları ve Uzman Danışmanlarla paralel olarak aynı grafik üzerinde çalıştırılabilir. Yürütülmesi döngüye girmişse bir komut dosyasını durdurmak için, onu grafikten kaldırmanız yeterlidir.

    Ek koruma
    Üçüncü taraf Python kütüphanelerini kullanırken hesaplarınızı daha fazla korumak için terminal ayarlarına "Harici Python API aracılığıyla otomatik ticareti devre dışı bırak" seçeneği eklendi.
    .




    Python komut dosyalarının yalnızca bu seçenek açıkça devre dışı bırakıldığında işlem yapmasına izin verilecektir.

    .
  4. MQL5: MQL5 programlarının yeniden başlatılması ve MQL5 programlarından özel göstergelerin yeniden oluşturulması önemli ölçüde hızlandırıldı. Bazı durumlarda hız yüzlerce kat artmıştır.
    .
  5. MQL5: Veritabanlarıyla çalışmak için fonksiyonlar eklendi:

    DatabaseImport
    Verileri bir dosyadan bir tabloya aktarır.
    long  DatabaseImport(
       int           database,          // DatabaseOpen'da alınan veritabanı tanıtıcısı
       const string  table,             // veri ekleme için tablo adı
       const string  filename,          // verileri içe aktarmak için dosya adı
       uint          flags,             // bayrak kombinasyonu
       const string  separator,         // veri ayırıcı 
       ulong         skip_rows,         // kaç ilk satırın atlanacağı 
       const string  skip_comments      // yorumları tanımlayan bir karakter dizisi
       );

    DatabaseExport
    Bir tabloyu veya SQL sorgusu yürütme sonucunu bir CSV dosyasına aktarır. Dosya UTF-8 kodlamasında oluşturulur.
    long  DatabaseExport( 
       int           database,           // DatabaseOpen'da alınan veritabanı tanıtıcısı 
       const string  table_or_sql,       // tablo adı veya SQL sorgusu 
       const string  filename,           // Veri aktarımı için CSV dosya adı 
       uint          flags,              // bayrak kombinasyonu 
       const string  separator           // CSV dosyasında veri ayırıcı 
       );

    DatabasePrint
    Bir tabloyu veya SQL sorgusu yürütmesinin sonucunu Expert Advisor günlüğüne yazdırır.
    long  DatabasePrint(
       int           database,          // DatabaseOpen'da alınan veritabanı tanıtıcısı
       const string  table_or_sql,      // tablo veya SQL sorgusu
       uint          flags              // bayrak kombinasyonu
       );

  6. MQL5: Bir dosya veya klasör oluşturmak/açmak için sistem diyaloğunu çağıran FileSelectDialog işlevi eklendi.
    int  FileSelectDialog(
       string   caption,              // pencere başlığı
       string   initial_dir,          // başlangıç klasörü
       string   filter,               // uzatma filtresi
       uint     flags,                // bayrak kombinasyonu
       string&  filenames[],          // dosya adlarını içeren dizi
       string   default_filename      // varsayılan dosya adı
       );
    Yeni işlev, MQL5 programı ile uygun kullanıcı etkileşiminin uygulanmasına izin verecektir.

    .
  7. MQL5: DEAL_FEE - bir işlem gerçekleştirmek için yapılan ödeme - ENUM_DEAL_PROPERTY_DOUBLE numaralandırmasına eklendi. Aslında bu, bir broker tarafından alınabilecek ayrı bir komisyon türüdür.

    .
  8. Tester: Stratejileri test ederken kendi yatırım hesabı ayarlarınızı belirleme özelliği eklendi - yatırım limitleri, marjin ayarları ve komisyonlar. Böylece, brokerlerin farklı işlem koşullarını simüle etmek için daha fazla olanak elde edersiniz.
    .




    Genel ayarlar
    Bu bölümde, hesabınızda aynı anda sahip olabileceğiniz maksimum açık emir ve pozisyon sayısını ayarlayabilirsiniz. Ayrıca burada, test edilen programın işlem yapmasına izin verilmeyeceği oturumları ayarlayabilirsiniz.


    Marjin
    Burada marjinin nasıl ayrılacağını ve test sırasında hangi pozisyon muhasebe sisteminin kullanılacağını tamamen kontrol edebilirsiniz:

    .
    • Risk Yönetimi - risk yönetimi modeli: OTC ve borsada işlem gören, netleştirme ve riskten korunma. Bunlar hakkında ayrıntılı bilgi Yardım'da mevcuttur.
      .
    • "Margin call" seviyesi - hesaptaki fon seviyesi, ulaşıldığında Margin call durumuna geçer.
    • "Stop out" seviyesi - hesabın emirleri geri çekmeye ve alım satım pozisyonlarını kapatmaya zorlandığı fon seviyesi. Her iki seviye de yüzde ve para cinsinden belirtilebilir. İlk durumda, seviyeler hesaptaki "Fonlar" göstergesinin değeri olarak tanımlanır. "Yüzde" seçeneği seçilirse, seviyeler hesaptaki "Marjin Seviyesi" göstergesinin değeri olarak tanımlanır (Fonlar/Marjin*100).
    • Gerçekleşmemiş - bu alan mevcut gerçekleşmemiş kar/zararın serbest marjda nasıl muhasebeleştirileceğini belirtir:
      .
      • Gerçekleşmemiş kar/zararı kullanmayın - hesaplamada açık pozisyonları dikkate almayın.
      • Gerçekleşmemiş kar/zararı kullan - hesaplamada açık pozisyonlardaki zarar ve karı kullanın.
      • Gerçekleşmemiş kâr kullanın - sadece kârı kullanın.
      • Gerçekleşmemiş zararı kullan - sadece zararı kullan.
    • Günlük sabit - bu alan, işlem günü boyunca tüccar tarafından sabitlenen kar/zararın serbest marjda nasıl dikkate alınacağını belirtir:
      .
      • Günlük sabit kar/zarar kullan - serbest marjda işlem günü boyunca sabitlenen kar ve zararı dikkate alın.
      • Günlük sabit zararı kullanın - serbest marjda yalnızca işlem günü boyunca sabitlenen zararı dikkate alın. Gün boyunca biriken kar ayrı bir hesap alanında ("Kilitli") sabitlenir. İşlem gününün sonunda, birikmiş kar serbest bırakılır (sıfırlanır) ve hesap bakiyesine yansıtılır (serbest marjda muhasebeleştirilir).
    • Birikmiş kârı gün sonunda serbest bırak - bu seçenek yalnızca "Günlük sabit zararı kullan" seçeneği etkinleştirilmişse kullanılabilir. Etkinleştirilirse, işlem gününün sonunda gün içinde biriken kar serbest bırakılacak ve bakiyeye kaydedilecektir (ve buna göre serbest marjda muhasebeleştirilecektir). Aksi takdirde - olmayacaktır.


    Komisyon
    Bu bölümde tüm işlemlerden nasıl komisyon alınacağı üzerinde tam kontrole sahipsiniz.

    .
    • Komisyonlar tek veya çok seviyeli olabilir, yani işlem hacmi/cirosundan bağımsız olarak aynı miktarda tahsil edilebilir veya büyüklüklerine bağlı olarak değişebilir. İlgili bilgiler şartnamede gösterilir.
    • Komisyonlar bir işlemin gerçekleştirilmesinin hemen ardından veya bir işlem gününün/ayının sonunda tahsil edilebilir.
    • Komisyonlar işlemin yönüne bağlı olarak alınabilir: giriş için, çıkış için veya her iki işlem türü için.
    • Komisyonlar lot başına veya işlem başına alınabilir.
    • Komisyonlar farklı miktarlarda tahsil edilebilir: para, yüzde veya pip cinsinden.



  9. Test Cihazı: "Piyasa İzleme "den tüm semboller üzerinde birkaç test geçişi yapıldığında, "Piyasa Tarama" modunda optimize edilmiş ve önemli ölçüde hızlandırılmış çalışma.
    .
  10. Tester: Pip cinsinden kar hesaplanırken, bir işlemin veya pozisyonun boyutu artık dikkate alınmaktadır. Önceden, hesaplama hacim dikkate alınmadan yapılıyordu - bir lot için olduğu gibi.
  11. Tester: Optimizasyon sonuçları grafik yönetimi iyileştirildi. Normal bir optimizasyon grafiğini yakınlaştırırken, artık kaydırmak mümkündür. Grafiğin bir noktasına çift tıklandığında artık geçişler tablosunda ilgili sonuç vurgulanıyor.
    .
  12. MetaEditor: SQLite veritabanı dosyalarının (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) "Navigator "da görüntülenmesi eklendi.
  13. MetaEditor: Proje özelliklerini kaydederken oluşan hatalar düzeltildi.
    .
  14. Güncellenmiş belgeler.

Güncelleme LiveUpdate sistemi aracılığıyla sunulacaktır.


 

kararlı sürüm 5 yapı 2340 DatabaseImport yürütme sırasında aynı DatabaseImport'u gösterir

2020.02.22 14:01:42.338 MQL5 'DOMcopy.ex5'in desteklenmeyen yeni bir sürümü var, lütfen istemci terminalinizi güncelleyin

 

Merhaba!

İndikatörde bir veritabanına bağlantı oluşturmaya çalıştım, ancak bazı nedenlerden dolayı çalışmadı.

Neden hiçbir yerde yazmıyor, hangi programlarda veritabanlarını kullanabilirim?