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: 4642
Beiträge: 41799
Benutzer: 7.010
Aktive Benutzer: 171
Links: 82
Wir begrüßen unseren neuesten Benutzer: Beef_Poppi
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Beef_Poppi
vor einer Woche
- Innocent
vor einer Woche
- Olaf4476
vor einer Woche
- bobbyandex...
vor einer Woche
- boboyelang

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 3 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 475
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
Mit Zitat antworten
  #2 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 102
daybyter befindet sich auf einem aufstrebenden Ast
Standard

In welcher Zeile tritt welcher Fehler auf?
Mit Zitat antworten
  #3 (permalink)  
Alt vor 3 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 475
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
Mit Zitat antworten
  #4 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 102
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.
Mit Zitat antworten
  #5 (permalink)  
Alt vor 3 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 475
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
Mit Zitat antworten
  #6 (permalink)  
Alt vor 3 Wochen
Mitglied
 
Registriert seit: Apr 2018
Beiträge: 102
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.
Mit Zitat antworten
  #7 (permalink)  
Alt vor 3 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 475
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
Mit Zitat antworten
Antwort

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 +1. Es ist jetzt 22:38 Uhr.





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