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

 
Alexey Viktorov #:

1. Wenn der Sockelgriff nicht aufgenommen wird, muss der Sockel nicht geschlossen werden.

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

Ich versuche nun wiederholt, eine nicht existierende Datenbank zu öffnen und zu schließen, und ich kann den Fehlerausdruck nicht erhalten. Ich denke, dass dieser Ausdruck im Moment der Erstellung von Abfragen an die Datenbank kommt, die nicht geöffnet werden konnte.

Ich werde einen minimalen Test Expert Advisor machen, der den Datensatz in der Datenbank jede Sekunde aktualisiert. Lassen wir ihn auf 10 Paaren laufen und alles wird klar sein. Ich werde es hier posten...
 
Evgeny Dyuka #:
Ich werde einen minimalen Test Expert Advisor, dass der Datensatz in der Datenbank jede Sekunde aktualisieren wird zu machen. Führen Sie es auf 10 Paare und alles wird klar sein. Ich werde es hier posten.

Interessant. Ich werde warten...

 
Alexey Viktorov #:

Interessant. Ich werde abwarten...

Hier ist ein Experte. Es wird eine Basis erstellt (wenn sie nicht schon existiert) und die aktuelle Zeit wird einmal pro Sekunde in sie geschrieben.
Es gibt kein Print() in dem Code.
Ich habe es mit 10 Paaren ausprobiert und es gab Fehler:

CS      2       11:44:36.561    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:27.018    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:28.026    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:49.177    Test_DB (TRXUSD,M10)    database error, database is locked
CS      2       11:55:51.183    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:53.182    Test_DB (TRXUSD,M10)    database error, database is locked

Um einen Fehler zu erhalten, muss man MT5 schließen und neu starten, dann beginnen alle EAs synchron zu arbeiten.

Es wäre gut:
1. Zu verstehen, wie man diesen Fehler loswerden kann.
2. Einen Template-Mechanismus zu erfinden, der sich in die Warteschlange einreiht, falls die Basis nicht verfügbar ist.

Ich habe Punkt 2 gelöst, indem ich Sleep() mit Zufallszeit hinzugefügt habe, aber das sieht wie eine Krücke aus.

UPDATE: Ichhabe die Datei neu hochgeladen, die erste hatte einen Fehler.

Dateien:
Test_DB_1.mq5  3 kb
 
Evgeny Dyuka #:

Hier ist ein Experte. Er erstellt eine Basis (wenn sie nicht schon existiert) und schreibt einmal pro Sekunde die aktuelle Zeit hinein.
Es gibt kein Print() im Code.
Ich habe ihn mit 10 Paaren ausgeführt, es traten Fehler auf:

Um einen Fehler zu erhalten, sollte man MT5 schließen und neu starten, dann arbeiten alle Expert Advisors synchron.

Es wäre gut:
1. Zu verstehen, wie man diesen Fehler loswerden kann.
2. Einen Template-Mechanismus zu erfinden, der sich bei Nichtverfügbarkeit der Basis in die Warteschlange stellt.

Ich habe Punkt 2 gelöst, indem ich Sleep() mit Zufallszeit hinzugefügt habe, aber das sieht wie eine Krücke aus.

UPDATE: Ichhabe die Datei neu hochgeladen, die erste hatte einen Fehler.

Leider ist mein Wissen nicht ausreichend. Nur genug, um zu erkennen, dass ein Fehler gedruckt wird

      DatabaseExecute(db, sql);

Es gibt keine Möglichkeit, die Verfügbarkeit vor dem Erstellen einer Abfrage zu prüfen.

Die Datenbank wird geöffnet, aber es ist nicht möglich, eine Abfrage zu erstellen.

 
Keine Aufträge offen auf dem Server, keine Stops und Takes, Algo-Modi aktiviert sind und der Setup-Befehl geht, aber die Protokolle sind still CTrade-Klasse. Im Tester arbeitet auf realen Handel Stille. Was ist zu prüfen?
 
mwwm CTrade-Klasse. Im Tester arbeitet auf realen Handel Stille. Was ist zu prüfen?

Terminal-Protokoll

 
Vladimir Deryagin #:

Terminalprotokoll

Ich schätze, ich habe die Logs eingeschaltet, kann aber die Menge nicht berechnen. Ich verstehe nicht, warum es nicht auf real berechnen will?

void OpenBuy(const int index,double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);
   double long_lot=0.0;
   if(InpLotOrRisk==risk)
     {
      long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", OK: ","sl=",DoubleToString(sl,m_symbol.Digits()),
               ", CheckOpenLong: ",DoubleToString(long_lot,2),
               ", Balance: ",    DoubleToString(m_account.Balance(),2),
               ", Equity: ",     DoubleToString(m_account.Equity(),2),
               ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(long_lot==0.0)
        {
         ArrayRemove(SPosition,index,1);
         if(InpPrintLog)
            Print(__FILE__," ",__FUNCTION__,", ERROR: ","CMoneyFixedMargin.CheckOpenLong returned the value of 0.0");
         return;
        }
     }
 
mwwm #:

Ich schätze, ich habe die Protokolle eingeschaltet, es kann die Partie nicht berechnen. Ich verstehe nicht, warum es nicht auf real berechnen will?

Es gibt keine Logs, also kann es viele Male mehr Vermutungen geben.

Als Option, wenn der Handel Kreuze, wenn in der Marktübersicht ist nicht ausgewählt Paar mit der Währung der Kaution, wird nicht handeln.

Zum Beispiel, wir handeln EURJPY, Kaution Währung USD, in der Marktübersicht muss vorhanden sein EURUSD und USDJPY.

 
Aleksandr Slavskii #:

Es gibt keine Protokolle, so dass es ein Vielfaches an Vermutungen geben könnte.

Als Option, wenn der Handel Kreuze, wenn das Paar mit der Kaution Währung nicht in der Marktübersicht ausgewählt ist, wird nicht handeln.

Zum Beispiel, wir handeln EURJPY, Einzahlungswährung USD, in der Marktübersicht müssen EURUSD und USDJPY vorhanden sein.

Konto in USD pro Cent, Handel mit XAUUSD

 

Hallo zusammen. Ich kann nicht zeichnen einen Pfeil auf den ersten Balken mit Puffern in MQL5.

In MQL4 mache ich dies:

Deklarieren Sie eine globale Variable double XX[];

Schreiben Sie in init:

SetIndexBuffer(0,XX);

SetIndexStyle(0,DRAW_ARROW);

SetIndexPfeil(0,108);

In Oncalculate schreibe ich:

XX[1]=High[1]; Ich bekomme einen gezeichneten Pfeil über Candlestick 1. und das war's

Ich mache das Gleiche in MQL5:

Deklariere eine globale Variable double XX[];

schreibe in init:

SetIndexBuffer(0,XX,INDICATOR_DATA);

PlotIndexSetInteger(0,PLOT_ARROW,108);

In Oncalculate schreibe ich:

XX[1]=high[1]; - wird nicht gezeichnet

XX[1]=iHigh(Symbol(),PERIOD_CURRENT,1); - zeichnet auch nicht.

Natürlich ist es auch in der Kopfzeile angegeben:

#property indicator_buffers 1

#Eigenschaft indicator_plots 1

#property indicator_type1 DRAW_ARROW

#property indicator_color1 clrGreen

#Eigenschaft indicator_width1 1

Was mache ich falsch, bitte sagen Sie es mir !!!!