Fehler, Irrtümer, Fragen - Seite 2634

 

Hallo!

Ich möchte einige MT4 mit einer Batch-Datei ausführen.

Können Sie mir bitte sagen, wie man das macht und warum mein Code nicht funktioniert:

SET MY_PATH=C:\"Program Files (x86)"
%MY_PATH%\001\terminal.exe
TIMEOUT /T 160
%MY_PATH%\002\terminal.exe
TIMEOUT /T 160
%MY_PATH%\003\terminal.exe
TIMEOUT /T 160
%MY_PATH%\004\terminal.exe
TIMEOUT /T 160
%MY_PATH%\005\terminal.exe
TIMEOUT /T 160
%MY_PATH%\006\terminal.exe
TIMEOUT /T 160
%MY_PATH%\007\terminal.exe
TIMEOUT /T 160
%MY_PATH%\008\terminal.exe
TIMEOUT /T 160
%MY_PATH%\009\terminal.exe
TIMEOUT /T 160
%MY_PATH%\010\terminal.exe
TIMEOUT /T 160
%MY_PATH%\011\terminal.exe
TIMEOUT /T 160
%MY_PATH%\012\terminal.exe
TIMEOUT /T 160

Im besten Fall läuft er ein paar MT4s und hängt sich dann auf.

Natürlich gibt es keinen Mangel an Arbeitsspeicher.

Außerdem habe ich es auf verschiedenen Computern ausprobiert

 
Igor Zakharov:

Nein, das tut es nicht.

Die Serverzeit bleibt übrigens nicht am Samstag stehen. Im Gegenteil: Im Terminal wird die Serverzeit mit dem Eintreffen eines neuen Kurses aktualisiert. Sie haben z.B. nur ein Symbol in der Marktübersicht geöffnet (nicht nur im Tester, sondern auch in der Realität). und es gibt fünf Sekunden lang keine Ticks - die ganze Zeit über bewegt sich der Timer der Serverzeit nicht. das gilt für den Samstag: die Serverzeit läuft, aber das Terminal weiß nichts davon, weil es keine Ticks gibt. der Tester verpasst diesen Zeitraum einfach.

Das habe ich bereits überprüft. Im Testgerät funktioniertTimeLocal am Wochenende,TimeTradeServer auch, aberTimeCurrent natürlich nicht. Es gibt keine Ticks, aber die Serverzeit ist noch da.

int OnInit()
{
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());

    EventSetTimer(3*3600);
 return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnTimer()
{
  Print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
  Print(__FUNCTION__," TimeCurrent     ",TimeCurrent());
  Print(__FUNCTION__," TimeLocal       ",TimeLocal());
  Print(__FUNCTION__," TimeTradeServer ",TimeTradeServer());
}
 
Igor Zakharov:

https://www.mql5.com/ru/forum/328008/page2#comment_14166682

Wie immer: Fahrräder.

Die Frage ist hier, warum sie nicht angenommen wird.
Schließlich haben die Variablen der Parameter Anfangswerte.

void MxResize(int row=1, int col=1)
{
   int A[row][col];    
      
}

Und wenn Sie die Größe der Maße in Zahlen angeben

void MxSize(int row=1, int col=1)
{
   int A[1][1];    
      
}

Der Compiler überspringt es, was ist der Trick?

Kann sich der Entwickler dazu äußern?

 
Andrey Khatimlianskii:

Zu welchem Zweck? Auto-Optimierung am Wochenende durchführen? Dann würde es funktionieren, einen Timer von OnTick in einem Abstand von einigen Minuten zu setzen. Wenn es funktioniert, haben die Ticks aufgehört und Sie können optimieren.

Wenn für andere Zwecke, formulieren Sie sie.

Nein, nicht für andere Zwecke.

Ich dachte nicht, dass TimeLocal am Wochenende funktioniert, also habe ich Folgendes getan: Ich habe ein paar Stunden zu TimeCurrent hinzugefügt und den Wochentag überprüft. Wenn es Samstag ist, dann fangen Sie an zu optimieren.

Natürlich kann ich nicht mit Sicherheit sagen, wann der Samstag beginnt, da der Markt am Freitag oder an Feiertagen anders schließt.

Außerdem habe ich nirgends eine Möglichkeit gefunden, festzustellen, ob der Markt geschlossen ist oder nicht.

 
Petros Shatakhtsyan:

Nein, nicht zu einem anderen Zweck.

Ich dachte nicht, dass TimeLocal an Wochenenden funktioniert, also habe ich Folgendes getan: Ich habe ein paar Stunden zu TimeCurrent hinzugefügt und den Wochentag überprüft. Wenn es Samstag ist, dann fangen Sie an zu optimieren.

Natürlich kann ich nicht mit Sicherheit sagen, wann der Samstag beginnt, da der Markt am Freitag oder an Feiertagen anders schließt.

Außerdem habe ich nirgends eine Möglichkeit gefunden, festzustellen, ob der Markt geschlossen ist oder nicht.

Haben Sie es versucht?

SymbolInfoSessionTrade

oder

SymbolInfoInteger(SYMBOL_TRADE_MODE)

Etwas von ihnen sollte gut sein

 
Aleksey Mavrin:

Haben Sie es ausprobiert?

SymbolInfoSessionTrade

oder

SymbolInfoInteger(SYMBOL_TRADE_MODE)

Einer von ihnen sollte gut sein, ich erinnere mich.

Nein, das habe ich nicht. Aus dem Handbuch geht nicht hervor, wie Sie feststellen können, ob der Markt geöffnet ist oder nicht.

Die Sache ist die, dass, wenn der Markt am Montag "öffnet", z.B. bei einem Broker die Kurse um 02:05 Uhr eingehen, aber Transaktionen für ein paar Minuten nicht akzeptiert werden und "Markt geschlossen" angezeigt wird.

Ich weiß nicht, ob das helfen wird oder nicht.

SYMBOL_START_ZEIT

Anfangsdatum des Instruments (in der Regel für Futures verwendet)

 
Petros Shatakhtsyan:

Nein, das habe ich nicht. Der Leitfaden enthält keine genauen Angaben darüber, wie Sie feststellen können, ob der Markt geöffnet ist oder nicht.

Das Problem ist, dass, wenn der Markt am Montag "öffnet", z. B. bei einem Makler die Kurse um 02:05 Uhr eingehen, die Geschäfte aber erst nach einigen Minuten akzeptiert werden, wird "Markt geschlossen" angezeigt.

Ich weiß nicht, ob das helfen wird oder nicht.

SYMBOL_START_ZEIT

Dies ist die symbol_start_time (normalerweise für Futures verwendet)

SymbolInfoSessionTrade zeigt an, wann der Handel beginnt, undSymbolInfoSessionQuote, wann die Notierungen eintreffen.

up: Das sollte helfen

boolIsTradeAllowed(
const string symbol// symbol
datetimetested_time//time
);

Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
Документация по MQL5: Получение рыночной информации / SymbolInfoSessionQuote
  • www.mql5.com
Получение рыночной информации / SymbolInfoSessionQuote - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

Wie immer: Fahrräder.

Hier stellt sich die Frage, warum ein solcher Eintrag nicht zustande kommt.
Nachdem alle Variablen der Parameter Anfangswerte haben.

Und wenn Sie die Größe der Maße in Zahlen angeben

dann überspringt der Compiler sie, wo ist der Haken?

Wird sich der Entwickler dazu äußern?

Roman, das ist schon das zweite Mal, dass Sie auf den elementaren Unwillen hereinfallen, die Dokumentation zu lesen.

Nur eineGanzzahl kann ein Array-Index sein. Es sind nicht mehr als vierdimensionale Arrays erlaubt. Die Nummerierung der Array-Elemente beginnt mit 0. Das letzte Element eines eindimensionalen Arrays ist um 1 kleiner als die Array-Größe, d. h. der Zugriff auf das letzte Element eines Arrays mit 50 ganzen Zahlen sieht aus wie a[49]. Dasselbe gilt für mehrdimensionale Arrays, wobei eine Dimension von 0 bis Dimensionsgröße-1 indiziert wird. Das letzte Element des zweidimensionalen Arrays im Beispiel würde wie m[6][49] aussehen.

Statische Arrays können nicht als Zeitreihen dargestellt werden, d.h. die Funktion ArraySetAsSeries(), die den Zugriff auf Arrayelemente vom Ende eines Arrays bis zu seinem Anfang setzt, ist auf sie nicht anwendbar. Wenn Sie den Zugriff auf ein Array wie bei Timeseries ermöglichen wollen, verwenden Sie ein dynamisches Array-Objekt.

Wenn Sie außerhalb des Arrays zugreifen, erzeugt das ausführende Subsystem einen kritischen Fehler und die Programmausführung wird angehalten.

Und in der mql4-Dokumentation, wenn ich mich richtig erinnere, wurde klar gesagt, dass Variablen nicht als Array-Größe verwendet werden sollten.

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов...
 
Roman:

Wie immer: Fahrräder.

Die Frage ist hier, warum ein solcher Eintrag nicht funktioniert.
Schließlich haben die Variablen von Parametern Anfangswerte.

Und wenn Sie die Größe der Maße in Zahlen angeben

Dann überspringt der Compiler sie, was ist der Trick?

Kann sich der Entwickler dazu äußern?

Ich bin kein Entwickler, aber ich werde mich dazu äußern.

Für ein statisches Array muss der Compiler bereits zur Kompilierungszeit eine bestimmte Anzahl von Bytes im Speicher zuweisen.

Wie viel Speicher muss der Compiler zuweisen, wenn wir die Zeilen und Spalten zum Zeitpunkt der Kompilierung nicht kennen?

Die Anfangswerte werden nur verwendet, wenn beim Aufruf keine Parameter angegeben werden. Die tatsächlichen Parameter sind erst zur Laufzeit bekannt.

Also, keine Tricks, lernen Sie die Sprache.

 
Aleksey Mavrin:

Nein, das ist es nicht.SymbolInfoSessionTrade zeigt an, wenn gehandelt wird, undSymbolInfoSessionQuote, wenn die Notierungen eintreffen.

ap: Das sollte helfen.

boolIsTradeAllowed(
const string symbol// symbol
datetimetested_time//time
);

Ich glaube nicht, dass das der Fall ist. Hier gibt es ein spezielles Thema: https://www.mql5.com/ru/forum/40295

Ich habe es mir nicht ganz durchgelesen, zumal es für MQL4 ist.

Ich glaube nicht, dass der Server Symbol-Kurse senden sollte, wenn der Markt geschlossen ist.

Mein Roboter ist davon nicht wirklich betroffen, weil er nach der "Markteröffnung", wenn die Ticks eintreffen, den Trend und die Umkehrungen analysiert, und das dauert einige Zeit. Während dieser Zeit öffnet der Markt.

Es ist jedoch hinderlich, wenn wir während dieser Zeit manuell einige Geschäfte abschließen wollen. Wenn die Ausführung marktbasiert ist, bleibt die Anfrage bis zur Öffnung des Marktes in der Schwebe und wird natürlich zum aktuellen Preis ausgeführt.

Die direkte Funktion, die den Namen des Symbols erhält und true/false (Markt offen/geschlossen) zurückgibt, fehlt eindeutig.

Как правильно выяснить, что рынок закрыт? (mql4)
Как правильно выяснить, что рынок закрыт? (mql4)
  • 2015.01.31
  • www.mql5.com
Перевел советника в режим работы OnTimer() теперь когда рынок закрыт он этого не понимает и пытается торговать, в общем обращается к серверу и естественно получает ошибки и забивает логи журнала.