|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
cvs Datei speichern geht nicht mehr
Da sitze ich nun schon den ganzen Tag dran und verstehe einfach nicht, warum das plötzlich nicht mehr geht - ich kriege immer den Fehler 5002 (ERR_FILE_WRONG_FILENAME). In meiner Verzweifelung habe ich einen kurzen Test Indikator geschrieben, damit es übersichtlicher ist.
(Kurz angemerkt, ich rufe den MT als /portable auf - das sollte allerdings keinen Einfluß haben, eigentlich, aber man weiß ja nie). Code:
#property strict //=========================================================================== #property indicator_chart_window #property indicator_buffers 1 #property indicator_type1 DRAW_LINE //=========================================================================== extern bool UseConfigFile = true; // use config file (false) extern bool PrintConfig = true; // print config infos (false) extern int MaPeriod = 20; //Period extern ENUM_LINE_STYLE StyleMa = STYLE_SOLID; // style (solid) extern int WidthMa = 1; // width (1) extern color ColorMa = clrGold; // color (Gold) //=========================================================================== double BuffMa[]; string indName = "Tstf"; // ==================================== CVS config file string TermDataFolder=TerminalInfoString(TERMINAL_DATA_PATH);/Files string ConfigFile=indName+"_"+_Symbol+"_"+IntegerToString(_Period)+".cvs"; int MAPERIOD; ENUM_LINE_STYLE STYLEMA ; int WIDTHMA ; color COLORMA ; //=========================================================================== int OnInit() { //ConfigFile=StringConcatenate(TerminalInfoString(TERMINAL_DATA_PATH),"\\MQL4\\Files\\",ConfigFile); ConfigFile=StringConcatenate(TermDataFolder,"\\MQL4\\Files\\",ConfigFile); Print(__FUNCTION__,": ConfigFile =",ConfigFile); // ================================ VariableValues if( FileIsExist(ConfigFile) ) ReadConfigFromFile(); else ReadUserConfig(); if(PrintConfig) { Print(__FUNCTION__,":" " period=",IntegerToString(MAPERIOD), " style=",IntegerToString(STYLEMA), " width=",IntegerToString(WIDTHMA), " color=",ColorToString(COLORMA) ); } // ================================ VariableValues IndicatorBuffers(1); SetIndexBuffer(0,BuffMa); SetIndexLabel(0,"Ma."); SetIndexStyle(0,DRAW_LINE,STYLEMA,WIDTHMA,COLORMA); return(INIT_SUCCEEDED); } //=========================================================================== void OnDeinit(const int reason) { // ================================ ConfigFile if(UseConfigFile) SaveConfigToFile(); else FileDelete(ConfigFile); // ================================ ConfigFile } //============================================================================= void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam ) { // ============ changed chart size or indis properties ==================== if (id == CHARTEVENT_CHART_CHANGE) { if( CheckConfigChange() ) //ChangedProperties { ReadUserConfig(); //ReadNewValues if(UseConfigFile) SaveConfigToFile(); //SaveImmediately else FileDelete(ConfigFile); //OrDeletePrevious } } } //=========================================================================== int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[] ) { int NeededBars=MAPERIOD+2; if(rates_total<=NeededBars) return(rates_total); int limit=rates_total-prev_calculated; if(prev_calculated==0) limit=rates_total-NeededBars; if(prev_calculated>0) limit++; for(int i=limit; i>=0; i--) BuffMa[i]=iMA(NULL,0,MAPERIOD,0,MODE_EMA,PRICE_CLOSE,i); return(rates_total); } //============================================================================= // Config File //============================================================================= void ReadUserConfig() { MAPERIOD = MaPeriod; STYLEMA = StyleMa; WIDTHMA = WidthMa; COLORMA = ColorMa; } // ==================================== bool CheckConfigChange() { if(MaPeriod != MAPERIOD) return(true); if(StyleMa != STYLEMA) return(true); if(WidthMa != WIDTHMA) return(true); if(ColorMa != COLORMA) return(true); return(false); } // ==================================== bool SaveConfigToFile() { if( FileIsExist(ConfigFile) ) FileDelete(ConfigFile); ResetLastError(); int FileOpHandle=FileOpen(ConfigFile,FILE_WRITE|FILE_CSV); if(FileOpHandle!=INVALID_HANDLE) { FileWrite(FileOpHandle, IntegerToString(MaPeriod),IntegerToString(StyleMa), IntegerToString(WidthMa), IntegerToString(ColorToARGB(ColorMa,255)) ); FileClose(FileOpHandle); if(PrintConfig) Print(__FUNCTION__,": saved to ",ConfigFile); } else { Print(__FUNCTION__,": ",ConfigFile," not opened for writing, code=",IntegerToString(_LastError)); } return(true); } // ==================================== bool ReadConfigFromFile() { ResetLastError(); int FileOpHandle=FileOpen(ConfigFile,FILE_READ|FILE_CSV); if(FileOpHandle!=INVALID_HANDLE) { while( !FileIsEnding(FileOpHandle) ) { MAPERIOD = (int) StringToInteger( FileReadString(FileOpHandle) ); STYLEMA = (ENUM_LINE_STYLE) StringToInteger( FileReadString(FileOpHandle) ); WIDTHMA = (int) StringToInteger( FileReadString(FileOpHandle) ); COLORMA = (color) StringToInteger( FileReadString(FileOpHandle) ); } FileClose(FileOpHandle); } else { Print(__FUNCTION__,": ",ConfigFile," not opened for reading, code=",IntegerToString(_LastError)); } return(true); } //============================================================================= OnInit: ConfigFile =C:\Users\xxxx\MetaQuotes\Terminal\MT4\MQL4\Files\ Tstf_.DE30Cash_15.cvs Bei WRONG_FILENAME kam mir der Gedanke, daß der Punkt im _Symbol vielleicht ein Problem darstellt: ich habe also mal den Namen direkt benutzt - hat leider nix geholfen. Hat jemand ne Idee, warum das plötzlich nicht mehr geht? Danke. AVT |
|
|||
In welcher Zeile tritt welcher Fehler auf?
|
|
|||
SaveConfigToFile:
C:\Users\xxxx\MetaQuotes\Terminal\MT4\MQL4\Files\T stf_.DE30Cash_30.cvs not opened for writing, code=5002 (es gibt keine Leerzeichen - auch wenn hier im Text plötzlich Leerzeichen erscheinen) Das heißt, ich kriege beim FileOpen(ConfigFile,FILE_WRITE|FILE_CSV); ein INVALID_HANDLE. Wahrscheinlich würde das beim Lesen genauso sein, da es aber keine Datei gibt, wird das Einlesen gar nicht erst versucht. AVT |
|
|||
Irgendwie kann ich den Fehler nicht erkennen. Der Browser stellt das Forum abgeschnitten dar.
Probier mal ein File ohne Pfad zu öffnen und schau mal, wo das aufgeht. Ich vermute Dein Pfad ist falsch. |
|
|||
Zitat:
Für mich ist das ok, aber ich will nicht wissen, was passiert, wenn das im Common Ordner landen soll - wozu habe ich 2 unterschiedliche Pfade, wenn ich lediglich den Dateinamen benutzen kann (und schließlich hatte ich das damals exakt nach Beispielen geschrieben). Danke für die Idee, daybyter, die erste Hürde ist damit genommen. Die Info wo genau die Config Datei liegt, muß ich dann aber über den Pfad machen (wenn ich schon ein PrintConfig habe, dann erwarte ich als Benutzer, daß mir die genaue Lage angegeben wird und nicht einfach nur "hier hast Du den Dateinamen, such selber wo die Datei ist"). AVT |
|
|||
Das Problem ist halt, dass sich der Pfad ändern kann. Läuft der EA im Tester schreibt mt4 ja woanders hin z. B.
|
|
|||
Zitat:
AVT |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|