Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1445

 
Evgeny Dyuka #:
soruya cevap verin, lütfen

Sanırım fxsaber bir önyükleyici ve nasıl kullanılacağına dair bir açıklama yayınlamıştı, ancak nerede ve nasıl olduğunu hatırlamıyorum.

Yanılmıyorsam, C:\Users\username\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B terminal klasörüne koymanız gerekiyor.

Ve terminali başlatmadan önce her seferinde botnick 'i çalıştırın.

Çözüm özellikle uygun değil, ancak başka bir şey yoksa, o zaman ...

rem Создали RAM-Drive для Тестера.
imdisk -a -o awe -s 3 G -m Z: -p "/fs:ntfs /q /y /v:MT5Tester"

mkdir z:\Tester
mklink /j Tester z:\Tester

rem Кеш оптимизатора будет сохраняться на диске.
mkdir cache
mklink /j z:\Tester\cache cache

rem Временный RAM-Drive, чтобы на него можно было перенаправить log-папки.
imdisk -a -o awe -s 3 M -m Y: -p "/fs:ntfs /q /y /v:MT5Tester_Logs"

mkdir y:\logs
mklink /j Tester\logs y:\logs

mkdir y:\logs0
mkdir Tester\Agent-127.0.0.1-3000
mklink /j Tester\Agent-127.0.0.1-3000\logs y:\logs0

mkdir y:\logs1
mkdir Tester\Agent-127.0.0.1-3001
mklink /j Tester\Agent-127.0.0.1-3001\logs y:\logs1

mkdir y:\logs2
mkdir Tester\Agent-127.0.0.1-3002
mklink /j Tester\Agent-127.0.0.1-3002\logs y:\logs2

mkdir y:\logs3
mkdir Tester\Agent-127.0.0.1-3003
mklink /j Tester\Agent-127.0.0.1-3003\logs y:\logs3

mkdir y:\logs4
mkdir Tester\Agent-127.0.0.1-3004
mklink /j Tester\Agent-127.0.0.1-3004\logs y:\logs4

mkdir y:\logs5
mkdir Tester\Agent-127.0.0.1-3005
mklink /j Tester\Agent-127.0.0.1-3005\logs y:\logs5

mkdir y:\logs6
mkdir Tester\Agent-127.0.0.1-3006
mklink /j Tester\Agent-127.0.0.1-3006\logs y:\logs6

mkdir y:\logs7
mkdir Tester\Agent-127.0.0.1-3007
mklink /j Tester\Agent-127.0.0.1-3007\logs y:\logs7

mkdir y:\logs8
mkdir Tester\Agent-127.0.0.1-3008
mklink /j Tester\Agent-127.0.0.1-3008\logs y:\logs8

mkdir y:\logs9
mkdir Tester\Agent-127.0.0.1-3009
mklink /j Tester\Agent-127.0.0.1-3009\logs y:\logs9

mkdir y:\logs10
mkdir Tester\Agent-127.0.0.1-3010
mklink /j Tester\Agent-127.0.0.1-3010\logs y:\logs10

mkdir y:\logs11
mkdir Tester\Agent-127.0.0.1-3011
mklink /j Tester\Agent-127.0.0.1-3011\logs y:\logs11

mkdir y:\logs12
mkdir Tester\Agent-127.0.0.1-3012
mklink /j Tester\Agent-127.0.0.1-3012\logs y:\logs12

mkdir y:\logs13
mkdir Tester\Agent-127.0.0.1-3013
mklink /j Tester\Agent-127.0.0.1-3013\logs y:\logs13

mkdir y:\logs14
mkdir Tester\Agent-127.0.0.1-3014
mklink /j Tester\Agent-127.0.0.1-3014\logs y:\logs14

mkdir y:\logs15
mkdir Tester\Agent-127.0.0.1-3015
mklink /j Tester\Agent-127.0.0.1-3015\logs y:\logs15

mkdir y:\logs16
mkdir Tester\Agent-127.0.0.1-3016
mklink /j Tester\Agent-127.0.0.1-3016\logs y:\logs16

mkdir y:\logs17
mkdir Tester\Agent-127.0.0.1-3017
mklink /j Tester\Agent-127.0.0.1-3017\logs y:\logs17

mkdir y:\logs18
mkdir Tester\Agent-127.0.0.1-3018
mklink /j Tester\Agent-127.0.0.1-3018\logs y:\logs18

mkdir y:\logs19
mkdir Tester\Agent-127.0.0.1-3019
mklink /j Tester\Agent-127.0.0.1-3019\logs y:\logs19

mkdir y:\logs20
mkdir Tester\Agent-127.0.0.1-3020
mklink /j Tester\Agent-127.0.0.1-3020\logs y:\logs20

mkdir y:\logs21
mkdir Tester\Agent-127.0.0.1-3021
mklink /j Tester\Agent-127.0.0.1-3021\logs y:\logs21

mkdir y:\logs22
mkdir Tester\Agent-127.0.0.1-3022
mklink /j Tester\Agent-127.0.0.1-3022\logs y:\logs22

mkdir y:\logs23
mkdir Tester\Agent-127.0.0.1-3023
mklink /j Tester\Agent-127.0.0.1-3023\logs y:\logs23

mkdir y:\logs24
mkdir Tester\Agent-127.0.0.1-3024
mklink /j Tester\Agent-127.0.0.1-3024\logs y:\logs24
rem Убили временный RAM-Drive
imdisk -D -m Y:


Kahretsin. Önce bunu gönderdim ve sonra botnik'in test cihazındaki günlükleri yasaklamak için olduğunu gördüm.

Üzgünüm, size yardımcı olamam.

 
Aleksandr Slavskii #:

Sanırım fxsaber bir bootnik ve nasıl kullanılacağına dair bir açıklama yayınladı, ancak nerede ve nasıl olduğunu hatırlamıyorum.

Yanılmıyorsam, bootstrap'ı terminal klasörüne koymanız gerekiyor C:\Users\username\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B.

Ve terminali başlatmadan önce her seferinde botnick 'i çalıştırın.

Çözüm özellikle uygun değil, ancak başka bir çözüm yoksa, o zaman ...


Kahretsin. Önce gönderdim, sonra bootnik'in test cihazında günlükleri yasakladığını gördüm.

Üzgünüm, size yardım edemem.

Önyükleyiciyi çalıştırmak, günlükleri manuel olarak silmekten daha kolay değil mi?


Sitede neler oluyor? Bir resim yapıştırıyorum, orada olması gerekeni görüyorum, ancak bir mesaj yapıştırdığımda farklı bir resim görüyorum....

Ooh! Buldum...

Dosyalar:
01.png  23 kb
 
Aleksandr Slavskii #:

Sanırım fxsaber bir bootnik ve nasıl kullanılacağına dair bir açıklama yayınladı, ancak nerede ve nasıl olduğunu hatırlamıyorum.

Yanılmıyorsam, bootstrap'ı terminal klasörüne koymanız gerekiyor C:\Users\username\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B.

Ve terminali başlatmadan önce her seferinde botnick 'i çalıştırın.

Çözüm özellikle uygun değil, ancak başka bir çözüm yoksa, o zaman ...


Kahretsin. Önce gönderdim, sonra bootnik'in test cihazında günlükleri yasakladığını gördüm.

Üzgünüm, size yardım edemem.

Bir yerde bir kutuyu işaretlemeyi düşündüm ve hepsi bu ))
iyi, buna katlanmak zorundayım,
cevap için teşekkürler.
 
Evgeny Dyuka #:
Bir yerde bir kutuyu işaretleyeceğimi düşündüm ve hepsi bu ))
her neyse, buna katlanmak zorundayım,
cevap için teşekkürler.

Bu kodu kendiniz mi yazdınız? Belki db'nin nasıl çağrıldığını ve çağrıdan sonraki birkaç satırı gösteren bir kod parçası gösterebilirsiniz. Bana öyle geliyor ki print error diyor.....

 
Alexey Viktorov #:

Bu kodu kendiniz mi yazdınız? Belki db'nin nasıl çağrıldığını ve çağrıdan sonraki birkaç satırı gösteren bir kod parçası gösterebilirsiniz. Bana öyle geliyor ki.... bir hata yazdırılması gerektiğini söylüyor.

Görev, geçerli saati her 10 saniyede bir veritabanına yazmaktır. Aynı Uzman Danışman tarafından, ancak 4 grafikte yapılır.
Bunları zamana göre ayırmak için, Sleep() rastgele zaman - 0 ila 3 saniye arasında bir koltuk değneği ekledim.
Ve 10 bağlantı denemesi.
Günlük, en fazla ikinci denemede her şeyin çalıştığını, yani genel olarak güvenilir bir şekilde çalıştığını gösterdi.

.
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void db_update_lastseen(string symbol)
  {
   string comm = "UPDATE LastSeen SET utime='" +
                 IntegerToString((int)TimeGMT()) +
                 "' WHERE who='mt5' AND symbol='" + symbol + "'";
   if(!db_exe("db_update_lastseen", comm))
      Telegram("⚠MT5 DB ERROR db_update_lastseen() " + symbol, DevChannel);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool db_exe(string who, string comm, bool readonly = false)
  {
   ResetLastError();
   int count = 0;
   bool repeat = true;
   int dbmt = INVALID_HANDLE;
   while(repeat)
     {
      count++;
      Sleep((int)((float)MathRand() / 10));
      if(count > 10)
        {
         Print("DB: " + who + " failed with code ", GetLastError(), " DatabaseOpen ", " count: ", count);
         return false;
        }
      if(readonly)
         dbmt = DatabaseOpen(path_to_db, DATABASE_OPEN_READONLY);
      else
         dbmt = DatabaseOpen(path_to_db, DATABASE_OPEN_READWRITE);
      if(dbmt == INVALID_HANDLE)
        {
         DatabaseClose(dbmt);
         continue;
        }
      else
        {
         if(!DatabaseExecute(dbmt, comm))
           {
            DatabaseClose(dbmt);
            continue;
           }
         else
           {
            DatabaseClose(dbmt);
            return true;
           }
        }
     }
   DatabaseClose(dbmt);
   return false;
  }
 
Evgeny Dyuka #:
Görev, geçerli saati her 10 saniyede bir veritabanına yazmaktır. Aynı Uzman Danışman tarafından, ancak 4 grafik üzerinde yapılır.
Bunları zamana göre ayırmak için Sleep() rastgele zaman şeklinde bir koltuk değneği ekledim - 0 ila 3 saniye.
Ve 10 bağlantı denemesi.
Günlük, en fazla ikinci denemede her şeyin çalıştığını, yani genel olarak güvenilir bir şekilde çalıştığını gösterdi.

.

İşte günlüğe yazdırılan satır.

         Print("DB: " + who + " failed with code ", GetLastError(), " DatabaseOpen ", " count: ", count);

Önüne // koyarak yorum yapmak veya tamamen kaldırmak yeterlidir ve başka bir yerde başka bir Print() yoksa tüm sorular kaldırılacaktır;

 
Alexey Viktorov #:

İşte dergiye basılan satır

Önüne // koyarak yorum yapmak veya tamamen silmek yeterlidir ve başka bir yerde başka bir Print() yoksa tüm sorular kaldırılacaktır;

Bu satır, 10 denemede başarısız olursa yazdırılacaktır.
İşlevin kendisi hatayı yazdırır.


 
Evgeny Dyuka #:

İşlev 10 denemeden sonra başarısız olursa bu satır yazdırılır.
Hata, işlevin kendisi tarafından yazdırılır.


Anlıyorum. Db ile çalışmaya çalışırken yazdırılır. Veritabanını kullanmadan önce db tanıtıcısının bir geçerlilik kontrolü olup olmadığını görmemiz gerekir.

Burada fonksiyonu çağırdınız

void db_update_lastseen(string symbol)
  {
   string comm = "UPDATE LastSeen SET utime='" +
                 IntegerToString((int)TimeGMT()) +
                 "' WHERE who='mt5' AND symbol='" + symbol + "'";
   if(!db_exe("db_update_lastseen", comm))
      Telegram("⚠MT5 DB ERROR db_update_lastseen() " + symbol, DevChannel);
  }

Db'yi açmaya çalıştınız, hata aldınız, telegram'a bir mesaj gönderdiniz....

Ve dbmt değişkenini kullandığınız yerde, oradaki değerini kontrol ediyor musunuz?

if(dbmt < 0)
// ничего делать нельзя. База не открыта…

ya da bunun gibi

if(dbmt >= 0)
 {
  // Базу можно использовать.
 }
 
Alexey Viktorov #:

Anlıyorum. Bu, db ile çalışmaya çalışırken yazdırılır. Veritabanını kullanmadan önce db tanıtıcısının bir geçerlilik kontrolü olup olmadığını görmemiz gerekir.

Burada şu fonksiyonu çağırdınız

Db'yi açmaya çalıştınız, hata aldınız, telegram'a bir mesaj gönderdiniz...

Ve dbmt değişkenini kullandığınız yerde değerini kontrol ediyor musunuz?

ya da bunun gibi

Evet, db_exe() içinde kontrol ediyorum ve yeniden denemeye gönderiyorum. Ve db_exe() 10 kez başarısız olursa False döndürür (hiç döndürmedi).
if(dbmt == INVALID_HANDLE)
        {
         DatabaseClose(dbmt);
         continue;
        }
Sanırım taban ile çalışma kütüphanesi bir hata gönderiyor ve görünüşe göre, taban kilitlendiğinde durumu ele almıyor.
Python'da böyle bir sorun oluşmaz, görünüşe göre kuyrukta ve beklemede yerleşiktir.

Cevaplarınız için teşekkür ederim.
 
Evgeny Dyuka #:
Evet, db_exe() içinde kontrol ediyorum ve yeniden denemeye gönderiyorum. Ancak db_exe() 10 kez başarısız olursa False döndürür (asla geri dönmez).
Sanırım base ile çalışma kütüphanesi bir hata gönderiyor ve base kilitli olduğunda durumu ele almıyor gibi görünüyor.
Python'da böyle bir sorun oluşmuyor, görünüşe göre kuyruklama ve bekleme var.

Cevaplarınız için teşekkür ederim.

1. Taban tanıtıcısı alınmazsa, tabanı kapatmanıza gerek yoktur.

2. INVALID_HANDLE alındıysa, neden programın yürütülmesine devam ediliyor? Bence bu durumda iptal etmek, geri dönmek daha iyidir

Şu anda var olmayan bir tabanı tekrar tekrar açıp kapatmaya çalışıyorum ve bir hata çıktısı alamıyorum. Sanırım bu çıktı açılamayan tabana sorgu oluşturma anında geliyor.