Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1445

 
Evgeny Dyuka #:
Beantworten Sie die Frage, bitte

Ich glaube, fxsaber hat einen Bootloader und eine Beschreibung, wie man ihn benutzt, gepostet, aber ich weiß nicht mehr, wo und wie.

Wenn ich mich nicht irre, musst du ihn in den Terminalordner C:\Users\username\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B legen.

Und führen Sie das Botnick jedes Mal aus, bevor Sie das Terminal starten.

Die Lösung ist nicht besonders bequem, aber wenn es keine andere gibt, dann ...

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:


So ein Mist. Erst habe ich es gepostet, und dann habe ich gesehen, dass der Botnik zum Verbannen von Logs im Tester ist.

Sorry, ich kann dir nicht helfen.

 
Aleksandr Slavskii #:

Ich glaube, fxsaber hat einen Bootnik und eine Beschreibung seiner Verwendung gepostet, aber ich weiß nicht mehr, wo und wie.

Wenn ich mich nicht irre, müssen Sie den Bootstrap in den Terminal-Ordner C:\Users\username\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B legen.

Und führen Sie das Botnick jedes Mal aus, bevor Sie das Terminal starten.

Die Lösung ist nicht besonders bequem, aber wenn es keine andere gibt, dann ...


Shit. Erst habe ich es gepostet, und dann habe ich gesehen, dass der bootnik die Logs im Tester verbietet.

Es tut mir leid, ich kann dir nicht helfen.

Ist es nicht einfacher, den Bootloader zu starten, als die Logs manuell zu löschen?


Was passiert auf der Website? Wenn ich ein Bild einfüge, sehe ich das Bild, das dort sein sollte, aber wenn ich eine Nachricht einfüge, sehe ich ein anderes Bild....

Ooh! Ich hab's...

Dateien:
01.png  23 kb
 
Aleksandr Slavskii #:

Ich glaube, fxsaber hat einen Bootnik und eine Beschreibung seiner Verwendung gepostet, aber ich weiß nicht mehr, wo und wie.

Wenn ich mich nicht irre, müssen Sie den Bootstrap in den Terminal-Ordner C:\Users\username\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B legen.

Und führen Sie das Botnick jedes Mal aus, bevor Sie das Terminal starten.

Die Lösung ist nicht besonders bequem, aber wenn es keine andere gibt, dann ...


Shit. Erst habe ich es gepostet, und dann habe ich gesehen, dass der bootnik die Logs im Tester verbietet.

Es tut mir leid, ich kann dir nicht helfen.

Ich dachte, ich muss irgendwo ein Häkchen setzen und das war's ))
Nun ja, ich muss mich damit abfinden,
Danke für die Antwort.
 
Evgeny Dyuka #:
Ich dachte, ich würde irgendwo ein Kästchen ankreuzen und das war's.))
Wie auch immer, ich werde mich damit abfinden müssen,
Danke für die Antwort.

Hast du den Code selbst geschrieben? Vielleicht können Sie einen Teil des Codes zeigen, wie db aufgerufen wird und ein paar Zeilen nach dem Aufruf. Irgendetwas scheint mir, dass es heißt print error.....

 
Alexey Viktorov #:

Haben Sie diesen Code selbst geschrieben? Vielleicht können Sie einen Teil des Codes zeigen, wie db aufgerufen wird und ein paar Zeilen nach dem Aufruf. Irgendwie scheint es mir, als ob es heißt, einen Fehler zu drucken: ....

Die Aufgabe ist es, alle 10 Sekunden die aktuelle Zeit in die Datenbank zu schreiben. Dies geschieht durch denselben Expert Advisor, aber auf 4 Charts.
Um sie zeitlich zu trennen, habe ich eine Krücke in Form von Sleep() random time hinzugefügt - von 0 bis 3 Sekunden.
Und 10 Verbindungsversuche.
Das Log zeigte, dass höchstens beim zweiten Versuch alles funktioniert, d.h. im Allgemeinen funktioniert es zuverlässig.

.
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 #:
Die Aufgabe ist es, die aktuelle Zeit in die Datenbank alle 10 Sekunden zu schreiben. Dies geschieht durch denselben Expert Advisor, aber auf 4 Charts.
Um sie zeitlich zu trennen, fügte ich eine Krücke in Form von Sleep() random time hinzu - von 0 bis 3 Sekunden.
Und 10 Versuche, eine Verbindung herzustellen.
Log zeigte, dass höchstens beim zweiten Versuch alles funktioniert, d.h. im Allgemeinen funktioniert es zuverlässig.

.

Hier ist also die Zeile, die im Log ausgegeben wird.

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

Es genügt, sie durch Voranstellen von // auszukommentieren oder ganz zu entfernen, und alle Fragen werden entfernt, wenn es nirgendwo sonst ein Print() gibt;

 
Alexey Viktorov #:

Hier ist die Zeile, die in der Zeitschrift gedruckt wird

Es genügt, sie durch Voranstellen von // auszukommentieren oder sie ganz zu löschen, und alle Fragen werden entfernt, wenn es nirgendwo sonst ein Print() gibt;

Diese Zeile wird gedruckt, wenn 10 Versuche fehlschlagen.
Die Funktion selbst gibt den Fehler aus.


 
Evgeny Dyuka #:

Diese Zeile wird ausgegeben, wenn die Funktion nach 10 Versuchen fehlschlägt.
Der Fehler wird von der Funktion selbst ausgegeben.


Ich verstehe. Er wird gedruckt, wenn man versucht, mit db zu arbeiten. Wir müssen sehen, ob es eine Gültigkeitsprüfung des db-Handles gibt, bevor wir die Datenbank benutzen.

Hier riefen Sie die Funktion

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);
  }

Sie haben versucht, die db zu öffnen, bekamen einen Fehler und schickten eine Nachricht an telegram....

Und wo Sie die Variable dbmt verwenden, überprüfen Sie dort ihren Wert?

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

oder wie folgt

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

Ich sehe. Dies wird gedruckt, wenn Sie versuchen, mit db zu arbeiten. Wir müssen sehen, ob es eine Gültigkeitsprüfung des db-Handles gibt, bevor wir die Datenbank benutzen.

Hier haben Sie die Funktion

Sie haben versucht, die db zu öffnen, bekamen einen Fehler, schickten eine Nachricht an telegram...

Und wo Sie die Variable dbmt verwenden, prüfen Sie ihren Wert?

oder wie folgt

Ja, ich prüfe ihn in db_exe() und schicke ihn an retry. Und db_exe() gibt False zurück, wenn es 10 Mal fehlschlägt (es hat es nie zurückgegeben).
if(dbmt == INVALID_HANDLE)
        {
         DatabaseClose(dbmt);
         continue;
        }
Ich denke, dass die Bibliothek der Arbeit mit der Basis einen Fehler sendet und, es scheint, es nicht die Situation zu behandeln, wenn die Basis gesperrt ist.
In Python ein solches Problem nicht auftritt, offenbar ist es in Warteschlangen und Warten gebaut.

Vielen Dank für Ihre Antworten.
 
Evgeny Dyuka #:
Ja, ich prüfe in db_exe() und schicke es zur Wiederholung. Aber db_exe() wird False zurückgeben, wenn es 10 Mal fehlschlägt (nie zurückgegeben).
Ich denke, die Bibliothek der Arbeit mit der Basis sendet einen Fehler, und es scheint, dass es nicht die Situation behandeln, wenn die Basis gesperrt ist.
In Python ein solches Problem nicht auftreten, offenbar hat es Warteschlangen und warten.

Vielen Dank für Ihre Antworten.

1. Wenn der Basis-Handle nicht abgerufen wird, brauchen Sie die Basis nicht zu schließen.

2. Wenn INVALID_HANDLE empfangen wird, warum wird das Programm dann weiter ausgeführt? Ich denke, in diesem Fall ist es besser, abzubrechen und zurückzukehren.

Ich versuche nun wiederholt, eine nicht existierende Basis zu öffnen und zu schließen, und ich kann keinen Fehler ausdrucken lassen. Ich denke, dass dieser Ausdruck in dem Moment kommt, in dem Abfragen an die Basis erstellt werden, die nicht geöffnet werden konnte.

Grund der Beschwerde: