AllMinutes_v1





//+------------------------------------------------------------------+
//|                                             		    AllMinutes.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	= "EURUSD1,GBPUSD1";
// Ðàçðåøèòü/çàïðåòèòü ðèñîâàòü áàðû â âûõîäíûå
// Åñëè == true, âûõîäíûå îñòàíóòñÿ íåçàïîëíåíûìè
// Åñëè == false, âûõîäíûå áóäóò çàïîëíåíû áàðàìè O=H=L=C
extern bool		SkipWeekEnd	= true;
// ×àñòîòà, ñ êîòîðîé áóäóò îáíîâëÿòüñÿ ãðàôèêè â ìèëèñåêóíäàõ
//- ×åì áîëüøå çíà÷åíèå, òåì ìåíüøå ðåñóðñîâ áóäåò èñïîëüçîâàòü ñêðèïò.
extern int		RefreshLuft	= 1000;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init() 
  { 
   start(); 
   return(0); 
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
	  int		_GetLastError = 0, cnt_copy = 0, cnt_add = 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[];
//---- ñ÷èòàåì êîëè÷åñòâî ãðàôèêîâ, êîòîðûå íåîáõîäèìî îáðàáîòàòü
	  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(_Bars,	Charts);
	  for(int curChart = 0; curChart < Charts; curChart++)
	    {
		     _PeriodSec[curChart] = _Period[curChart]*60;
		     //---- îòêðûâàåì ôàéë, â êîòîðûé áóäåì çàïèñûâàòü èñòîðèþ
		     file_name = StringConcatenate("ALL", _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;
		       }
		     //---- Çàïèñûâàåì çàãîëîâîê ôàéëà
		     FileWriteInteger(HistoryHandle[curChart], 400, LONG_VALUE);
		     FileWriteString(HistoryHandle[curChart], "Copyright © 2006, komposter", 64);
		     FileWriteString(HistoryHandle[curChart], 
							                StringConcatenate("ALL", _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];
			        //---- åñëè åñòü ïðîïóùåííûå áàðû,
			        while(now_time[curChart] > pre_time[curChart] + _PeriodSec[curChart])
			          {
				           pre_time[curChart] += _PeriodSec[curChart];
				           pre_time[curChart] /= _PeriodSec[curChart];
				           pre_time[curChart] *= _PeriodSec[curChart];
				           //---- åñëè ýòî íå âûõîäíûå,
				           if(SkipWeekEnd)
				             {
					              if(TimeDayOfWeek(pre_time[curChart]) <= 0 || 
							               TimeDayOfWeek(pre_time[curChart]) > 5) 
							                continue; 
					              if(TimeDayOfWeek(pre_time[curChart]) == 5)
					                {
						                 if(TimeHour(pre_time[curChart]) == 23 || 
						                    TimeHour(pre_time[curChart] + 
						                    _PeriodSec[curChart]) == 23) 
						                     continue; 
					                }
				             }
				           //---- çàïèñûâàåì ïðîïóùåííûé áàð â ôàéë
				           FileWriteInteger(HistoryHandle[curChart], pre_time[curChart],	LONG_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], 1,	DOUBLE_VALUE);
				           FileFlush(HistoryHandle[curChart]);
				           cnt_add ++;
			          }
			        //---- çàïèñûâàåì íîâûé áàð â ôàéë
			        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]);
			        cnt_copy ++;
			        //---- çàïîìèíàåì çíà÷åíèå âðåìåíè è öåíó çàêðûòèÿ çàïèñàííîãî áàðà
			        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_add, " áàðîâ - - - >");
	      Print("< - - - Äëÿ ïðîñìîòðà ðåçóëüòàòîâ, îòêðîéòå ãðàôèê \"ALL", 
									    _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(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] );
			          }
			        //---- åñëè ïîÿâèëèñü ïðîïóùåííûå áàðû,
			        while(now_time[curChart] > pre_time[curChart] + _PeriodSec[curChart])
			          {
				           pre_time[curChart] += _PeriodSec[curChart];
				           pre_time[curChart] /= _PeriodSec[curChart];
				           pre_time[curChart] *= _PeriodSec[curChart];
				           //---- åñëè ýòî íå âûõîäíûå,
				           if(SkipWeekEnd)
				             {
					              if(TimeDayOfWeek(pre_time[curChart]) <= 0 || 
						                TimeDayOfWeek(pre_time[curChart]) > 5 ) 
						                 continue; 
					              if(TimeDayOfWeek(pre_time[curChart]) == 5)
					                {
						                 if(TimeHour(pre_time[curChart]) == 23 || 
							                   TimeHour(pre_time[curChart] + _PeriodSec[curChart]) == 23) 
							                    continue; 
					                }
				             }
				           //---- çàïèñûâàåì ïðîïóùåííûé áàð â ôàéë
				           FileWriteInteger(HistoryHandle[curChart], pre_time[curChart],	LONG_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], pre_close[curChart],	DOUBLE_VALUE);
				           FileWriteDouble(HistoryHandle[curChart], 1,	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( "ALL", _Symbol[curChart]), 
																								                     _Period[curChart]);
				           if(hwnd[curChart] != 0) 
				             { 
				               Print("< - - - Ãðàôèê ", "ALL" + _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);
  }
//+------------------------------------------------------------------+






Sample





Analysis



Market Information Used:


Series array that contains close prices for each bar
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains tick volumes of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

It issuies visual alerts to the screen
It writes information to file