слияние данных в MT4 - страница 2

 
//+------------------------------------------------------------------+
//|                           Currency_Loader.mq4                    |
//|                      Copyright © 2006, Larionov P.V.             |
//|                                        lolion@mail.ru            |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Larionov P.V."
#property link      "lolion@mail.ru"
//---- input parameters
extern int  BarsMin=100;         // Minimal number bars in history which might be loaded into files.
extern int MaxBarsInFile = 20000; // Max Bars for loading into file.
extern int FrequencyUpdate = 60; // this value identify frequency update for files in sec.
extern bool LoadM1  = False;       //Timeframes of securities which data will be loaded onto File if True       
extern bool LoadM5  = False;
extern bool LoadM15 = False;
extern bool LoadM30 = False;
extern bool LoadH1  = False;
extern bool LoadH4  = True;
extern bool LoadD1  = True;
extern bool LoadW1  = True;
extern bool LoadMN  = False;
extern bool AllowInfo = False;
extern bool AllowLogFile = True;

string ExpertName = "Currency_Loader";
int deinit(){return(1);}
double ArrayM1[][6], ArrayM5[][6], ArrayM15[][6], ArrayM30[][6], ArrayH1[][6],ArrayH4[][6], ArrayD1[][6], ArrayW1[][6], ArrayMN[][6]; 
int ct, iDigits, Tryes=5, Pause=500, ArrSizeM1, ArrSizeM5, ArrSizeM15, ArrSizeM30, ArrSizeH1, ArrSizeH4, ArrSizeD1, ArrSizeW1, ArrSizeMN, i, i2, i3, h1, h2, h3, h4, h5, h6, h7, h8, h9, LCM1, LCM5, LCM15, LCM30, LCH1, LCH4, LCD1, LCW1, LCMN, LastError;
string CString, x, x2, FileNameM1, FileNameM5, FileNameM15, FileNameM30, FileNameH1, FileNameH4, FileNameD1, FileNameW1, FileNameMN, FilePatch, FirstLine;

int init(){//1
x="\"";
x2="\\";
iDigits=MarketInfo(Symbol(),MODE_DIGITS);
FilePatch = "Export_History"+x2+Symbol()+x2; 
FileNameM1 = FilePatch+Symbol()+"_"+"M1"+".csv"; 
FileNameM5 = FilePatch+Symbol()+"_"+"M5"+".csv"; 
FileNameM15 = FilePatch+Symbol()+"_"+"M15"+".csv"; 
FileNameM30 = FilePatch+Symbol()+"_"+"M30"+".csv"; 
FileNameH1 = FilePatch+Symbol()+"_"+"H1"+".csv"; 
FileNameH4 = FilePatch+Symbol()+"_"+"H4"+".csv"; 
FileNameD1 = FilePatch+Symbol()+"_"+"D1"+".csv"; 
FileNameW1 = FilePatch+Symbol()+"_"+"W1"+".csv"; 
FileNameMN = FilePatch+Symbol()+"_"+"MN"+".csv"; 
FirstLine =  ""+x+"Date"+x+" "+x+"Time"+x+" "+x+"Open"+x+" "+x+"High"+x+" "+x+"Low"+x+" "+x+"Close"+x+" "+x+"Volume"+x;
ct=CurTime()+61;
return(0);}



bool ROpen=false;

int start(){//1
if(ct == 0||ct < StrToTime(TimeToStr(CurTime(),TIME_MINUTES))){ct=StrToTime(TimeToStr(CurTime()+FrequencyUpdate,TIME_MINUTES)); ROpen=true;}
if(ROpen){//2
////////////////////////////////////////////////////////////////////////////// 
if(LoadM1){LoadingM1();}
if(LoadM5){LoadingM5();}
if(LoadM15){LoadingM15();}
if(LoadM30){LoadingM30();}
if(LoadH1){LoadingH1();}
if(LoadH4){LoadingH4();}
if(LoadD1){LoadingD1();}
if(LoadW1){LoadingW1();}
if(LoadMN){LoadingMN();}
ROpen=false;
////////////////////////////////////////////////////////////////////////////////
}//2   
return(0);
}//1

//******************************************************************************************
// loading history data from M1
void LoadingM1(){//1
int MaxBars=MaxBarsInFile;
if(LoadM1 && iBars(Symbol(),PERIOD_M1)>BarsMin){ArrayCopyRates(ArrayM1,Symbol(),PERIOD_M1); ArrSizeM1=ArrayRange(ArrayM1,0);}
 if(ArrSizeM1>1){//2
 if(MaxBars>ArrSizeM1){MaxBars=ArrSizeM1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h1 = FileOpen(FileNameM1,FILE_CSV|FILE_WRITE);
  if(h1==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM1+" successfully opened ");} 
  FileWrite(h1,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM1[i][5],0); //  Volume
   FileWrite(h1,CString);
   CString="";
   }//4
   FileClose(h1);
   LCM1 = iTime(Symbol(),PERIOD_M1,0);
   return;
  }//3
 }//2
}//1

void LoadingM5(){//1
int MaxBars=MaxBarsInFile;
if(LoadM5 && iBars(Symbol(),PERIOD_M5)>BarsMin){ArrayCopyRates(ArrayM5,Symbol(),PERIOD_M5); ArrSizeM5=ArrayRange(ArrayM5,0);}
 if(ArrSizeM5>1){//2
 if(MaxBars>ArrSizeM5){MaxBars=ArrSizeM5;}
  for(i2=1; i2<=Tryes; i2++){//3
  h2 = FileOpen(FileNameM5,FILE_CSV|FILE_WRITE);
  if(h2==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM5+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM5+" successfully opened ");} 
  FileWrite(h2,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM5[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM5[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM5[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM5[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM5[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM5[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM5[i][5],0); //  Volume
   FileWrite(h2,CString);
   CString="";
   }//4
   FileClose(h2);
   LCM5 = iTime(Symbol(),PERIOD_M5,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from M15
void LoadingM15(){//1
int MaxBars=MaxBarsInFile;
if(LoadM15 && iBars(Symbol(),PERIOD_M15)>BarsMin){ArrayCopyRates(ArrayM15,Symbol(),PERIOD_M15); ArrSizeM15=ArrayRange(ArrayM15,0);}
if(ArrSizeM15>1){//2
 if(MaxBars>ArrSizeM15){MaxBars=ArrSizeM15;}
  for(i2=1; i2<=Tryes; i2++){//3
  h3 = FileOpen(FileNameM15,FILE_CSV|FILE_WRITE);
  if(h3==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM15+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM15+" successfully opened ");} 
  FileWrite(h3,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM15[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM15[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM15[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM15[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM15[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM15[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM15[i][5],0); //  Volume
   FileWrite(h3,CString);
   CString="";
   }//4
   FileClose(h3);
   LCM15 = iTime(Symbol(),PERIOD_M15,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from M30
void LoadingM30(){//1
int MaxBars=MaxBarsInFile;
if(LoadM30 && iBars(Symbol(),PERIOD_M30)>BarsMin){ArrayCopyRates(ArrayM30,Symbol(),PERIOD_M30); ArrSizeM30=ArrayRange(ArrayM30,0);}
if(ArrSizeM30>1){//2
 if(MaxBars>ArrSizeM30){MaxBars=ArrSizeM30;}
  for(i2=1; i2<=Tryes; i2++){//3
  h4 = FileOpen(FileNameM30,FILE_CSV|FILE_WRITE);
  if(h4==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM30+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM30+" successfully opened ");} 
  FileWrite(h4,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM30[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM30[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM30[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM30[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM30[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM30[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM30[i][5],0); //  Volume
   FileWrite(h4,CString);
   CString="";
   }//4
   FileClose(h4);
   LCM30 = iTime(Symbol(),PERIOD_M30,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from H1
void LoadingH1(){//1
int MaxBars=MaxBarsInFile;
if(LoadH1 && iBars(Symbol(),PERIOD_H1)>BarsMin){ArrayCopyRates(ArrayH1,Symbol(),PERIOD_H1); ArrSizeH1=ArrayRange(ArrayH1,0);}
if(ArrSizeH1>1){//2
 if(MaxBars>ArrSizeH1){MaxBars=ArrSizeH1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h5 = FileOpen(FileNameH1,FILE_CSV|FILE_WRITE);
  if(h5==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameH1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameH1+" successfully opened ");} 
  FileWrite(h5,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayH1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayH1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayH1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayH1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayH1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayH1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayH1[i][5],0); //  Volume
   FileWrite(h5,CString);
   CString="";
   }//4
   FileClose(h5);
   LCH1 = iTime(Symbol(),PERIOD_H1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from H4
void LoadingH4(){//1
int MaxBars=MaxBarsInFile;
if(LoadH4 && iBars(Symbol(),PERIOD_H4)>BarsMin){ArrayCopyRates(ArrayH4,Symbol(),PERIOD_H4); ArrSizeH4=ArrayRange(ArrayH4,0);}
if(ArrSizeH4>1){//2
 if(MaxBars>ArrSizeH4){MaxBars=ArrSizeH4;}
  for(i2=1; i2<=Tryes; i2++){//3
  h6 = FileOpen(FileNameH4,FILE_CSV|FILE_WRITE);
  if(h6==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameH4+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameH4+" successfully opened ");} 
  FileWrite(h6,FirstLine);
   for (i=MaxBars-3; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayH4[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayH4[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayH4[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayH4[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayH4[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayH4[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayH4[i][5],0); //  Volume
   FileWrite(h6,CString);
   CString="";
   }//4
   FileClose(h6);
   LCH4 = iTime(Symbol(),PERIOD_H4,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from D1
#property copyright "Copyright © 2006, komposter"
#property link      "mailto:komposterius@mail.ru"

#include <WinUser32.mqh>

//---- Список графиков которые необходимо обрабатывать, разделённый запятой (",")
extern string	ChartList	= "EURUSD1440";
extern bool		SundayToMonday	= true;
//---- Частота, с которой будут обновляться графики в милисекундах
//---- Чем больше значение, тем меньше ресурсов будет использовать скрипт.
extern int		RefreshLuft	= 1000;

#define DELETE_DAY 0

int init() { start(); return(0); }
int start()
{
	int		_GetLastError = 0, cnt_copy = 0, cnt_add = 0, cnt_delete = 0, temp[13];
	int		Charts = 0, pos = 0, curchar = 0, len = StringLen( ChartList );
	string	cur_symbol = "", cur_period = "", file_name = "";

	string	_Symbol[100]; int _Period[100], _PeriodSec[], _Bars[];
	int		HistoryHandle[], hwnd[], last_fpos[], pre_time[], now_time[];
	double	now_close[], now_open[], now_low[], now_high[], now_volume[];
	double	pre_close[], pre_open[], pre_low[], pre_high[], pre_volume[];
	double	del_open[], del_low[], del_high[], del_volume[];

	//---- считаем количество графиков, которые необходимо обработать
	while ( pos <= len )
	{
		curchar = StringGetChar( ChartList, pos );
		if ( curchar > 47 && curchar < 58 )
		{ cur_period = cur_period + CharToStr( curchar ); }
		else
		{
			if ( curchar == ',' || pos == len )
			{ 
				MarketInfo( cur_symbol, MODE_BID );
				if ( GetLastError() == 4106 )
				{
					Alert( "Неизвестный символ ", cur_symbol, "!!!" );
					return(-1);				
				}
				if ( iClose( cur_symbol, StrToInteger( cur_period ), 0 ) <= 0 )
				{
					Alert( "Неизвестный период ", cur_period, "!!!" );
					return(-1);				
				}

				_Symbol[Charts] = cur_symbol; _Period[Charts] = StrToInteger( cur_period );
				cur_symbol = ""; cur_period = "";

				Charts ++;
			}
			else
			{ cur_symbol = cur_symbol + CharToStr( curchar ); }
		}
		pos++;
	}
	Print( "< - - - Найдено ", Charts, " корректных графиков. - - - >" );

	ArrayResize( _Symbol,			Charts ); ArrayResize( _Period,		Charts );
	ArrayResize( HistoryHandle,	Charts ); ArrayResize( hwnd,			Charts );
	ArrayResize( last_fpos,			Charts ); ArrayResize( pre_time,		Charts );
	ArrayResize( now_time,			Charts ); ArrayResize( now_close,	Charts );
	ArrayResize( now_open,			Charts ); ArrayResize( now_low,		Charts );
	ArrayResize( now_high,			Charts ); ArrayResize( now_volume,	Charts );
	ArrayResize( pre_close,			Charts ); ArrayResize( pre_open,		Charts );
	ArrayResize( pre_low,			Charts ); ArrayResize( pre_high,		Charts );
	ArrayResize( pre_volume,		Charts ); ArrayResize( _PeriodSec,	Charts );
	ArrayResize( del_open,			Charts ); ArrayResize( del_low,		Charts );
	ArrayResize( del_high,			Charts ); ArrayResize( del_volume,	Charts );
	ArrayResize( _Bars,				Charts );

	for ( int curChart = 0; curChart < Charts; curChart ++ )
	{
		cnt_copy = 0; cnt_delete = 0;

		_PeriodSec[curChart] = _Period[curChart] * 60;

		//---- открываем файл, в который будем записывать историю
		file_name = StringConcatenate( "WS_", _Symbol[curChart], _Period[curChart], ".hst" );
		HistoryHandle[curChart] = FileOpenHistory( file_name, FILE_BIN | FILE_WRITE );
		if ( HistoryHandle[curChart] < 0 )
		{
			_GetLastError = GetLastError();
			Alert( "FileOpenHistory( \"", file_name, "\", FILE_BIN | FILE_WRITE )",
																					" - Error #", _GetLastError );
			continue;
		}

		ArrayInitialize( temp, 0 );
		//---- Записываем заголовок файла
		FileWriteInteger	( HistoryHandle[curChart], 400, LONG_VALUE );
		FileWriteString	( HistoryHandle[curChart], "Copyright © 2006, komposter", 64 );
		FileWriteString	( HistoryHandle[curChart], StringConcatenate( "WS_", _Symbol[curChart] ), 12 );
		FileWriteInteger	( HistoryHandle[curChart], _Period[curChart], LONG_VALUE );
		FileWriteInteger	( HistoryHandle[curChart], MarketInfo( _Symbol[curChart], MODE_DIGITS ), LONG_VALUE );
		FileWriteInteger	( HistoryHandle[curChart], 0, LONG_VALUE );       //timesign
		FileWriteInteger	( HistoryHandle[curChart], 0, LONG_VALUE );       //last_sync
		FileWriteArray		( HistoryHandle[curChart], temp, 0, 13 );

		//+------------------------------------------------------------------+
		//| Обрабатываем историю
		//+------------------------------------------------------------------+
		_Bars[curChart] = iBars( _Symbol[curChart], _Period[curChart] );
		pre_time[curChart] = iTime( _Symbol[curChart], _Period[curChart], _Bars[curChart] - 1 );
		for( int i = _Bars[curChart] - 1; i >= 1; i-- )
		{
			//---- Запоминаем параметры бара
			now_open		[curChart] = iOpen	( _Symbol[curChart], _Period[curChart], i );
			now_high		[curChart] = iHigh	( _Symbol[curChart], _Period[curChart], i );
			now_low		[curChart] = iLow		( _Symbol[curChart], _Period[curChart], i );
			now_close	[curChart] = iClose	( _Symbol[curChart], _Period[curChart], i );
			now_volume	[curChart] = iVolume	( _Symbol[curChart], _Period[curChart], i );
			now_time		[curChart] = iTime	( _Symbol[curChart], _Period[curChart], i ) / _PeriodSec[curChart];
			now_time		[curChart] *=_PeriodSec[curChart];
			cnt_copy ++;

			if ( TimeDayOfWeek(now_time[curChart]) == DELETE_DAY )
			{
				del_open		[curChart] = now_open	[curChart];
				del_high		[curChart] = now_high	[curChart];
				del_low		[curChart] = now_low		[curChart];
				del_volume	[curChart] = now_volume	[curChart];
				cnt_delete ++;
				continue;
			}
			if ( SundayToMonday )
			{
				if ( del_open[curChart] > 0 && del_volume[curChart] > 0 && del_low [curChart] > 0 && del_high[curChart] > 0 )
				{
					now_open		[curChart] = del_open[curChart];
					now_high		[curChart] = MathMax( del_high[curChart], now_high[curChart] );
					now_low		[curChart] = MathMin( del_low [curChart], now_low [curChart] );
					now_volume	[curChart] += del_volume[curChart];
					del_open[curChart] = 0.0;
					del_high[curChart] = 0.0;
					del_low [curChart] = 0.0;
					del_volume[curChart] = 0.0;
				}
			}

			//---- записываем новый бар в файл
			FileWriteInteger	( HistoryHandle[curChart], now_time[curChart],		LONG_VALUE	);
			FileWriteDouble	( HistoryHandle[curChart], now_open[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_low[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_high[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_close[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_volume[curChart],	DOUBLE_VALUE);
			FileFlush			( HistoryHandle[curChart] );

			//---- запоминаем значение времени и цену закрытия записанного бара
			pre_close[curChart]	= now_close[curChart];
			pre_time[curChart]	= now_time[curChart] / _PeriodSec[curChart];
			pre_time[curChart]	*=_PeriodSec[curChart];
 		}

		last_fpos[curChart] = FileTell( HistoryHandle[curChart] );

		//---- выводим статистику
		Print( "< - - - ", _Symbol[curChart], _Period[curChart], ": было ", cnt_copy, " баров, удалено ", cnt_delete, " баров - - - >" );
		Print( "< - - - Для просмотра результатов, откройте график \"WS_", 
												_Symbol[curChart], _Period[curChart], "\" - - - >" );

	}

	//+------------------------------------------------------------------+
	//| Обрабатываем поступающие тики
	//+------------------------------------------------------------------+
	while ( !IsStopped() )
	{
		RefreshRates();
		for ( curChart = 0; curChart < Charts; curChart ++ )
		{
			//---- ставим "курсор" перед последним баром
			//---- (это необходимо на всех запусках, кроме первого)
			FileSeek( HistoryHandle[curChart], last_fpos[curChart], SEEK_SET );

			//---- Запоминаем параметры бара
			now_open		[curChart] = iOpen	( _Symbol[curChart], _Period[curChart], 0 );
			now_high		[curChart] = iHigh	( _Symbol[curChart], _Period[curChart], 0 );
			now_low		[curChart] = iLow		( _Symbol[curChart], _Period[curChart], 0 );
			now_close	[curChart] = iClose	( _Symbol[curChart], _Period[curChart], 0 );
			now_volume	[curChart] = iVolume	( _Symbol[curChart], _Period[curChart], 0 );
			now_time		[curChart] = iTime	( _Symbol[curChart], _Period[curChart], 0 ) 
																						/ _PeriodSec[curChart];
			now_time		[curChart] *=_PeriodSec[curChart];

			if ( TimeDayOfWeek(now_time[curChart]) == DELETE_DAY )
			{
				del_open		[curChart] = now_open	[curChart];
				del_high		[curChart] = now_high	[curChart];
				del_low		[curChart] = now_low		[curChart];
				del_volume	[curChart] = now_volume	[curChart];
				continue;
			}
			if ( SundayToMonday )
			{
				if ( TimeDayOfWeek(now_time[curChart]) == DELETE_DAY + 1 )
				{
					now_open		[curChart] = del_open[curChart];
					now_high		[curChart] = MathMax( del_high[curChart], now_high[curChart] );
					now_low		[curChart] = MathMin( del_low [curChart], now_low [curChart] );
					now_volume	[curChart] += del_volume[curChart];
				}
			}

			//---- если бар сформировался, 
			if ( now_time[curChart] >= pre_time[curChart] + _PeriodSec[curChart] )
			{
				//---- записываем сформировавшийся бар
				FileWriteInteger	( HistoryHandle[curChart], pre_time[curChart],	 LONG_VALUE	 );
				FileWriteDouble	( HistoryHandle[curChart], pre_open[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_low[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_high[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_close[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_volume[curChart], DOUBLE_VALUE );
				FileFlush			( HistoryHandle[curChart] );

				//---- запоминаем место в файле, перед записью 0-го бара
				last_fpos[curChart] = FileTell( HistoryHandle[curChart] );
			}

			//---- записываем текущий бар
			FileWriteInteger	( HistoryHandle[curChart], now_time[curChart],		LONG_VALUE	 );
			FileWriteDouble	( HistoryHandle[curChart], now_open[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_low[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_high[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_close[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_volume[curChart],	DOUBLE_VALUE );
			FileFlush			( HistoryHandle[curChart] );

			//---- запоминаем параметры записанного бара
			pre_open[curChart]		= now_open[curChart];
			pre_high[curChart]		= now_high[curChart];
			pre_low[curChart]			= now_low[curChart];
			pre_close[curChart]		= now_close[curChart];
			pre_volume[curChart]		= now_volume[curChart];
			pre_time[curChart]		= now_time[curChart] / _PeriodSec[curChart];
			pre_time[curChart]		*=_PeriodSec[curChart];

			//---- находим окно, в которое будем "отправлять" свежие котировки
			if ( hwnd[curChart] == 0 )
			{
				hwnd[curChart] = WindowHandle( StringConcatenate( "WS_", _Symbol[curChart] ), 
																								_Period[curChart] );
				if ( hwnd[curChart] != 0 ) { Print( "< - - - График ", "WS_" + _Symbol[curChart], 
																	_Period[curChart], " найден! - - - >" ); }
			}
			//---- и, если нашли, обновляем его
			if ( hwnd[curChart] != 0 ) { PostMessageA( hwnd[curChart], WM_COMMAND, 33324, 0 ); }
		}
		Sleep(RefreshLuft);
	}

	for ( curChart = 0; curChart < Charts; curChart ++ )
	{
		if ( HistoryHandle[curChart] >= 0 )
		{
			//---- закрываем файл
			FileClose( HistoryHandle[curChart] );
			HistoryHandle[curChart] = -1;
		}
	}
	return(0);
}

void LoadingD1(){//1
int MaxBars=MaxBarsInFile;
if(LoadD1 && iBars(Symbol(),PERIOD_D1)>BarsMin){ArrayCopyRates(ArrayD1,Symbol(),PERIOD_D1); ArrSizeD1=ArrayRange(ArrayD1,0);}
if(ArrSizeD1>1){//2
 if(MaxBars>ArrSizeD1){MaxBars=ArrSizeD1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h7 = FileOpen(FileNameD1,FILE_CSV|FILE_WRITE);
  if(h7==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameD1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameD1+" successfully opened ");} 
  FileWrite(h7,FirstLine);
   for (i=MaxBars-3; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayD1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayD1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayD1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayD1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayD1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayD1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayD1[i][5],0); //  Volume
   FileWrite(h7,CString);
   CString="";
   }//4
   FileClose(h7);
   LCD1 = iTime(Symbol(),PERIOD_D1,-1);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from W1
void LoadingW1(){//1
int MaxBars=MaxBarsInFile;
if(LoadW1 && iBars(Symbol(),PERIOD_W1)>BarsMin){ArrayCopyRates(ArrayW1,Symbol(),PERIOD_W1); ArrSizeW1=ArrayRange(ArrayW1,0);}
if(ArrSizeW1>1){//2
 if(MaxBars>ArrSizeW1){MaxBars=ArrSizeW1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h8 = FileOpen(FileNameW1,FILE_CSV|FILE_WRITE);
  if(h8==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameW1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameW1+" successfully opened ");} 
  FileWrite(h8,FirstLine);
   for (i=MaxBars-3; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayW1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayW1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayW1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayW1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayW1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayW1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayW1[i][5],0); //  Volume
   FileWrite(h8,CString);
   CString="";
   }//4
   FileClose(h8);
   LCW1 = iTime(Symbol(),PERIOD_W1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from MN1
void LoadingMN(){//1
int MaxBars=MaxBarsInFile;
if(LoadMN && iBars(Symbol(),PERIOD_MN1)>BarsMin){ArrayCopyRates(ArrayMN,Symbol(),PERIOD_MN1); ArrSizeMN=ArrayRange(ArrayMN,0);}
if(ArrSizeMN>1){//2
 if(MaxBars>ArrSizeMN){MaxBars=ArrSizeMN;}
  for(i2=1; i2<=Tryes; i2++){//3
  h9 = FileOpen(FileNameMN,FILE_CSV|FILE_WRITE);
  if(h9==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameMN+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameMN+" successfully opened ");} 
  FileWrite(h9,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayMN[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayMN[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayMN[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayMN[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayMN[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayMN[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayMN[i][5],0); //  Volume
   FileWrite(h9,CString);
   CString="";
   }//4
   FileClose(h9);
   LCMN = iTime(Symbol(),PERIOD_MN1,0);
   return;
  }//3
 }//2
}//1

/************************************************************************************************
void Info(string MessageType=1, int Actuality=1, string MessageHead="", string MessageBody="HI")
Описание: формирование информационного канала работы программы, 
ежендевная выгрузка оперативной информации в текстовый файл, 
отправка отчетности по почте, вывод информационных сообщений в окно сообщений.
Параметры:
string MessageType - 1-вывод простого сообщения, 2- запись в файл, 3- отправка электронным письмом. 4- ежедневный вывод отчета о проведенных операциях и событиях.  
int Actuality  - степень важности сообщений, от 1 до 5.
string MessageHead - Заголовок сообщения для электронных писем.
string MessageBody - строка сообщения.  
***********************************************************************************************/
double Info(string MessageType="1,0,0", int Actuality = 1, string MessageHead="", string MessageBody="HI"){//1
int WarnMessLevel=3;
bool AllowMailSending=false, AllowStatement=false;
string _CurTimeDaily;
 string CurRusTimeMin;
 _CurTimeDaily = GetCurRusTime("Days"); 
 if(Actuality<=WarnMessLevel){//2
 int i, fwr;
 int OpString=-1;
 string FileName =StringConcatenate("LOG",ExpertName,_CurTimeDaily); 
 if(MessageHead=="")MessageHead=StringConcatenate("from expert ",ExpertName,TimeToStr(CurTime()));
 OpString = StringFind(MessageType,"1",0);
 if(OpString>-1){if(AllowInfo){Print(MessageBody);}}
 OpString = StringFind(MessageType,"2",0);
  if(OpString>-1){//3
   if(AllowLogFile){//4
    CurRusTimeMin = GetCurRusTime("Seconds")+" ";
    MessageBody= StringConcatenate(CurRusTimeMin,MessageBody); 
    for(i=0; i<5; i++){//5
    int HFile=FileOpen(FileName,FILE_READ|FILE_WRITE," "); 
     if(HFile>0){//6    
     FileSeek(HFile,0,SEEK_END); 
     FileWrite(HFile,MessageBody); 
     FileFlush(HFile); 
     FileClose(HFile);
     break; 
     }else{Sleep(500); continue; }//6
    }//5
   }//4
  }//3
  OpString = StringFind(MessageType,"3",0);
  if(OpString>-1){//3
   if(AllowMailSending && (!IsTesting())){//4
   int RetVal;
   SendMail( MessageHead, MessageBody );
   RetVal = GetLastError();
   if(RetVal>0){Info("1.2",1,"","Some mistakes were happened while mail sending "+ErrorDescription(RetVal));}
   }//4
  }//3
  OpString = StringFind(MessageType,"4",0);
  if(OpString>-1){//3
   if(AllowStatement){//4
   i=i;
   }//4
  }//3
 }else{return(0);}//2
return(0);
}//1

string GetCurRusTime(string Detail) 
{//1 
   string StrMonth="",StrDay="",StrHour="",StrMinute="",StrSeconds=""; 
   RefreshRates(); 
 
 if (Detail == "Seconds"){  
   if(Month()<10) { StrMonth="0"+Month(); } else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" "+StrHour+":"+StrMinute+":"+StrSeconds+" ");  
   }
 if (Detail == "Hours"){  
   if(Month()<10) { StrMonth="0"+Month(); } else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" "+StrHour+":00:"+"00 ");  
   }
 if (Detail == "Days"){  
   if(Month()<10) { StrMonth="0"+Month(); }else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" ");  
   }
}//1 





//---- codes returned from trade server
string ErrorDescription(int error_code)
  {
   string error_string;
//----
   switch(error_code)
     {
      case 0:
      case 1:   error_string="no error";                                                  break;
      case 2:   error_string="common error";                                              break;
      case 3:   error_string="invalid trade parameters";                                  break;
      case 4:   error_string="trade server is busy";                                      break;
      case 5:   error_string="old version of the client terminal";                        break;
      case 6:   error_string="no connection with trade server";                           break;
      case 7:   error_string="not enough rights";                                         break;
      case 8:   error_string="too frequent requests";                                     break;
      case 9:   error_string="malfunctional trade operation";                             break;
      case 64:  error_string="account disabled";                                          break;
      case 65:  error_string="invalid account";                                           break;
      case 128: error_string="trade timeout";                                             break;
      case 129: error_string="invalid price";                                             break;
      case 130: error_string="invalid stops";                                             break;
      case 131: error_string="invalid trade volume";                                      break;
      case 132: error_string="market is closed";                                          break;
      case 133: error_string="trade is disabled";                                         break;
      case 134: error_string="not enough money";                                          break;
      case 135: error_string="price changed";                                             break;
      case 136: error_string="off quotes";                                                break;
      case 137: error_string="broker is busy";                                            break;
      case 138: error_string="requote";                                                   break;
      case 139: error_string="order is locked";                                           break;
      case 140: error_string="long positions only allowed";                               break;
      case 141: error_string="too many requests";                                         break;
      case 145: error_string="modification denied because order too close to market";     break;
      case 146: error_string="trade context is busy";                                     break;
      //---- mql4 errors
      case 4000: error_string="no error";                                                 break;
      case 4001: error_string="wrong function pointer";                                   break;
      case 4002: error_string="array index is out of range";                              break;
      case 4003: error_string="no memory for function call stack";                        break;
      case 4004: error_string="recursive stack overflow";                                 break;
      case 4005: error_string="not enough stack for parameter";                           break;
      case 4006: error_string="no memory for parameter string";                           break;
      case 4007: error_string="no memory for temp string";                                break;
      case 4008: error_string="not initialized string";                                   break;
      case 4009: error_string="not initialized string in array";                          break;
      case 4010: error_string="no memory for array\' string";                             break;
      case 4011: error_string="too long string";                                          break;
      case 4012: error_string="remainder from zero divide";                               break;
      case 4013: error_string="zero divide";                                              break;
      case 4014: error_string="unknown command";                                          break;
      case 4015: error_string="wrong jump (never generated error)";                       break;
      case 4016: error_string="not initialized array";                                    break;
      case 4017: error_string="dll calls are not allowed";                                break;
      case 4018: error_string="cannot load library";                                      break;
      case 4019: error_string="cannot call function";                                     break;
      case 4020: error_string="expert function calls are not allowed";                    break;
      case 4021: error_string="not enough memory for temp string returned from function"; break;
      case 4022: error_string="system is busy (never generated error)";                   break;
      case 4050: error_string="invalid function parameters count";                        break;
      case 4051: error_string="invalid function parameter value";                         break;
      case 4052: error_string="string function internal error";                           break;
      case 4053: error_string="some array error";                                         break;
      case 4054: error_string="incorrect series array using";                             break;
      case 4055: error_string="custom indicator error";                                   break;
      case 4056: error_string="arrays are incompatible";                                  break;
      case 4057: error_string="global variables processing error";                        break;
      case 4058: error_string="global variable not found";                                break;
      case 4059: error_string="function is not allowed in testing mode";                  break;
      case 4060: error_string="function is not confirmed";                                break;
      case 4061: error_string="send mail error";                                          break;
      case 4062: error_string="string parameter expected";                                break;
      case 4063: error_string="integer parameter expected";                               break;
      case 4064: error_string="double parameter expected";                                break;
      case 4065: error_string="array as parameter expected";                              break;
      case 4066: error_string="requested history data in update state";                   break;
      case 4099: error_string="end of file";                                              break;
      case 4100: error_string="some file error";                                          break;
      case 4101: error_string="wrong file name";                                          break;
      case 4102: error_string="too many opened files";                                    break;
      case 4103: error_string="cannot open file";                                         break;
      case 4104: error_string="incompatible access to a file";                            break;
      case 4105: error_string="no order selected";                                        break;
      case 4106: error_string="unknown symbol";                                           break;
      case 4107: error_string="invalid price parameter for trade function";               break;
      case 4108: error_string="invalid ticket";                                           break;
      case 4109: error_string="trade is not allowed";                                     break;
      case 4110: error_string="longs are not allowed";                                    break;
      case 4111: error_string="shorts are not allowed";                                   break;
      case 4200: error_string="object is already exist";                                  break;
      case 4201: error_string="unknown object property";                                  break;
      case 4202: error_string="object is not exist";                                      break;
      case 4203: error_string="unknown object type";                                      break;
      case 4204: error_string="no object name";                                           break;
      case 4205: error_string="object coordinates error";                                 break;
      case 4206: error_string="no specified subwindow";                                   break;
      default:   error_string="unknown error";
     }
//----
   return(error_string);
  }


 
Try to test following script. Attach some EA to offline chart. Then drop this script. One dropping - one expert launch.
тут написано что надо сначала присоединить эксперта к автономному графику, а потом уже бросать этот скрипт. А присоединить как раз и не получается.
 
Во-первых запуск функции start() на автономных графиках нужно производить из функции init(), так как отсутствует механизм тиков.
То есть в функцию init() перед её завершением нужно вписать вызов функции start()

int init(){
 .........................

start();
return(0);}



Далее посмотрите на Symbol(). На автономных графиках он будет другим. Например в Вашем случае это будет WS_EURUSD на автономном графике. Лучше просто замените использование функции Symbol() на использование вот такой функции _Symbol()

string _Symbol()
{
 string new_symbol;
 new_symbol=StringSubstr(Symbol(),3,StringLen(Symbol())-1);
 return(new_symbol);
}


Но только для данных D1, у которых удалены воскресенья, нужно продолжать использовать Symbol()!.

И если вам нужно в эксперте делать многократные вызовы функции start() с целью обновления выгружаемых файлов котировок, то в ней должен быть организован бесконечный цикл:

start()
{
   while (!IsStopped())//Запуск бесконечного цикла
   {
.........
  Sleep(60000); // 60секунд паузы - выберите по своему вкусу требуемую частоту обновления
  }
}
 
Try to test following script. Attach some EA to offline chart. Then drop this script. One dropping - one expert launch.
тут написано что надо сначала присоединить эксперта к автономному графику, а потом уже бросать этот скрипт. А присоединить как раз и не получается.


Тут идёт речь про родной встроенный periodconverter. Для Вашего случая последовательность может быть следующей.
Бросили эксперт, сшивающий воскресенье с понедельником, на дневной график EURUSD. Открыли автономный график WS_EURUSD,Daily. Бросили на автономный график своего эксперта для выгрузки котировок, открорректированный в соответствии с приведёнными выше рекомендациями.
 
спасибо. попробую сделать.напишу
 
Выгружать стал, но вместо реальных HLOC везде и по всем таймфреймам единицы
Date "Time" "Open" "High" "Low" "Close" "Volume"
1978.10.02,00:00,1,1,1,1,1
1978.10.03,00:00,1,1,1,1,1
//+------------------------------------------------------------------+
//|                           Currency_Loader.mq4                    |
//|                      Copyright © 2006, Larionov P.V.             |
//|                                        lolion@mail.ru            |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Larionov P.V."
#property link      "lolion@mail.ru"
//---- input parameters
extern int  BarsMin=100;         // Minimal number bars in history which might be loaded into files.
extern int MaxBarsInFile = 20000; // Max Bars for loading into file.
extern int FrequencyUpdate = 60; // this value identify frequency update for files in sec.
extern bool LoadM1  = True;       //Timeframes of securities which data will be loaded onto File if True       
extern bool LoadM5  = True;
extern bool LoadM15 = True;
extern bool LoadM30 = True;
extern bool LoadH1  = True;
extern bool LoadH4  = True;
extern bool LoadD1  = True;
extern bool LoadW1  = True;
extern bool LoadMN  = True;
extern bool AllowInfo = True;
extern bool AllowLogFile = True;

string ExpertName = "Currency_Loader";
int deinit(){return(0);}
double ArrayM1[][6], ArrayM5[][6], ArrayM15[][6], ArrayM30[][6], ArrayH1[][6],ArrayH4[][6], ArrayD1[][6], ArrayW1[][6], ArrayMN[][6]; 
int ct, iDigits, Tryes=5, Pause=500, ArrSizeM1, ArrSizeM5, ArrSizeM15, ArrSizeM30, ArrSizeH1, ArrSizeH4, ArrSizeD1, ArrSizeW1, ArrSizeMN, i, i2, i3, h1, h2, h3, h4, h5, h6, h7, h8, h9, LCM1, LCM5, LCM15, LCM30, LCH1, LCH4, LCD1, LCW1, LCMN, LastError;
string CString, x, x2, FileNameM1, FileNameM5, FileNameM15, FileNameM30, FileNameH1, FileNameH4, FileNameD1, FileNameW1, FileNameMN, FilePatch, FirstLine;


string _Symbol()
{
 string new_symbol;
 new_symbol=StringSubstr(Symbol(),3,StringLen(Symbol())-1);
 return(new_symbol);
}

int init(){//1
x="\"";
x2="\\";
iDigits=MarketInfo(Symbol(),MODE_DIGITS);
FilePatch = "Export_History"+x2+Symbol()+x2; 
FileNameM1 = FilePatch+_Symbol()+"_"+"M1"+".csv"; 
FileNameM5 = FilePatch+_Symbol()+"_"+"M5"+".csv"; 
FileNameM15 = FilePatch+_Symbol()+"_"+"M15"+".csv"; 
FileNameM30 = FilePatch+_Symbol()+"_"+"M30"+".csv"; 
FileNameH1 = FilePatch+_Symbol()+"_"+"H1"+".csv"; 
FileNameH4 = FilePatch+_Symbol()+"_"+"H4"+".csv"; 
FileNameD1 = FilePatch+_Symbol()+"_"+"D1"+".csv"; 
FileNameW1 = FilePatch+_Symbol()+"_"+"W1"+".csv"; 
FileNameMN = FilePatch+_Symbol()+"_"+"MN"+".csv"; 
FirstLine =  ""+x+"Date"+x+" "+x+"Time"+x+" "+x+"Open"+x+" "+x+"High"+x+" "+x+"Low"+x+" "+x+"Close"+x+" "+x+"Volume"+x;
ct=CurTime()+61;
start();
return(0);}



bool ROpen=false;

int start()
{
   while (!IsStopped())//Запуск бесконечного цикла
   {//start(){//1
if(ct == 0||ct < StrToTime(TimeToStr(CurTime(),TIME_MINUTES))){ct=StrToTime(TimeToStr(CurTime()+FrequencyUpdate,TIME_MINUTES)); ROpen=true;}
if(ROpen){//2
////////////////////////////////////////////////////////////////////////////// 
if(LoadM1){LoadingM1();}
if(LoadM5){LoadingM5();}
if(LoadM15){LoadingM15();}
if(LoadM30){LoadingM30();}
if(LoadH1){LoadingH1();}
if(LoadH4){LoadingH4();}
if(LoadD1){LoadingD1();}
if(LoadW1){LoadingW1();}
if(LoadMN){LoadingMN();}
ROpen=false;
////////////////////////////////////////////////////////////////////////////////
}//2  
 Sleep(60000); // 60секунд паузы - выберите по своему вкусу требуемую частоту обновления
  }
}
return(0);
//1

//******************************************************************************************
// loading history data from M1
void LoadingM1(){//1
int MaxBars=MaxBarsInFile;
if(LoadM1 && iBars(_Symbol(),PERIOD_M1)>BarsMin){ArrayCopyRates(ArrayM1,_Symbol(),PERIOD_M1); ArrSizeM1=ArrayRange(ArrayM1,0);}
 if(ArrSizeM1>1){//2
 if(MaxBars>ArrSizeM1){MaxBars=ArrSizeM1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h1 = FileOpen(FileNameM1,FILE_CSV|FILE_WRITE);
  if(h1==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM1+" successfully opened ");} 
  FileWrite(h1,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM1[i][5],0); //  Volume
   FileWrite(h1,CString);
   CString="";
   }//4
   FileClose(h1);
   LCM1 = iTime(_Symbol(),PERIOD_M1,0);
   return;
  }//3
 }//2
}//1

void LoadingM5(){//1
int MaxBars=MaxBarsInFile;
if(LoadM5 && iBars(_Symbol(),PERIOD_M5)>BarsMin){ArrayCopyRates(ArrayM5,_Symbol(),PERIOD_M5); ArrSizeM5=ArrayRange(ArrayM5,0);}
 if(ArrSizeM5>1){//2
 if(MaxBars>ArrSizeM5){MaxBars=ArrSizeM5;}
  for(i2=1; i2<=Tryes; i2++){//3
  h2 = FileOpen(FileNameM5,FILE_CSV|FILE_WRITE);
  if(h2==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM5+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM5+" successfully opened ");} 
  FileWrite(h2,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM5[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM5[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM5[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM5[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM5[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM5[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM5[i][5],0); //  Volume
   FileWrite(h2,CString);
   CString="";
   }//4
   FileClose(h2);
   LCM5 = iTime(_Symbol(),PERIOD_M5,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from M15
void LoadingM15(){//1
int MaxBars=MaxBarsInFile;
if(LoadM15 && iBars(_Symbol(),PERIOD_M15)>BarsMin){ArrayCopyRates(ArrayM15,_Symbol(),PERIOD_M15); ArrSizeM15=ArrayRange(ArrayM15,0);}
if(ArrSizeM15>1){//2
 if(MaxBars>ArrSizeM15){MaxBars=ArrSizeM15;}
  for(i2=1; i2<=Tryes; i2++){//3
  h3 = FileOpen(FileNameM15,FILE_CSV|FILE_WRITE);
  if(h3==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM15+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM15+" successfully opened ");} 
  FileWrite(h3,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM15[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM15[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM15[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM15[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM15[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM15[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM15[i][5],0); //  Volume
   FileWrite(h3,CString);
   CString="";
   }//4
   FileClose(h3);
   LCM15 = iTime(_Symbol(),PERIOD_M15,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from M30
void LoadingM30(){//1
int MaxBars=MaxBarsInFile;
if(LoadM30 && iBars(_Symbol(),PERIOD_M30)>BarsMin){ArrayCopyRates(ArrayM30,_Symbol(),PERIOD_M30); ArrSizeM30=ArrayRange(ArrayM30,0);}
if(ArrSizeM30>1){//2
 if(MaxBars>ArrSizeM30){MaxBars=ArrSizeM30;}
  for(i2=1; i2<=Tryes; i2++){//3
  h4 = FileOpen(FileNameM30,FILE_CSV|FILE_WRITE);
  if(h4==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM30+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM30+" successfully opened ");} 
  FileWrite(h4,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM30[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM30[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM30[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM30[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM30[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM30[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM30[i][5],0); //  Volume
   FileWrite(h4,CString);
   CString="";
   }//4
   FileClose(h4);
   LCM30 = iTime(_Symbol(),PERIOD_M30,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from H1
void LoadingH1(){//1
int MaxBars=MaxBarsInFile;
if(LoadH1 && iBars(_Symbol(),PERIOD_H1)>BarsMin){ArrayCopyRates(ArrayH1,_Symbol(),PERIOD_H1); ArrSizeH1=ArrayRange(ArrayH1,0);}
if(ArrSizeH1>1){//2
 if(MaxBars>ArrSizeH1){MaxBars=ArrSizeH1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h5 = FileOpen(FileNameH1,FILE_CSV|FILE_WRITE);
  if(h5==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameH1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameH1+" successfully opened ");} 
  FileWrite(h5,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayH1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayH1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayH1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayH1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayH1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayH1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayH1[i][5],0); //  Volume
   FileWrite(h5,CString);
   CString="";
   }//4
   FileClose(h5);
   LCH1 = iTime(_Symbol(),PERIOD_H1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from H4
void LoadingH4(){//1
int MaxBars=MaxBarsInFile;
if(LoadH4 && iBars(_Symbol(),PERIOD_H4)>BarsMin){ArrayCopyRates(ArrayH4,_Symbol(),PERIOD_H4); ArrSizeH4=ArrayRange(ArrayH4,0);}
if(ArrSizeH4>1){//2
 if(MaxBars>ArrSizeH4){MaxBars=ArrSizeH4;}
  for(i2=1; i2<=Tryes; i2++){//3
  h6 = FileOpen(FileNameH4,FILE_CSV|FILE_WRITE);
  if(h6==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameH4+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameH4+" successfully opened ");} 
  FileWrite(h6,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayH4[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayH4[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayH4[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayH4[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayH4[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayH4[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayH4[i][5],0); //  Volume
   FileWrite(h6,CString);
   CString="";
   }//4
   FileClose(h6);
   LCH4 = iTime(_Symbol(),PERIOD_H4,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from D1
void LoadingD1(){//1
int MaxBars=MaxBarsInFile;
if(LoadD1 && iBars(Symbol(),PERIOD_D1)>BarsMin){ArrayCopyRates(ArrayD1,Symbol(),PERIOD_D1); ArrSizeD1=ArrayRange(ArrayD1,0);}
if(ArrSizeD1>1){//2
 if(MaxBars>ArrSizeD1){MaxBars=ArrSizeD1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h7 = FileOpen(FileNameD1,FILE_CSV|FILE_WRITE);
  if(h7==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameD1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameD1+" successfully opened ");} 
  FileWrite(h7,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayD1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayD1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayD1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayD1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayD1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayD1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayD1[i][5],0); //  Volume
   FileWrite(h7,CString);
   CString="";
   }//4
   FileClose(h7);
   LCD1 = iTime(Symbol(),PERIOD_D1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from W1
void LoadingW1(){//1
int MaxBars=MaxBarsInFile;
if(LoadW1 && iBars(_Symbol(),PERIOD_W1)>BarsMin){ArrayCopyRates(ArrayW1,_Symbol(),PERIOD_W1); ArrSizeW1=ArrayRange(ArrayW1,0);}
if(ArrSizeW1>1){//2
 if(MaxBars>ArrSizeW1){MaxBars=ArrSizeW1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h8 = FileOpen(FileNameW1,FILE_CSV|FILE_WRITE);
  if(h8==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameW1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameW1+" successfully opened ");} 
  FileWrite(h8,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayW1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayW1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayW1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayW1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayW1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayW1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayW1[i][5],0); //  Volume
   FileWrite(h8,CString);
   CString="";
   }//4
   FileClose(h8);
   LCW1 = iTime(_Symbol(),PERIOD_W1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from MN1
void LoadingMN(){//1
int MaxBars=MaxBarsInFile;
if(LoadMN && iBars(_Symbol(),PERIOD_MN1)>BarsMin){ArrayCopyRates(ArrayMN,_Symbol(),PERIOD_MN1); ArrSizeMN=ArrayRange(ArrayMN,0);}
if(ArrSizeMN>1){//2
 if(MaxBars>ArrSizeMN){MaxBars=ArrSizeMN;}
  for(i2=1; i2<=Tryes; i2++){//3
  h9 = FileOpen(FileNameMN,FILE_CSV|FILE_WRITE);
  if(h9==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameMN+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameMN+" successfully opened ");} 
  FileWrite(h9,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayMN[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayMN[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayMN[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayMN[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayMN[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayMN[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayMN[i][5],0); //  Volume
   FileWrite(h9,CString);
   CString="";
   }//4
   FileClose(h9);
   LCMN = iTime(_Symbol(),PERIOD_MN1,0);
   return;
  }//3
 }//2
}//1

/************************************************************************************************
void Info(string MessageType=1, int Actuality=1, string MessageHead="", string MessageBody="HI")
Описание: формирование информационного канала работы программы, 
ежендевная выгрузка оперативной информации в текстовый файл, 
отправка отчетности по почте, вывод информационных сообщений в окно сообщений.
Параметры:
string MessageType - 1-вывод простого сообщения, 2- запись в файл, 3- отправка электронным письмом. 4- ежедневный вывод отчета о проведенных операциях и событиях.  
int Actuality  - степень важности сообщений, от 1 до 5.
string MessageHead - Заголовок сообщения для электронных писем.
string MessageBody - строка сообщения.  
***********************************************************************************************/
double Info(string MessageType="1,0,0", int Actuality = 1, string MessageHead="", string MessageBody="HI"){//1
int WarnMessLevel=3;
bool AllowMailSending=false, AllowStatement=false;
string _CurTimeDaily;
 string CurRusTimeMin;
 _CurTimeDaily = GetCurRusTime("Days"); 
 if(Actuality<=WarnMessLevel){//2
 int i, fwr;
 int OpString=-1;
 string FileName =StringConcatenate("LOG",ExpertName,_CurTimeDaily); 
 if(MessageHead=="")MessageHead=StringConcatenate("from expert ",ExpertName,TimeToStr(CurTime()));
 OpString = StringFind(MessageType,"1",0);
 if(OpString>-1){if(AllowInfo){Print(MessageBody);}}
 OpString = StringFind(MessageType,"2",0);
  if(OpString>-1){//3
   if(AllowLogFile){//4
    CurRusTimeMin = GetCurRusTime("Seconds")+" ";
    MessageBody= StringConcatenate(CurRusTimeMin,MessageBody); 
    for(i=0; i<5; i++){//5
    int HFile=FileOpen(FileName,FILE_READ|FILE_WRITE," "); 
     if(HFile>0){//6    
     FileSeek(HFile,0,SEEK_END); 
     FileWrite(HFile,MessageBody); 
     FileFlush(HFile); 
     FileClose(HFile);
     break; 
     }else{Sleep(500); continue; }//6
    }//5
   }//4
  }//3
  OpString = StringFind(MessageType,"3",0);
  if(OpString>-1){//3
   if(AllowMailSending && (!IsTesting())){//4
   int RetVal;
   SendMail( MessageHead, MessageBody );
   RetVal = GetLastError();
   if(RetVal>0){Info("1.2",1,"","Some mistakes were happened while mail sending "+ErrorDescription(RetVal));}
   }//4
  }//3
  OpString = StringFind(MessageType,"4",0);
  if(OpString>-1){//3
   if(AllowStatement){//4
   i=i;
   }//4
  }//3
 }else{return(0);}//2
return(0);
}//1

string GetCurRusTime(string Detail) 
{//1 
   string StrMonth="",StrDay="",StrHour="",StrMinute="",StrSeconds=""; 
   RefreshRates(); 
 
 if (Detail == "Seconds"){  
   if(Month()<10) { StrMonth="0"+Month(); } else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" "+StrHour+":"+StrMinute+":"+StrSeconds+" ");  
   }
 if (Detail == "Hours"){  
   if(Month()<10) { StrMonth="0"+Month(); } else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" "+StrHour+":00:"+"00 ");  
   }
 if (Detail == "Days"){  
   if(Month()<10) { StrMonth="0"+Month(); }else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" ");  
   }
}//1 





//---- codes returned from trade server
string ErrorDescription(int error_code)
  {
   string error_string;
//----
   switch(error_code)
     {
      case 0:
      case 1:   error_string="no error";                                                  break;
      case 2:   error_string="common error";                                              break;
      case 3:   error_string="invalid trade parameters";                                  break;
      case 4:   error_string="trade server is busy";                                      break;
      case 5:   error_string="old version of the client terminal";                        break;
      case 6:   error_string="no connection with trade server";                           break;
      case 7:   error_string="not enough rights";                                         break;
      case 8:   error_string="too frequent requests";                                     break;
      case 9:   error_string="malfunctional trade operation";                             break;
      case 64:  error_string="account disabled";                                          break;
      case 65:  error_string="invalid account";                                           break;
      case 128: error_string="trade timeout";                                             break;
      case 129: error_string="invalid price";                                             break;
      case 130: error_string="invalid stops";                                             break;
      case 131: error_string="invalid trade volume";                                      break;
      case 132: error_string="market is closed";                                          break;
      case 133: error_string="trade is disabled";                                         break;
      case 134: error_string="not enough money";                                          break;
      case 135: error_string="price changed";                                             break;
      case 136: error_string="off quotes";                                                break;
      case 137: error_string="broker is busy";                                            break;
      case 138: error_string="requote";                                                   break;
      case 139: error_string="order is locked";                                           break;
      case 140: error_string="long positions only allowed";                               break;
      case 141: error_string="too many requests";                                         break;
      case 145: error_string="modification denied because order too close to market";     break;
      case 146: error_string="trade context is busy";                                     break;
      //---- mql4 errors
      case 4000: error_string="no error";                                                 break;
      case 4001: error_string="wrong function pointer";                                   break;
      case 4002: error_string="array index is out of range";                              break;
      case 4003: error_string="no memory for function call stack";                        break;
      case 4004: error_string="recursive stack overflow";                                 break;
      case 4005: error_string="not enough stack for parameter";                           break;
      case 4006: error_string="no memory for parameter string";                           break;
      case 4007: error_string="no memory for temp string";                                break;
      case 4008: error_string="not initialized string";                                   break;
      case 4009: error_string="not initialized string in array";                          break;
      case 4010: error_string="no memory for array\' string";                             break;
      case 4011: error_string="too long string";                                          break;
      case 4012: error_string="remainder from zero divide";                               break;
      case 4013: error_string="zero divide";                                              break;
      case 4014: error_string="unknown command";                                          break;
      case 4015: error_string="wrong jump (never generated error)";                       break;
      case 4016: error_string="not initialized array";                                    break;
      case 4017: error_string="dll calls are not allowed";                                break;
      case 4018: error_string="cannot load library";                                      break;
      case 4019: error_string="cannot call function";                                     break;
      case 4020: error_string="expert function calls are not allowed";                    break;
      case 4021: error_string="not enough memory for temp string returned from function"; break;
      case 4022: error_string="system is busy (never generated error)";                   break;
      case 4050: error_string="invalid function parameters count";                        break;
      case 4051: error_string="invalid function parameter value";                         break;
      case 4052: error_string="string function internal error";                           break;
      case 4053: error_string="some array error";                                         break;
      case 4054: error_string="incorrect series array using";                             break;
      case 4055: error_string="custom indicator error";                                   break;
      case 4056: error_string="arrays are incompatible";                                  break;
      case 4057: error_string="global variables processing error";                        break;
      case 4058: error_string="global variable not found";                                break;
      case 4059: error_string="function is not allowed in testing mode";                  break;
      case 4060: error_string="function is not confirmed";                                break;
      case 4061: error_string="send mail error";                                          break;
      case 4062: error_string="string parameter expected";                                break;
      case 4063: error_string="integer parameter expected";                               break;
      case 4064: error_string="double parameter expected";                                break;
      case 4065: error_string="array as parameter expected";                              break;
      case 4066: error_string="requested history data in update state";                   break;
      case 4099: error_string="end of file";                                              break;
      case 4100: error_string="some file error";                                          break;
      case 4101: error_string="wrong file name";                                          break;
      case 4102: error_string="too many opened files";                                    break;
      case 4103: error_string="cannot open file";                                         break;
      case 4104: error_string="incompatible access to a file";                            break;
      case 4105: error_string="no order selected";                                        break;
      case 4106: error_string="unknown Symbol";                                           break;
      case 4107: error_string="invalid price parameter for trade function";               break;
      case 4108: error_string="invalid ticket";                                           break;
      case 4109: error_string="trade is not allowed";                                     break;
      case 4110: error_string="longs are not allowed";                                    break;
      case 4111: error_string="shorts are not allowed";                                   break;
      case 4200: error_string="object is already exist";                                  break;
      case 4201: error_string="unknown object property";                                  break;
      case 4202: error_string="object is not exist";                                      break;
      case 4203: error_string="unknown object type";                                      break;
      case 4204: error_string="no object name";                                           break;
      case 4205: error_string="object coordinates error";                                 break;
      case 4206: error_string="no specified subwindow";                                   break;
      default:   error_string="unknown error";
     }
//----
   return(error_string);
  }


 
Выгружать стал, но вместо реальных HLOC везде и по всем таймфреймам единицы
Date "Time" "Open" "High" "Low" "Close" "Volume"
1978.10.02,00:00,1,1,1,1,1
1978.10.03,00:00,1,1,1,1,1


Очевидно, что вы просто пропустили один вызов функции _Symbol() при определении точности представления данных:
iDigits=MarketInfo(_Symbol(),MODE_DIGITS);
Поэтому у вас вместо 4х цифр после запятой получилось 0 и отсюда пошли единицы во всех данных по EURUSD.
Причина неработоспособности функции MarketInfo на автономных графиках заключается в том, что с этих графиков невозможно проводить торговые операции вручную стандартными средствами МТ4 без использования соответствующих скриптов и советников, так как пользователь может нарисовать на них скриптами всё что угодно, что может далеко отличаться от текущего положения рынка и поэтому разработчики убрали возможность торговли вручную прямо с автономных графиков. Поэтому у вас эта функция возвращает 0 на автономном символе. Хотя с другой стороны просто константа Digits содержится в заголовке автономного графика и поэтому можно было бы вместо написанного выше выражения c тем же успехом применить следующее выражение
iDigits=Digits;
Просто эта константа Digits вписывается при формировании автономного файла и поэтому возможно её корректное использование.
 
получилось ё-моё!
но только по одной паре
 
исправил. теперь все грузит.Сделал так: создал торговый профиль в котором все графики валют по которым мне нужны данные + еще один ( так как на нужных мне парах должен быть советник выгружающий данные по 4 часам и неделям) на который повесил советник
//+------------------------------------------------------------------+
//|                                             	WithoutSunday.mq4 |
//|                                      Copyright © 2006, komposter |
//|                                      mailto:komposterius@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, komposter"
#property link      "mailto:komposterius@mail.ru"

#include <WinUser32.mqh>

//---- Список графиков которые необходимо обрабатывать, разделённый запятой (",")
extern string	ChartList	= "USDJPY1440,USDCHF1440,GBPUSD1440,EURUSD1440,EURGBP1440,EURJPY1440,USDCAD1440,AUDUSD1440,NZDUSD1440,EURCHF1440";
extern bool		SundayToMonday	= true;
//---- Частота, с которой будут обновляться графики в милисекундах
//---- Чем больше значение, тем меньше ресурсов будет использовать скрипт.
extern int		RefreshLuft	= 1000;

#define DELETE_DAY 0

int init() { start(); return(0); }
int start()
{
	int		_GetLastError = 0, cnt_copy = 0, cnt_add = 0, cnt_delete = 0, temp[13];
	int		Charts = 0, pos = 0, curchar = 0, len = StringLen( ChartList );
	string	cur_symbol = "", cur_period = "", file_name = "";

	string	_Symbol[100]; int _Period[100], _PeriodSec[], _Bars[];
	int		HistoryHandle[], hwnd[], last_fpos[], pre_time[], now_time[];
	double	now_close[], now_open[], now_low[], now_high[], now_volume[];
	double	pre_close[], pre_open[], pre_low[], pre_high[], pre_volume[];
	double	del_open[], del_low[], del_high[], del_volume[];

	//---- считаем количество графиков, которые необходимо обработать
	while ( pos <= len )
	{
		curchar = StringGetChar( ChartList, pos );
		if ( curchar > 47 && curchar < 58 )
		{ cur_period = cur_period + CharToStr( curchar ); }
		else
		{
			if ( curchar == ',' || pos == len )
			{ 
				MarketInfo( cur_symbol, MODE_BID );
				if ( GetLastError() == 4106 )
				{
					Alert( "Неизвестный символ ", cur_symbol, "!!!" );
					return(-1);				
				}
				if ( iClose( cur_symbol, StrToInteger( cur_period ), 0 ) <= 0 )
				{
					Alert( "Неизвестный период ", cur_period, "!!!" );
					return(-1);				
				}

				_Symbol[Charts] = cur_symbol; _Period[Charts] = StrToInteger( cur_period );
				cur_symbol = ""; cur_period = "";

				Charts ++;
			}
			else
			{ cur_symbol = cur_symbol + CharToStr( curchar ); }
		}
		pos++;
	}
	Print( "< - - - Найдено ", Charts, " корректных графиков. - - - >" );

	ArrayResize( _Symbol,			Charts ); ArrayResize( _Period,		Charts );
	ArrayResize( HistoryHandle,	Charts ); ArrayResize( hwnd,			Charts );
	ArrayResize( last_fpos,			Charts ); ArrayResize( pre_time,		Charts );
	ArrayResize( now_time,			Charts ); ArrayResize( now_close,	Charts );
	ArrayResize( now_open,			Charts ); ArrayResize( now_low,		Charts );
	ArrayResize( now_high,			Charts ); ArrayResize( now_volume,	Charts );
	ArrayResize( pre_close,			Charts ); ArrayResize( pre_open,		Charts );
	ArrayResize( pre_low,			Charts ); ArrayResize( pre_high,		Charts );
	ArrayResize( pre_volume,		Charts ); ArrayResize( _PeriodSec,	Charts );
	ArrayResize( del_open,			Charts ); ArrayResize( del_low,		Charts );
	ArrayResize( del_high,			Charts ); ArrayResize( del_volume,	Charts );
	ArrayResize( _Bars,				Charts );

	for ( int curChart = 0; curChart < Charts; curChart ++ )
	{
		cnt_copy = 0; cnt_delete = 0;

		_PeriodSec[curChart] = _Period[curChart] * 60;

		//---- открываем файл, в который будем записывать историю
		file_name = StringConcatenate( "WS_", _Symbol[curChart], _Period[curChart], ".hst" );
		HistoryHandle[curChart] = FileOpenHistory( file_name, FILE_BIN | FILE_WRITE );
		if ( HistoryHandle[curChart] < 0 )
		{
			_GetLastError = GetLastError();
			Alert( "FileOpenHistory( \"", file_name, "\", FILE_BIN | FILE_WRITE )",
																					" - Error #", _GetLastError );
			continue;
		}

		ArrayInitialize( temp, 0 );
		//---- Записываем заголовок файла
		FileWriteInteger	( HistoryHandle[curChart], 400, LONG_VALUE );
		FileWriteString	( HistoryHandle[curChart], "Copyright © 2006, komposter", 64 );
		FileWriteString	( HistoryHandle[curChart], StringConcatenate( "WS_", _Symbol[curChart] ), 12 );
		FileWriteInteger	( HistoryHandle[curChart], _Period[curChart], LONG_VALUE );
		FileWriteInteger	( HistoryHandle[curChart], MarketInfo( _Symbol[curChart], MODE_DIGITS ), LONG_VALUE );
		FileWriteInteger	( HistoryHandle[curChart], 0, LONG_VALUE );       //timesign
		FileWriteInteger	( HistoryHandle[curChart], 0, LONG_VALUE );       //last_sync
		FileWriteArray		( HistoryHandle[curChart], temp, 0, 13 );

		//+------------------------------------------------------------------+
		//| Обрабатываем историю
		//+------------------------------------------------------------------+
		_Bars[curChart] = iBars( _Symbol[curChart], _Period[curChart] );
		pre_time[curChart] = iTime( _Symbol[curChart], _Period[curChart], _Bars[curChart] - 1 );
		for( int i = _Bars[curChart] - 1; i >= 1; i-- )
		{
			//---- Запоминаем параметры бара
			now_open		[curChart] = iOpen	( _Symbol[curChart], _Period[curChart], i );
			now_high		[curChart] = iHigh	( _Symbol[curChart], _Period[curChart], i );
			now_low		[curChart] = iLow		( _Symbol[curChart], _Period[curChart], i );
			now_close	[curChart] = iClose	( _Symbol[curChart], _Period[curChart], i );
			now_volume	[curChart] = iVolume	( _Symbol[curChart], _Period[curChart], i );
			now_time		[curChart] = iTime	( _Symbol[curChart], _Period[curChart], i ) / _PeriodSec[curChart];
			now_time		[curChart] *=_PeriodSec[curChart];
			cnt_copy ++;

			if ( TimeDayOfWeek(now_time[curChart]) == DELETE_DAY )
			{
				del_open		[curChart] = now_open	[curChart];
				del_high		[curChart] = now_high	[curChart];
				del_low		[curChart] = now_low		[curChart];
				del_volume	[curChart] = now_volume	[curChart];
				cnt_delete ++;
				continue;
			}
			if ( SundayToMonday )
			{
				if ( del_open[curChart] > 0 && del_volume[curChart] > 0 && del_low [curChart] > 0 && del_high[curChart] > 0 )
				{
					now_open		[curChart] = del_open[curChart];
					now_high		[curChart] = MathMax( del_high[curChart], now_high[curChart] );
					now_low		[curChart] = MathMin( del_low [curChart], now_low [curChart] );
					now_volume	[curChart] += del_volume[curChart];
					del_open[curChart] = 0.0;
					del_high[curChart] = 0.0;
					del_low [curChart] = 0.0;
					del_volume[curChart] = 0.0;
				}
			}

			//---- записываем новый бар в файл
			FileWriteInteger	( HistoryHandle[curChart], now_time[curChart],		LONG_VALUE	);
			FileWriteDouble	( HistoryHandle[curChart], now_open[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_low[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_high[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_close[curChart],		DOUBLE_VALUE);
			FileWriteDouble	( HistoryHandle[curChart], now_volume[curChart],	DOUBLE_VALUE);
			FileFlush			( HistoryHandle[curChart] );

			//---- запоминаем значение времени и цену закрытия записанного бара
			pre_close[curChart]	= now_close[curChart];
			pre_time[curChart]	= now_time[curChart] / _PeriodSec[curChart];
			pre_time[curChart]	*=_PeriodSec[curChart];
 		}

		last_fpos[curChart] = FileTell( HistoryHandle[curChart] );

		//---- выводим статистику
		Print( "< - - - ", _Symbol[curChart], _Period[curChart], ": было ", cnt_copy, " баров, удалено ", cnt_delete, " баров - - - >" );
		Print( "< - - - Для просмотра результатов, откройте график \"WS_", 
												_Symbol[curChart], _Period[curChart], "\" - - - >" );

	}

	//+------------------------------------------------------------------+
	//| Обрабатываем поступающие тики
	//+------------------------------------------------------------------+
	while ( !IsStopped() )
	{
		RefreshRates();
		for ( curChart = 0; curChart < Charts; curChart ++ )
		{
			//---- ставим "курсор" перед последним баром
			//---- (это необходимо на всех запусках, кроме первого)
			FileSeek( HistoryHandle[curChart], last_fpos[curChart], SEEK_SET );

			//---- Запоминаем параметры бара
			now_open		[curChart] = iOpen	( _Symbol[curChart], _Period[curChart], 0 );
			now_high		[curChart] = iHigh	( _Symbol[curChart], _Period[curChart], 0 );
			now_low		[curChart] = iLow		( _Symbol[curChart], _Period[curChart], 0 );
			now_close	[curChart] = iClose	( _Symbol[curChart], _Period[curChart], 0 );
			now_volume	[curChart] = iVolume	( _Symbol[curChart], _Period[curChart], 0 );
			now_time		[curChart] = iTime	( _Symbol[curChart], _Period[curChart], 0 ) 
																						/ _PeriodSec[curChart];
			now_time		[curChart] *=_PeriodSec[curChart];

			if ( TimeDayOfWeek(now_time[curChart]) == DELETE_DAY )
			{
				del_open		[curChart] = now_open	[curChart];
				del_high		[curChart] = now_high	[curChart];
				del_low		[curChart] = now_low		[curChart];
				del_volume	[curChart] = now_volume	[curChart];
				continue;
			}
			if ( SundayToMonday )
			{
				if ( TimeDayOfWeek(now_time[curChart]) == DELETE_DAY + 1 )
				{
					now_open		[curChart] = del_open[curChart];
					now_high		[curChart] = MathMax( del_high[curChart], now_high[curChart] );
					now_low		[curChart] = MathMin( del_low [curChart], now_low [curChart] );
					now_volume	[curChart] += del_volume[curChart];
				}
			}

			//---- если бар сформировался, 
			if ( now_time[curChart] >= pre_time[curChart] + _PeriodSec[curChart] )
			{
				//---- записываем сформировавшийся бар
				FileWriteInteger	( HistoryHandle[curChart], pre_time[curChart],	 LONG_VALUE	 );
				FileWriteDouble	( HistoryHandle[curChart], pre_open[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_low[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_high[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_close[curChart],	 DOUBLE_VALUE );
				FileWriteDouble	( HistoryHandle[curChart], pre_volume[curChart], DOUBLE_VALUE );
				FileFlush			( HistoryHandle[curChart] );

				//---- запоминаем место в файле, перед записью 0-го бара
				last_fpos[curChart] = FileTell( HistoryHandle[curChart] );
			}

			//---- записываем текущий бар
			FileWriteInteger	( HistoryHandle[curChart], now_time[curChart],		LONG_VALUE	 );
			FileWriteDouble	( HistoryHandle[curChart], now_open[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_low[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_high[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_close[curChart],		DOUBLE_VALUE );
			FileWriteDouble	( HistoryHandle[curChart], now_volume[curChart],	DOUBLE_VALUE );
			FileFlush			( HistoryHandle[curChart] );

			//---- запоминаем параметры записанного бара
			pre_open[curChart]		= now_open[curChart];
			pre_high[curChart]		= now_high[curChart];
			pre_low[curChart]			= now_low[curChart];
			pre_close[curChart]		= now_close[curChart];
			pre_volume[curChart]		= now_volume[curChart];
			pre_time[curChart]		= now_time[curChart] / _PeriodSec[curChart];
			pre_time[curChart]		*=_PeriodSec[curChart];

			//---- находим окно, в которое будем "отправлять" свежие котировки
			if ( hwnd[curChart] == 0 )
			{
				hwnd[curChart] = WindowHandle( StringConcatenate( "WS_", _Symbol[curChart] ), 
																								_Period[curChart] );
				if ( hwnd[curChart] != 0 ) { Print( "< - - - График ", "WS_" + _Symbol[curChart], 
																	_Period[curChart], " найден! - - - >" ); }
			}
			//---- и, если нашли, обновляем его
			if ( hwnd[curChart] != 0 ) { PostMessageA( hwnd[curChart], WM_COMMAND, 33324, 0 ); }
		}
		Sleep(RefreshLuft);
	}

	for ( curChart = 0; curChart < Charts; curChart ++ )
	{
		if ( HistoryHandle[curChart] >= 0 )
		{
			//---- закрываем файл
			FileClose( HistoryHandle[curChart] );
			HistoryHandle[curChart] = -1;
		}
	}
	return(0);
}



Потом создал профиль offline на котором на те же самые автономные графики навесил эксперта

//+------------------------------------------------------------------+
//|                           Currency_Loader.mq4                    |
//|                      Copyright © 2006, Larionov P.V.             |
//|                                        lolion@mail.ru            |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Larionov P.V."
#property link      "lolion@mail.ru"
//---- input parameters
extern int  BarsMin=100;         // Minimal number bars in history which might be loaded into files.
extern int MaxBarsInFile = 20000; // Max Bars for loading into file.
extern int FrequencyUpdate = 60; // this value identify frequency update for files in sec.
extern bool LoadM1  = True;       //Timeframes of securities which data will be loaded onto File if True       
extern bool LoadM5  = True;
extern bool LoadM15 = True;
extern bool LoadM30 = True;
extern bool LoadH1  = True;
extern bool LoadH4  = True;
extern bool LoadD1  = True;
extern bool LoadW1  = True;
extern bool LoadMN  = True;
extern bool AllowInfo = True;
extern bool AllowLogFile = True;

string ExpertName = "Currency_Loader";
int deinit(){return(0);}
double ArrayM1[][6], ArrayM5[][6], ArrayM15[][6], ArrayM30[][6], ArrayH1[][6],ArrayH4[][6], ArrayD1[][6], ArrayW1[][6], ArrayMN[][6]; 
int ct, iDigits, Tryes=5, Pause=500, ArrSizeM1, ArrSizeM5, ArrSizeM15, ArrSizeM30, ArrSizeH1, ArrSizeH4, ArrSizeD1, ArrSizeW1, ArrSizeMN, i, i2, i3, h1, h2, h3, h4, h5, h6, h7, h8, h9, LCM1, LCM5, LCM15, LCM30, LCH1, LCH4, LCD1, LCW1, LCMN, LastError;
string CString, x, x2, FileNameM1, FileNameM5, FileNameM15, FileNameM30, FileNameH1, FileNameH4, FileNameD1, FileNameW1, FileNameMN, FilePatch, FirstLine;


string _Symbol()
{
 string new_symbol;
 new_symbol=StringSubstr(Symbol(),3,StringLen(Symbol())-1);
 return(new_symbol);
}

int init(){//1
x="\"";
x2="\\";
iDigits=MarketInfo(_Symbol(),MODE_DIGITS);
FilePatch = "Export_History"+x2+_Symbol()+x2; 
FileNameM1 = FilePatch+_Symbol()+"_"+"M1"+".csv"; 
FileNameM5 = FilePatch+_Symbol()+"_"+"M5"+".csv"; 
FileNameM15 = FilePatch+_Symbol()+"_"+"M15"+".csv"; 
FileNameM30 = FilePatch+_Symbol()+"_"+"M30"+".csv"; 
FileNameH1 = FilePatch+_Symbol()+"_"+"H1"+".csv"; 
FileNameH4 = FilePatch+_Symbol()+"_"+"H4"+".csv"; 
FileNameD1 = FilePatch+Symbol()+"_"+"D1"+".csv"; 
FileNameW1 = FilePatch+_Symbol()+"_"+"W1"+".csv"; 
FileNameMN = FilePatch+_Symbol()+"_"+"MN"+".csv"; 
FirstLine =  ""+x+"Date"+x+" "+x+"Time"+x+" "+x+"Open"+x+" "+x+"High"+x+" "+x+"Low"+x+" "+x+"Close"+x+" "+x+"Volume"+x;
ct=CurTime()+61;
start();
return(0);}



bool ROpen=false;

int start()
{
   while (!IsStopped())//Запуск бесконечного цикла
   {//start(){//1
if(ct == 0||ct < StrToTime(TimeToStr(CurTime(),TIME_MINUTES))){ct=StrToTime(TimeToStr(CurTime()+FrequencyUpdate,TIME_MINUTES)); ROpen=true;}
if(ROpen){//2
////////////////////////////////////////////////////////////////////////////// 
if(LoadM1){LoadingM1();}
if(LoadM5){LoadingM5();}
if(LoadM15){LoadingM15();}
if(LoadM30){LoadingM30();}
if(LoadH1){LoadingH1();}
if(LoadH4){LoadingH4();}
if(LoadD1){LoadingD1();}
if(LoadW1){LoadingW1();}
if(LoadMN){LoadingMN();}
ROpen=false;
////////////////////////////////////////////////////////////////////////////////
}//2  
 Sleep(60000); // 60секунд паузы - выберите по своему вкусу требуемую частоту обновления
  }
}
return(0);
//1

//******************************************************************************************
// loading history data from M1
void LoadingM1(){//1
int MaxBars=MaxBarsInFile;
if(LoadM1 && iBars(_Symbol(),PERIOD_M1)>BarsMin){ArrayCopyRates(ArrayM1,_Symbol(),PERIOD_M1); ArrSizeM1=ArrayRange(ArrayM1,0);}
 if(ArrSizeM1>1){//2
 if(MaxBars>ArrSizeM1){MaxBars=ArrSizeM1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h1 = FileOpen(FileNameM1,FILE_CSV|FILE_WRITE);
  if(h1==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM1+" successfully opened ");} 
  FileWrite(h1,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM1[i][5],0); //  Volume
   FileWrite(h1,CString);
   CString="";
   }//4
   FileClose(h1);
   LCM1 = iTime(_Symbol(),PERIOD_M1,0);
   return;
  }//3
 }//2
}//1

void LoadingM5(){//1
int MaxBars=MaxBarsInFile;
if(LoadM5 && iBars(_Symbol(),PERIOD_M5)>BarsMin){ArrayCopyRates(ArrayM5,_Symbol(),PERIOD_M5); ArrSizeM5=ArrayRange(ArrayM5,0);}
 if(ArrSizeM5>1){//2
 if(MaxBars>ArrSizeM5){MaxBars=ArrSizeM5;}
  for(i2=1; i2<=Tryes; i2++){//3
  h2 = FileOpen(FileNameM5,FILE_CSV|FILE_WRITE);
  if(h2==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM5+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM5+" successfully opened ");} 
  FileWrite(h2,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM5[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM5[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM5[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM5[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM5[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM5[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM5[i][5],0); //  Volume
   FileWrite(h2,CString);
   CString="";
   }//4
   FileClose(h2);
   LCM5 = iTime(_Symbol(),PERIOD_M5,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from M15
void LoadingM15(){//1
int MaxBars=MaxBarsInFile;
if(LoadM15 && iBars(_Symbol(),PERIOD_M15)>BarsMin){ArrayCopyRates(ArrayM15,_Symbol(),PERIOD_M15); ArrSizeM15=ArrayRange(ArrayM15,0);}
if(ArrSizeM15>1){//2
 if(MaxBars>ArrSizeM15){MaxBars=ArrSizeM15;}
  for(i2=1; i2<=Tryes; i2++){//3
  h3 = FileOpen(FileNameM15,FILE_CSV|FILE_WRITE);
  if(h3==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM15+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM15+" successfully opened ");} 
  FileWrite(h3,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM15[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM15[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM15[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM15[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM15[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM15[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM15[i][5],0); //  Volume
   FileWrite(h3,CString);
   CString="";
   }//4
   FileClose(h3);
   LCM15 = iTime(_Symbol(),PERIOD_M15,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from M30
void LoadingM30(){//1
int MaxBars=MaxBarsInFile;
if(LoadM30 && iBars(_Symbol(),PERIOD_M30)>BarsMin){ArrayCopyRates(ArrayM30,_Symbol(),PERIOD_M30); ArrSizeM30=ArrayRange(ArrayM30,0);}
if(ArrSizeM30>1){//2
 if(MaxBars>ArrSizeM30){MaxBars=ArrSizeM30;}
  for(i2=1; i2<=Tryes; i2++){//3
  h4 = FileOpen(FileNameM30,FILE_CSV|FILE_WRITE);
  if(h4==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameM30+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameM30+" successfully opened ");} 
  FileWrite(h4,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayM30[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayM30[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayM30[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayM30[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayM30[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayM30[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayM30[i][5],0); //  Volume
   FileWrite(h4,CString);
   CString="";
   }//4
   FileClose(h4);
   LCM30 = iTime(_Symbol(),PERIOD_M30,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from H1
void LoadingH1(){//1
int MaxBars=MaxBarsInFile;
if(LoadH1 && iBars(_Symbol(),PERIOD_H1)>BarsMin){ArrayCopyRates(ArrayH1,_Symbol(),PERIOD_H1); ArrSizeH1=ArrayRange(ArrayH1,0);}
if(ArrSizeH1>1){//2
 if(MaxBars>ArrSizeH1){MaxBars=ArrSizeH1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h5 = FileOpen(FileNameH1,FILE_CSV|FILE_WRITE);
  if(h5==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameH1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameH1+" successfully opened ");} 
  FileWrite(h5,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4
   CString=CString+TimeToStr(ArrayH1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayH1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayH1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayH1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayH1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayH1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayH1[i][5],0); //  Volume
   FileWrite(h5,CString);
   CString="";
   }//4
   FileClose(h5);
   LCH1 = iTime(_Symbol(),PERIOD_H1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from H4
void LoadingH4(){//1
int MaxBars=MaxBarsInFile;
if(LoadH4 && iBars(_Symbol(),PERIOD_H4)>BarsMin){ArrayCopyRates(ArrayH4,_Symbol(),PERIOD_H4); ArrSizeH4=ArrayRange(ArrayH4,0);}
if(ArrSizeH4>1){//2
 if(MaxBars>ArrSizeH4){MaxBars=ArrSizeH4;}
  for(i2=1; i2<=Tryes; i2++){//3
  h6 = FileOpen(FileNameH4,FILE_CSV|FILE_WRITE);
  if(h6==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameH4+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameH4+" successfully opened ");} 
  FileWrite(h6,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayH4[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayH4[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayH4[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayH4[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayH4[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayH4[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayH4[i][5],0); //  Volume
   FileWrite(h6,CString);
   CString="";
   }//4
   FileClose(h6);
   LCH4 = iTime(_Symbol(),PERIOD_H4,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from D1
void LoadingD1(){//1
int MaxBars=MaxBarsInFile;
if(LoadD1 && iBars(Symbol(),PERIOD_D1)>BarsMin){ArrayCopyRates(ArrayD1,Symbol(),PERIOD_D1); ArrSizeD1=ArrayRange(ArrayD1,0);}
if(ArrSizeD1>1){//2
 if(MaxBars>ArrSizeD1){MaxBars=ArrSizeD1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h7 = FileOpen(FileNameD1,FILE_CSV|FILE_WRITE);
  if(h7==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameD1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameD1+" successfully opened ");} 
  FileWrite(h7,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayD1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayD1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayD1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayD1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayD1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayD1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayD1[i][5],0); //  Volume
   FileWrite(h7,CString);
   CString="";
   }//4
   FileClose(h7);
   LCD1 = iTime(Symbol(),PERIOD_D1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from W1
void LoadingW1(){//1
int MaxBars=MaxBarsInFile;
if(LoadW1 && iBars(_Symbol(),PERIOD_W1)>BarsMin){ArrayCopyRates(ArrayW1,_Symbol(),PERIOD_W1); ArrSizeW1=ArrayRange(ArrayW1,0);}
if(ArrSizeW1>1){//2
 if(MaxBars>ArrSizeW1){MaxBars=ArrSizeW1;}
  for(i2=1; i2<=Tryes; i2++){//3
  h8 = FileOpen(FileNameW1,FILE_CSV|FILE_WRITE);
  if(h8==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameW1+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameW1+" successfully opened ");} 
  FileWrite(h8,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayW1[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayW1[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayW1[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayW1[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayW1[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayW1[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayW1[i][5],0); //  Volume
   FileWrite(h8,CString);
   CString="";
   }//4
   FileClose(h8);
   LCW1 = iTime(_Symbol(),PERIOD_W1,0);
   return;
  }//3
 }//2
}//1

//******************************************************************************************
//loading history data from MN1
void LoadingMN(){//1
int MaxBars=MaxBarsInFile;
if(LoadMN && iBars(_Symbol(),PERIOD_MN1)>BarsMin){ArrayCopyRates(ArrayMN,_Symbol(),PERIOD_MN1); ArrSizeMN=ArrayRange(ArrayMN,0);}
if(ArrSizeMN>1){//2
 if(MaxBars>ArrSizeMN){MaxBars=ArrSizeMN;}
  for(i2=1; i2<=Tryes; i2++){//3
  h9 = FileOpen(FileNameMN,FILE_CSV|FILE_WRITE);
  if(h9==-1){LastError=GetLastError();Info("1.2",1,""," There is an error while opening file: "+FileNameMN+" at "+i2+" Try  "+ErrorDescription(LastError));Pause=Pause+Pause; Sleep(Pause); continue; }else{Info("1.2",2,"","File "+FileNameMN+" successfully opened ");} 
  FileWrite(h9,FirstLine);
   for (i=MaxBars-1; i>=0; i-- ){//4 
   CString=CString+TimeToStr(ArrayMN[i][0],TIME_DATE)+",";    //  date of bar
   CString=CString+TimeToStr(ArrayMN[i][0],TIME_MINUTES)+","; //  time of bar
   CString=CString+DoubleToStr(ArrayMN[i][1],iDigits)+","; //  Open price
   CString=CString+DoubleToStr(ArrayMN[i][3],iDigits)+","; //  High price
   CString=CString+DoubleToStr(ArrayMN[i][2],iDigits)+","; //  Low price
   CString=CString+DoubleToStr(ArrayMN[i][4],iDigits)+","; //  Close price
   CString=CString+DoubleToStr(ArrayMN[i][5],0); //  Volume
   FileWrite(h9,CString);
   CString="";
   }//4
   FileClose(h9);
   LCMN = iTime(_Symbol(),PERIOD_MN1,0);
   return;
  }//3
 }//2
}//1

/************************************************************************************************
void Info(string MessageType=1, int Actuality=1, string MessageHead="", string MessageBody="HI")
Описание: формирование информационного канала работы программы, 
ежендевная выгрузка оперативной информации в текстовый файл, 
отправка отчетности по почте, вывод информационных сообщений в окно сообщений.
Параметры:
string MessageType - 1-вывод простого сообщения, 2- запись в файл, 3- отправка электронным письмом. 4- ежедневный вывод отчета о проведенных операциях и событиях.  
int Actuality  - степень важности сообщений, от 1 до 5.
string MessageHead - Заголовок сообщения для электронных писем.
string MessageBody - строка сообщения.  
***********************************************************************************************/
double Info(string MessageType="1,0,0", int Actuality = 1, string MessageHead="", string MessageBody="HI"){//1
int WarnMessLevel=3;
bool AllowMailSending=false, AllowStatement=false;
string _CurTimeDaily;
 string CurRusTimeMin;
 _CurTimeDaily = GetCurRusTime("Days"); 
 if(Actuality<=WarnMessLevel){//2
 int i, fwr;
 int OpString=-1;
 string FileName =StringConcatenate("LOG",ExpertName,_CurTimeDaily); 
 if(MessageHead=="")MessageHead=StringConcatenate("from expert ",ExpertName,TimeToStr(CurTime()));
 OpString = StringFind(MessageType,"1",0);
 if(OpString>-1){if(AllowInfo){Print(MessageBody);}}
 OpString = StringFind(MessageType,"2",0);
  if(OpString>-1){//3
   if(AllowLogFile){//4
    CurRusTimeMin = GetCurRusTime("Seconds")+" ";
    MessageBody= StringConcatenate(CurRusTimeMin,MessageBody); 
    for(i=0; i<5; i++){//5
    int HFile=FileOpen(FileName,FILE_READ|FILE_WRITE," "); 
     if(HFile>0){//6    
     FileSeek(HFile,0,SEEK_END); 
     FileWrite(HFile,MessageBody); 
     FileFlush(HFile); 
     FileClose(HFile);
     break; 
     }else{Sleep(500); continue; }//6
    }//5
   }//4
  }//3
  OpString = StringFind(MessageType,"3",0);
  if(OpString>-1){//3
   if(AllowMailSending && (!IsTesting())){//4
   int RetVal;
   SendMail( MessageHead, MessageBody );
   RetVal = GetLastError();
   if(RetVal>0){Info("1.2",1,"","Some mistakes were happened while mail sending "+ErrorDescription(RetVal));}
   }//4
  }//3
  OpString = StringFind(MessageType,"4",0);
  if(OpString>-1){//3
   if(AllowStatement){//4
   i=i;
   }//4
  }//3
 }else{return(0);}//2
return(0);
}//1

string GetCurRusTime(string Detail) 
{//1 
   string StrMonth="",StrDay="",StrHour="",StrMinute="",StrSeconds=""; 
   RefreshRates(); 
 
 if (Detail == "Seconds"){  
   if(Month()<10) { StrMonth="0"+Month(); } else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" "+StrHour+":"+StrMinute+":"+StrSeconds+" ");  
   }
 if (Detail == "Hours"){  
   if(Month()<10) { StrMonth="0"+Month(); } else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" "+StrHour+":00:"+"00 ");  
   }
 if (Detail == "Days"){  
   if(Month()<10) { StrMonth="0"+Month(); }else { StrMonth=Month(); } 
   if(Day()<10) { StrDay="0"+Day(); } else { StrDay=Day(); } 
   if(Hour()<10) { StrHour="0"+Hour(); } else { StrHour=Hour(); } 
   if(Minute()<10) { StrMinute="0"+Minute(); } else { StrMinute=Minute(); } 
   if(Seconds()<10) { StrSeconds="0"+Seconds(); } else { StrSeconds=Seconds(); } 
   return(""+StrDay+"."+StrMonth+"."+Year()+" ");  
   }
}//1 





//---- codes returned from trade server
string ErrorDescription(int error_code)
  {
   string error_string;
//----
   switch(error_code)
     {
      case 0:
      case 1:   error_string="no error";                                                  break;
      case 2:   error_string="common error";                                              break;
      case 3:   error_string="invalid trade parameters";                                  break;
      case 4:   error_string="trade server is busy";                                      break;
      case 5:   error_string="old version of the client terminal";                        break;
      case 6:   error_string="no connection with trade server";                           break;
      case 7:   error_string="not enough rights";                                         break;
      case 8:   error_string="too frequent requests";                                     break;
      case 9:   error_string="malfunctional trade operation";                             break;
      case 64:  error_string="account disabled";                                          break;
      case 65:  error_string="invalid account";                                           break;
      case 128: error_string="trade timeout";                                             break;
      case 129: error_string="invalid price";                                             break;
      case 130: error_string="invalid stops";                                             break;
      case 131: error_string="invalid trade volume";                                      break;
      case 132: error_string="market is closed";                                          break;
      case 133: error_string="trade is disabled";                                         break;
      case 134: error_string="not enough money";                                          break;
      case 135: error_string="price changed";                                             break;
      case 136: error_string="off quotes";                                                break;
      case 137: error_string="broker is busy";                                            break;
      case 138: error_string="requote";                                                   break;
      case 139: error_string="order is locked";                                           break;
      case 140: error_string="long positions only allowed";                               break;
      case 141: error_string="too many requests";                                         break;
      case 145: error_string="modification denied because order too close to market";     break;
      case 146: error_string="trade context is busy";                                     break;
      //---- mql4 errors
      case 4000: error_string="no error";                                                 break;
      case 4001: error_string="wrong function pointer";                                   break;
      case 4002: error_string="array index is out of range";                              break;
      case 4003: error_string="no memory for function call stack";                        break;
      case 4004: error_string="recursive stack overflow";                                 break;
      case 4005: error_string="not enough stack for parameter";                           break;
      case 4006: error_string="no memory for parameter string";                           break;
      case 4007: error_string="no memory for temp string";                                break;
      case 4008: error_string="not initialized string";                                   break;
      case 4009: error_string="not initialized string in array";                          break;
      case 4010: error_string="no memory for array\' string";                             break;
      case 4011: error_string="too long string";                                          break;
      case 4012: error_string="remainder from zero divide";                               break;
      case 4013: error_string="zero divide";                                              break;
      case 4014: error_string="unknown command";                                          break;
      case 4015: error_string="wrong jump (never generated error)";                       break;
      case 4016: error_string="not initialized array";                                    break;
      case 4017: error_string="dll calls are not allowed";                                break;
      case 4018: error_string="cannot load library";                                      break;
      case 4019: error_string="cannot call function";                                     break;
      case 4020: error_string="expert function calls are not allowed";                    break;
      case 4021: error_string="not enough memory for temp string returned from function"; break;
      case 4022: error_string="system is busy (never generated error)";                   break;
      case 4050: error_string="invalid function parameters count";                        break;
      case 4051: error_string="invalid function parameter value";                         break;
      case 4052: error_string="string function internal error";                           break;
      case 4053: error_string="some array error";                                         break;
      case 4054: error_string="incorrect series array using";                             break;
      case 4055: error_string="custom indicator error";                                   break;
      case 4056: error_string="arrays are incompatible";                                  break;
      case 4057: error_string="global variables processing error";                        break;
      case 4058: error_string="global variable not found";                                break;
      case 4059: error_string="function is not allowed in testing mode";                  break;
      case 4060: error_string="function is not confirmed";                                break;
      case 4061: error_string="send mail error";                                          break;
      case 4062: error_string="string parameter expected";                                break;
      case 4063: error_string="integer parameter expected";                               break;
      case 4064: error_string="double parameter expected";                                break;
      case 4065: error_string="array as parameter expected";                              break;
      case 4066: error_string="requested history data in update state";                   break;
      case 4099: error_string="end of file";                                              break;
      case 4100: error_string="some file error";                                          break;
      case 4101: error_string="wrong file name";                                          break;
      case 4102: error_string="too many opened files";                                    break;
      case 4103: error_string="cannot open file";                                         break;
      case 4104: error_string="incompatible access to a file";                            break;
      case 4105: error_string="no order selected";                                        break;
      case 4106: error_string="unknown Symbol";                                           break;
      case 4107: error_string="invalid price parameter for trade function";               break;
      case 4108: error_string="invalid ticket";                                           break;
      case 4109: error_string="trade is not allowed";                                     break;
      case 4110: error_string="longs are not allowed";                                    break;
      case 4111: error_string="shorts are not allowed";                                   break;
      case 4200: error_string="object is already exist";                                  break;
      case 4201: error_string="unknown object property";                                  break;
      case 4202: error_string="object is not exist";                                      break;
      case 4203: error_string="unknown object type";                                      break;
      case 4204: error_string="no object name";                                           break;
      case 4205: error_string="object coordinates error";                                 break;
      case 4206: error_string="no specified subwindow";                                   break;
      default:   error_string="unknown error";
     }
//----
   return(error_string);
  }



Два профиля создал так как панель задач из 20 графиков это для меня слишком. Теперь для начала надо загрузить торговый профиль - произойдет обновление и одновременное удаление воскресений на автономных графиках. Затем открываю offline профиль при этом дневные графики без воскресений грузятся в файл с расширением .csv в папку созданную этим советником для соответствующих пар.

В идеале: хотелось бы советник упрощающий эту процедуру. Совместить оба советника и вешать его на графики онлайн. Кому не лень попробуйте пожалуйста!

Огромное спасибо авторам советников и solandr, без которых ничего бы не было, так как я профан.

 
Объясните более подробно что вы делали чтобы понять в чём теперь состоит проблема.
Причина обращения: