Fehler, Irrtümer, Fragen - Seite 2237

 
fxsaber:

Einige Zeichen haben ein Timeout, andere nicht. Wie erkenne ich das maximale Alter des Ticks, das von OrderSend noch wahrgenommen werden kann (kein [Kein Preis])?

Weiß der Teufel.

 
Stanislav Korotky:
Das FILE_SHARE_WRITE-Flag scheint in dieser Kombination zu funktionieren, aber es stellt sich eine andere Frage: Was ist der Sinn dieses speziellen Schreibvorgangs? Wenn wir die Schreibtrennung aktivieren, sollte sie logischerweise zum Schreibkennzeichen hinzugefügt werden:

Das ist genau das, was ich versucht habe, und es gibt auch eine Fehlermeldung.

Ich schaltete MetaTrader ein, fand mein altes Beispiel, fügte FILE_SHARE_WRITE hinzu (obwohl es dort nicht benötigt wird) - das Ergebnis änderte sich nicht... Vielleicht hat es bei mir aus einem anderen Grund nicht funktioniert
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

MetaTrader 5 Handelsplattform für AMP Futures Kunden verfügbar

fxsaber, 2018.07.23 22:34

Beispiel, bei dem es unmöglich ist, eine Market Order auszuführen, selbst wenn Bid/Ask ein Vielfaches von TickSize ist

Hier ist der letzte Preis kein Vielfaches von TickSize und hat nichts mit Market Orders zu tun, aber OrderCheck ist trotzdem fehlerhaft und lässt keine Market Order zu.

 
fxsaber:

Einige Zeichen haben ein Timeout, andere nicht. Wie erfahre ich das maximale Alter des Häkchens, das von OrderSend noch akzeptiert werden kann (kein [Kein Preis])?

Es kommt vor, dass der letzte Tick, der vor 16 Sekunden empfangen wurde, nicht als relevant für OrderSend wahrgenommen wird. Es muss sich also doch um einen Fehler handeln.

 
A100:
Ich aktivierte MetaTrader, fand mein altes Beispiel, fügte FILE_SHARE_WRITE hinzu (obwohl ich es dort nicht brauchte) - das Ergebnis änderte sich nicht... Vielleicht hat es bei mir aus einem anderen Grund nicht funktioniert

Alternativ können Sie die Datei im Speicher (MemMap) positionieren und dort per Semaphor arbeiten, und dann die Daten per Semaphor in die Datei ausgeben

Übrigens, diese Methode bringt Ihnen einen großen Geschwindigkeitsgewinn

 
Konstantin:

Alternativ können Sie die Datei im Speicher (MemMap) positionieren und dort per Semaphor arbeiten, und dann die Daten per Semaphor in die Datei ausgeben

Übrigens, diese Methode bringt Ihnen einen großen Geschwindigkeitsvorteil

Das Problem ist, dass ich eine kleine Konfigurationsdatei habe und jeder EA muss sie einmal lesen, bevor er zu arbeiten beginnt - der einfachste Vorgang - siehe Beispiel auf den Links oben... und Sie sagen Semaphoren)
 
A100:
Die Sache ist die, ich hatte eine kleine Konfigurationsdatei und jeder EA musste sie nur einmal lesen, bevor er zu arbeiten begann - der einfachste Vorgang - siehe das Beispiel in den Links oben... und Sie sagen Semaphoren)

Ich sage, dass das Schreiben über dieses Problem für mehrere Seiten, und angesichts der Tatsache, dass das Problem mit dem Bart und beheben Sie es Entwickler können offenbar nicht oder wollen nicht, weil Ich bot Ihnen eine von ihnen, wenn Sie es nicht mögen, verwenden Sie winapi, was das Problem ist)), aber es ist besser als das Schreiben der gleichen Sache, ohne etwas zu tun, können Sie die gleichen Semaphore verwenden, um von einer physischen Datei zu lesen, die gleiche Semaphore Signal, das beschäftigt ist und warten müssen!

 
Stanislav Korotky:

Bei diesem einfachen Skript, das zunächst mit "writing = true" und dann in einem anderen Diagramm mit "writing = false" ausgeführt wird, erhalte ich einen Fehler.


#property script_show_inputs

input bool writing = false;

int OnStart()
{
  int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:0));
  if(handle == INVALID_HANDLE)
  {
    Print("FileOpen failed: ", GetLastError());
    return INIT_FAILED;
  }
  
  if(writing) FileWriteInteger(handle, 0);
  
  Print("handle=", handle);
  
  while(!IsStopped())
  {
    Sleep(1000);
  }

  Print("Closing");
  FileClose(handle);

  return 0;
}

Dem Öffner für das Lesen fehlt das FILE_SHARE_WRITE-Flag (Schreiben erlauben), da es einen Schreiber gibt.

Dies ist eine Systembeschränkung (WinAPI).

Hier sind die richtigen Flags, mit denen Ihr Code funktionieren wird:

int handle = FileOpen("xyz.foo", FILE_READ|FILE_BIN|FILE_SHARE_READ|(writing?FILE_WRITE:FILE_SHARE_WRITE));
 
Ilyas:

Hier sind die richtigen Flags, damit Ihr Code funktioniert:

Bitte FileLoad korrigieren

Forum für Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

fxsaber, 2018.07.10 19:26

Fehler in FileLoad. Wenn zwei lokale Agenten mit dem FILE_COMMON-Flag versuchen, Daten über FileLoad zu lesen, scheitert einer der Agenten.

Es ist möglich, entsprechende Flags in FileOpen zu setzen, aber nicht in FileLoad. Erlauben Sie daher bitte den Zugriff auf die Datei über FileLoad, wenn der andere FileLoad sie liest.

 
TheXpert:

Warum? )

Da es in der Liste der Flaggen keine Null gibt

Kennung

Wert

Beschreibung

DATEI_LESEN

1

Die Datei wird zum Lesen geöffnet. Dieses Flag wird beim Öffnen einer Datei (FileOpen()) verwendet. FILE_WRITE und/oder FILE_READ müssen beim Öffnen einer Datei gesetzt werden.

DATEI_SCHREIBEN

2

Die Datei wird zum Schreiben geöffnet. Dieses Flag wird verwendet, um eine Datei zu öffnen (FileOpen()). Wenn eine Datei geöffnet wird, müssen die Flags FILE_WRITE und/oder FILE_READ gesetzt sein.

FILE_BIN

4

Binärer Lese- und Schreibmodus (keine Konvertierung von oder nach String). Dieses Flag wird zum Öffnen von Dateien verwendet (FileOpen())

DATEI_CSV

8

Datei vom Typ csv (alle geschriebenen Elemente werden in eine Zeichenkette des entsprechenden Typs, Unicode oder Ansi, umgewandelt und durch ein Trennzeichen getrennt). Dieses Flag wird beim Öffnen einer Datei verwendet (FileOpen())

DATEI_TXT

16

Einfache Textdatei (wie csv, aber ohne Trennzeichen). Dieses Flag wird verwendet, wenn Dateien geöffnet werden (FileOpen())

FILE_ANSI

32

ANSI-Strings (Ein-Byte-Zeichen). Dieses Flag wird beim Öffnen von Dateien verwendet (FileOpen())

FILE_UNICODE

64

UNICODE-Strings (Zwei-Byte-Zeichen). Dieses Flag wird beim Öffnen von Dateien verwendet (FileOpen())

FILE_SHARE_READ

128

Gemeinsamer Lesezugriff durch mehrere Programme. Dieses Flag wird beim Öffnen einer Datei (FileOpen()) verwendet, ersetzt aber nicht die Notwendigkeit von FILE_WRITE und/oder FILE_READ beim Öffnen einer Datei.

FILE_SHARE_WRITE

256

Dieses Flag wird für den gemeinsamen Schreibzugriff durch mehrere Programme verwendet. Dieses Flag wird zum Öffnen von Dateien (FileOpen()) verwendet, ersetzt aber nicht FILE_WRITE und/oder FILE_READ beim Öffnen einer Datei.

DATEI_REWRITE

512

Die Datei kann mit FileCopy() und FileMove() überschrieben werden. Die Datei muss existieren oder beschreibbar sein. Andernfalls wird die Datei nicht geöffnet.

FILE_COMMON

4096

Speicherort der Datei im gemeinsamen Ordner aller Client-Terminals\Terminal\Common\Files. Dieses Flag wird beim Öffnen von Dateien (FileOpen()), beim Kopieren von Dateien (FileCopy(), FileMove()) und beim Prüfen, ob Dateien existieren (FileIsExist()) verwendet.


Und wenn die Entwickler alle ihre Fehler beheben, wird es vielen Leuten nicht gefallen. Weit mehr als die Hälfte des Codes wird nicht mehr funktionieren.

Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
Документация по MQL5: Константы, перечисления и структуры / Константы ввода/вывода / Флаги открытия файлов
  • www.mql5.com
Файл открывается для чтения. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл открывается для записи. Флаг используется при открытии файлов (FileOpen()). При открытии файла обязательно должен быть указан флаг FILE_WRITE и/или флаг FILE_READ Файл...
Grund der Beschwerde: