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
|