FileOpen funktioniert nicht in MQL5... Wieso /Was tun ? - Seite 2

 
Bayne:

Ersteinmal vielen dank für die Mühe, ich weiß deinen aufwand sehr zu schätzen Christian :)


im terminal direkt,(also nicht im tester -> wird es so angezeit wie oben-> works ... somehow)

thing is: (beim tester) es gibt keinen MQL5/Files Pfad unter den terminal64.exe einträgen, der den namen

anzeigt :( habe sogar nochmal manuell nachgesucht (-> die Fehlermeldung erscheint also eher unter MQL5/Profiles/ {name des EAs})

Soweit sogut:

anschließend das csv umbenannt im obigen namen (nur halt beides mit .csv hinten dran versteht sich) und EA auf den chart angewand-> name not found (im terminal, also EA auf den chart direkt angewendet)

Bin nicht sicher ob es am CSV selbst liegt

File habe ich . Werde mich nun dem ProblemKind annehmen......nachdem ich ein wenig in der Sonne radeln war .

Dauert also etwas noch :-) Urlaub ist ja zur Erhohlung  da.

Gruß

 

uiiuiiiuu da war der Sherlok Holmes aber ganz schön gefragt :-)


Ist aber gelöst:

File bleibt nach wie vor im Ordner *Instanz*/MQL5/Files

Die terminal64.exe kopiert selbstständig das File in die Testumgebung (metatester64.exe). Die wiederum isoliert vom Rechner läuft (Sandbox)

Damit er dies tut muss folgende Prerocessor Anweisung stehen

#property tester_file "man_nimmt_einen_namen_den_es_definitiv_nicht_gibt.csv.csv"

Dazu der funktionierende EA

#property tester_file "man_nimmt_einen_namen_den_es_definitiv_nicht_gibt.csv.csv"
//#property tester_file "110011.txt"
//#property tester_file "220022.txt"

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  
   string mainPredictionCSV_Name = "man_nimmt_einen_namen_den_es_definitiv_nicht_gibt.csv.csv";
 //  string mainPredictionCSV_Name = "110011.txt";
 // string mainPredictionCSV_Name = "220022.txt";

//   int  mainHandle = FileOpen(mainPredictionCSV_Name,FILE_READ|FILE_CSV,CP_UTF8);
   int  mainHandle = FileOpen(mainPredictionCSV_Name,FILE_READ|FILE_TXT);

   if(mainHandle >0)
     {
      Print("Main-Predictions File successfully opened.");

      FileClose(mainHandle);
      ExpertRemove();
     }
   else
     {
      Print("File "+mainPredictionCSV_Name+" not found, the last error is ", GetLastError());
      ExpertRemove();
     }
  
//+------------------------------------------------------------------+

   
  }
//+------------------------------------------------------------------+

Achtung Bug !!! :


Nach dem kompilieren wird der EA nicht komplett aktualisiert. Warum das so ist keine Ahnung.

Auf jeden Fall werden die #property  Sektionen nicht aktualisiert.


Das bedeutet :

im Strategietester einen neuen Test starten. Anderen EA auswählen und dann den richtigen.

Hier ein Log der das beweist.

Erst nach dem auswählen eines anderen EAs und danach wieder zurück funktioniert der soeben komilierte EA

MetaQuotes ! dies ist ein BUG ...wenn ihr mitlest habt ihr Glück :-)


Auf gehts Bayne....

 

Ich weis nicht bezüglich bug, es könnte an der doppelten dateiendung liegen ( ungetestet)

Du schreibst .csv.csv da könnte er probleme beim lesen bekommen.

eventuell mag er auch FILE_TXT nicht, da sollte FILE_CSV stehen

das hatte meinen vor jahren auch schon mal vewirrt

void OnTick()
  {

  
   string mainPredictionCSV_Name = "man_nimmt_einen_namen_den_es_definitiv_nicht_gibt.csv";

//   int  mainHandle = FileOpen(mainPredictionCSV_Name,FILE_READ|FILE_CSV,CP_UTF8);
   int  mainHandle = FileOpen(mainPredictionCSV_Name,FILE_READ|FILE_CSV);

   if(mainHandle >0)
     {
      Print("Main-Predictions File successfully opened.");

      FileClose(mainHandle);
      ExpertRemove();
     }
   else
     {
      Print("File "+mainPredictionCSV_Name+" not found, the last error is ", GetLastError());
      ExpertRemove();
     }
  
//+------------------------------------------------------------------+

   
  }
 
amando:

Ich weis nicht bezüglich bug, es könnte an der doppelten dateiendung liegen ( ungetestet)

Du schreibst .csv.csv da könnte er probleme beim lesen bekommen.

eventuell mag er auch FILE_TXT nicht, da sollte FILE_CSV stehen

das hatte meinen vor jahren auch schon mal vewirrt

Ne ne , ist getestet. Ich benutze das file was du mir in der pm gesendet hast.

Das hat leider die Endung .csv.csv .


Funktioniert es denn nu .... ?
 

Mach mal die Option "bekannte Dateindungen ausblenden" aus im Explorer.


Das verwirrt manchmal ein wenig, eigentlich seit es Windows gibt.

 
Christian:

uiiuiiiuu da war der Sherlok Holmes aber ganz schön gefragt :-)


Ist aber gelöst:

File bleibt nach wie vor im Ordner *Instanz*/MQL5/Files

Die terminal64.exe kopiert selbstständig das File in die Testumgebung (metatester64.exe). Die wiederum isoliert vom Rechner läuft (Sandbox)

Damit er dies tut muss folgende Prerocessor Anweisung stehen

Dazu der funktionierende EA

Achtung Bug !!! :


Nach dem kompilieren wird der EA nicht komplett aktualisiert. Warum das so ist keine Ahnung.

Auf jeden Fall werden die #property  Sektionen nicht aktualisiert.


Das bedeutet :

im Strategietester einen neuen Test starten. Anderen EA auswählen und dann den richtigen.

Hier ein Log der das beweist.

Erst nach dem auswählen eines anderen EAs und danach wieder zurück funktioniert der soeben komilierte EA

MetaQuotes ! dies ist ein BUG ...wenn ihr mitlest habt ihr Glück :-)


Auf gehts Bayne....

Danke dir Christian, ich frage michwieder wie du auf sowelche gut "versteckten" ansätze kommst ;)   Das Berufsfeld würde mich interessieren ...


gibt es evtl eine möglichkeit das ganze flexibel bezüglich des filenamens zu machen?

input string inputfile = "man_nimmt_einen_namen_den_es_definitiv_nicht_gibt.csv.csv";
#property tester_file inputfile

^^ das hier schmeißt leider wie üblich den constant expected error aus ... :(

 
Bayne:
gibt es evtl eine möglichkeit das ganze flexibel bezüglich des filenamens zu machen?

FILE_COMMON

"Gibt's" für: FileOpen, FileCopy, FileMove, FileIsExist

ZB hier: https://www.mql5.com/de/docs/files/fileopen

"FILE_COMMON Lage der Datei im Gesamtordner aller Client-Terminals \Terminal\Common\Files"

Dokumentation zu MQL5: Dateioperationen / FileOpen
Dokumentation zu MQL5: Dateioperationen / FileOpen
  • www.mql5.com
[in]  Name der geöffneten Datei, kann Unterordner haben. Wenn die Datei für Schreiben geöffnet wird, werden die angegebenen Unterordner erzeugt werden, wenn sie es nicht gibt. FILE_CSV Date des Typs csv (alle geschriebenen Elemente werden in die Zeilen des entsprechenden Typs umgewandelt, unicode oder ansi, und durch Begrenzer getrennt)  ...
 
Bayne:

Danke dir Christian, ich frage michwieder wie du auf sowelche gut "versteckten" ansätze kommst ;)   Das Berufsfeld würde mich interessieren ...


gibt es evtl eine möglichkeit das ganze flexibel bezüglich des filenamens zu machen?

^^ das hier schmeißt leider wie üblich den constant expected error aus ... :(

Berufsfeld ist in der Elektrotechnik/E-Antriebe/Automatisierung.

Meine Lehrerin attestierte mir in der 7. Klasse Zitat " Christian hat eine sehr schnelle Auffassungsgabe"

Davon profitiere ich nun seit Jahren :-)

Alle Infos zu dem Fileopen fand ich in Foren-Beiträgen auf MQL5. Da das aber wenige nutzen ( Files einlesen im Tester) ist das nicht so populär.

Und der Bug,  hmm tja fällt eben auf wenn du selber viel programmierst. Da hat man eine gewisse Erwartung wie ein Programm sich verhalten sollte. Tut es das nicht fängt man nicht an sich zu wundern ,

sondern prüft den eigenen Verdacht. So findet man Bugs.


Egal ....ich guck mir das FILE_COMMON von Carl auch mal genauer an.

Du merkst aber das es schwierig ist Daten in die Sandbox zu bekommen.

Das ist der Part wo ich MQ sehr lobe. Sicherheit wird dort sehr hoch gehalten.

 

Hab noch was vergessen.

Die property section ist nicht variabel !

Die wird nur einmal vor dem kompilieren durchlaufen, danach nie wieder.

Du brauchst andere Wege um das flexible zu machen.

 

Sonst gäbe es ja noch den Weg über:

#import "kernel32.dll"

Damit kann man aus der "Sandbox ausbrechen"!

Grund der Beschwerde: