Kann nicht in die Datei schreiben, wenn der Auftrag geöffnet ist - Seite 2

 

WHRoeder:

Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//File opening
Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,";");//File opening

Ungültiges letztes Argument - kein int

Könnten Sie bitte näher erläutern, was Sie meinen?

Während die Dokumentation (siehe FileOpen()) zeigt, dass das Trennzeichen in einfache Anführungszeichen eingeschlossen ist, ist das Buch (siehe File Operations) in Bezug auf die Verwendung von einfachen Anführungszeichen inkonsistent: einige der Codebeispiele zeigen die Verwendung von doppelten Anführungszeichen.

Außerdem hat der folgende Code:

int handle=FileOpen("testing.csv", FILE_CSV|FILE_WRITE|FILE_READ, ";");
if(handle > 0) {
   FileSeek(handle, 0, SEEK_END);
   FileWrite(handle, "test1", "test2", "test3", "test4");
   FileClose(handle);
}
else
   Print ("FileOpen failed. Error # ", GetLastError());

kompiliert, hatte keine Laufzeitfehler und erzeugte die folgende Ausgabe in der Datei:

Datei-Test #1

 
RaptorUK: Sie haben ";" nicht ';'... die Fehlermeldung, die Sie erhalten haben, bezog sich auf Parameter 1, ist das nicht das Dateihandle?
Der erste ist eine Zeichenkette, der zweite ist ein int (wie erforderlich). Der Fehler erwähnte p 1. Mehrere Probleme?
 
RaptorUK:
Entschuldigung, "Teile" ... erhalten Sie die Meldung **** END TICK USDCHF **** ? oder endet es vorher ?


Ja, die Datei ist vollständig.
 
RaptorUK:

Sie haben ";" nicht ';'... die Fehlermeldung, die Sie erhalten haben, bezog sich auf Parameter 1, ist das nicht das Dateihandle?

Ja, jemand anderes sprach von einem ungültigen letzten Parameter, ich weiß nicht, warum. Trotzdem habe ich ";" gegen ';' ausgetauscht, aber ich habe das gleiche Problem.
 
Thirteen:

Könnten Sie bitte näher erläutern, was Sie meinen?

Während die Dokumentation (siehe FileOpen()) zeigt, dass das Trennzeichen in einfache Anführungszeichen eingeschlossen ist, ist das Buch (siehe File Operations) in Bezug auf die Verwendung von einfachen Anführungszeichen inkonsistent: einige der Codebeispiele zeigen die Verwendung von doppelten Anführungszeichen.

Außerdem hat der folgende Code:

kompiliert, hatte keine Laufzeitfehler und produzierte die folgende Ausgabe in der Datei:



Ich habe ";" und ';' ausprobiert und das gleiche Problem erhalten.

Mein Code läuft und funktioniert prima, die Datei wird erstellt und bei jedem Tick wird die Datei geöffnet, alle Informationen werden hineingeschrieben und dann wird die Datei geschlossen. Alles funktioniert gut, bis der EA eine Bestellung öffnet, dann wird nichts in die Datei geschrieben.

 
WHRoeder:
Die erste ist eine Zeichenfolge, die zweite ist ein int (wie erforderlich.) Der Fehler erwähnt p 1. Mehrere Probleme?


Der Fehler ist der Datei-Handle, der Handle ist immer 1 und funktioniert immer, aber wenn der EA eine Bestellung öffnet, sagt er beim nächsten Tick, dass der Handle ungültig ist, obwohl er wieder 1 ist und die letzten Hunderte von Ticks funktioniert hat. Das letzte Mal habe ich versucht, es Handle begann zu gehen, wenn der Auftrag geöffnet, es wurde 2, 3, 4, etc.

Es ist genau der gleiche Code, ich weiß nicht, warum es nicht als 1 bleiben, und selbst wenn es noch 1 ist es immer noch den Fehler gibt.

 
Irgendeine Idee, Leute?
 
favosys:
Irgendeine Idee, Leute?

Ich kann kein Problem mit dem von Ihnen geposteten Code erkennen.

Ich sehe also 2 Möglichkeiten:

  • Stellen Sie Ihren gesamten Code ein, damit wir ihn selbst ausprobieren und versuchen können, das Problem zu beheben
  • Erstellen Sie ein kurzes Skript/EA, das das Problem repliziert, und veröffentlichen Sie es.

 
RaptorUK:

Ich kann kein Problem mit dem von Ihnen geposteten Code erkennen.

Ich sehe also 2 Möglichkeiten:

  • Stellen Sie Ihren gesamten Code ein, damit wir ihn selbst ausprobieren und versuchen können, das Problem zu beheben
  • Erstellen Sie ein kurzes Skript/EA, das das Problem repliziert, und posten Sie es.


Danke RaptorUK, ich hatte bereits einen EA erstellt, der das Problem genau repliziert, um zu versuchen, das Problem zu beheben. Grundsätzlich beginnt es, es erstellt die Datei, die sie jedes tick es schreibt auf die Datei, die Zählung der Ticks. So ist die Datei wie Tick 1, Tick 2, etc.

Bei Tick 15 wird ein Auftrag eröffnet, die Auftragsdaten erscheinen in der Datei und das Ende (******) erscheint ebenfalls. Danach soll es in jedem Tick die Ticknummer (16, 17, usw.) und den Status der Order schreiben, d.h. ob die Order noch geöffnet ist oder nicht. Aus irgendeinem Grund schreibt der EA nach Tick 15 nicht mehr in die Datei.

Bei Tick 50 soll er die Order schließen, aber das ist nicht wichtig, wichtig ist, dass er weiter in die Datei schreibt, wenn er die Order öffnet.

Auf meinem Windows 7 Rechner werden die Dateien in C:\Benutzer\{Benutzername}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files

Appdata ist ein versteckter Ordner.

Vielen Dank im Voraus

Code:

//+------------------------------------------------------------------+
//|                                                          log.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern string     Nombre_archivo="log";
extern int        Take_Profit=6;
extern int        Stop_Loss=35;
extern int        Deslizamiento=4;
extern double     vol=1;
int               Handle, Qnt_Symb, ticket, err, abierta = 0;
string            File_Name, larcor;


int cont=1;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   File_Name = StringConcatenate(Nombre_archivo, " - ", Symbol(), " - ", TimeToStr(TimeLocal(),TIME_DATE), " - ", TimeHour(TimeLocal()), ".", TimeMinute(TimeLocal()), ".", TimeSeconds(TimeLocal()), ".txt");
   Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,';');//File opening
   if(Handle==-1)                      // File opening fails
     {
      Alert("An error while opening the file. ",// Error message
              "May be the file is busy by the other applictiom");
      PlaySound("Bzrrr.wav");          // Sound accompaniment
      return;                          // Exir start()      
     }
     FileClose( Handle );
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double op, cl;
   
   Print("Order open: ", abierta);
   //Print("File: ", File_Name);

    Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,';');//File opening
    Print("Handle: ", Handle);
   if(Handle==-1)                      // File opening fails
     {
      Alert("An error while opening the file. ",// Error message
              "May be the file is busy by the other applictiom");
      PlaySound("Bzrrr.wav");          // Sound accompaniment
      return;                          // Exir start()      
     }
   FileSeek(Handle, 0, SEEK_END);
   
   Qnt_Symb=FileWrite(Handle,"**** INICIANDO TICK PAR ", Symbol(), ": ", TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS), " ****");
   Qnt_Symb=FileWrite(Handle,"************************************************************");   
   
   Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Este es el tick num: ", cont);
   if(cont == 15){
      op = iOpen(NULL, 0, 0);
      cl = iClose(NULL, 0, 0);
      
      if(op < cl){
         Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Estamos en LARGO, se abre compra");
         ticket = OrderSend(Symbol(),OP_BUY,vol,Ask,Deslizamiento,Ask-Stop_Loss*Point,Ask+Take_Profit*Point);
         if(ticket == -1){
            err = GetLastError();
            Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Error No. ", err, " al tratar de abrir la orden");
         }
         else{
            Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Abierta orden ", ticket, ", hora: ", TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
            abierta = 1;
         }
       }
       else{
         Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Estamos en CORTO, se abre venta");
         ticket = OrderSend(Symbol(),OP_SELL,vol,Bid,Deslizamiento,Bid+Stop_Loss*Point,Bid-Take_Profit*Point);
         if(ticket == -1){
            err = GetLastError();
            Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Error No. ", err, " al tratar de abrir la orden");
         }
         else{
            Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Abierta orden ", ticket, ", hora: ", TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
            abierta = 1;
         }
       }
   }
   
   if((cont > 15) && (cont < 50)){
      if(ticket != -1){
         if(OrderSelect(ticket, SELECT_BY_TICKET) == true){
            datetime horacierre = OrderCloseTime();
            if(horacierre == 0){
               Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Orden ", ticket, " en par ". Symbol(), " sigue abierta.");   
            }
            else{
               Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","La orden ", ticket, " se cerro automaticamente a las ", TimeToStr(horacierre,TIME_DATE|TIME_SECONDS));
            }
          }
      }
   }
   
   if(cont == 50){
      if(abierta == 1){
         if(larcor == "LARGO"){
            if(OrderClose(ticket,OrderLots(),Ask,3)){
               Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Se cerro la orden ", ticket, " en LARGO");
            }
            else{
               Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","No se pudo cerrar la orden ", ticket, " en LARGO");
            }
         }
         else{
            if(OrderClose(ticket,OrderLots(),Bid,3)){
               Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Se cerro la orden en CORTO");
            }
            else{
               Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","No se pudo cerrar la orden ", ticket, " en CORTO");
            }
         }
      }
   }
   
   if(cont > 50){
      Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Fin de EA");
   }
   
   Qnt_Symb=FileWrite(Handle,"***************************");      
   Qnt_Symb=FileWrite(Handle,"**** FIN TICK PAR ", Symbol(), " ****");        
   FileClose( Handle );
   cont++;   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
favosys:


Danke RaptorUK, ich hatte bereits einen EA erstellt, der das Problem genau nachbildet, um zu versuchen, das Problem zu beheben. Grundsätzlich beginnt es, es erstellt die Datei sie jeden Tick schreibt es auf die Datei, die Zählung der Ticks. So ist die Datei wie Tick 1, Tick 2, etc.

Bei Tick 15 wird ein Auftrag eröffnet, die Auftragsinfo erscheint in der Datei und das Ende (******) erscheint ebenfalls. Danach soll der EA bei jedem Tick die Ticknummer (16, 17, usw.) und den Status der Order schreiben, d.h. ob die Order noch geöffnet ist oder nicht. Aus irgendeinem Grund schreibt der EA nach Tick 15 nicht mehr in die Datei.

Bei Tick 50 soll er die Order schließen, aber das ist nicht wichtig, wichtig ist, dass er weiter in die Datei schreibt, wenn er die Order öffnet.

Auf meinem Windows 7 Rechner werden die Dateien in C:\Benutzer\{Benutzername}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files

Appdata ist ein versteckter Ordner.

Vielen Dank im Voraus

Code:

Ihr Code wird keine Trades mit dem Broker platzieren, den ich zum Testen verwende, es ist ein ECN-Broker "Typ". Ich werde anpassen und setzen Sie die TP und SL auf 0,0
Grund der Beschwerde: