Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43260
Benutzer: 7.222
Aktive Benutzer: 72
Links: 84
Wir begrüßen unseren neuesten Benutzer: Mane
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak
vor 2 Wochen
- Amateur
vor 2 Wochen
- infos1982

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 337
Gesamt: 337
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 05.02.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard 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);
}
//=============================================================================
Alle Prints geben die von MT vorgeschriebenen Dateien an:
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
  #2 (permalink)  
Alt 06.02.21
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 103
daybyter befindet sich auf einem aufstrebenden Ast
Standard

In welcher Zeile tritt welcher Fehler auf?
  #3 (permalink)  
Alt 06.02.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von daybyter Beitrag anzeigen
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
  #4 (permalink)  
Alt 06.02.21
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 103
daybyter befindet sich auf einem aufstrebenden Ast
Standard

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.
  #5 (permalink)  
Alt 06.02.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von daybyter Beitrag anzeigen
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.
Ich habe den kompletten Pfad mal rausgenommen und nur den Dateinamen benutzt. Da landet das ohne Fehler genau in dem MQL4\Files\ Ordner.
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
  #6 (permalink)  
Alt 06.02.21
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 103
daybyter befindet sich auf einem aufstrebenden Ast
Standard

Das Problem ist halt, dass sich der Pfad ändern kann. Läuft der EA im Tester schreibt mt4 ja woanders hin z. B.
  #7 (permalink)  
Alt 06.02.21
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von daybyter Beitrag anzeigen
Das Problem ist halt, dass sich der Pfad ändern kann. Läuft der EA im Tester schreibt mt4 ja woanders hin z. B.
Bei EAs gibts dafür die OnTester() Funktion, die habe ich allerdings nie benutzt (weil MT testen sowieso fürn A... ist), aber rein theoretisch sollte man da dann auch den Dateinamen bestimmen können. Nur so ein Gedanke.
AVT
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 02:36 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------