TDM





//+------------------------------------------------------------------+
//|                                                          TDM.mq4 |
//|                                      Copyright © 2008, BazilSoft |
//|                                                   vs-box@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, BazilSoft"
#property link      "vs-box@mail.ru"
#property show_inputs
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
#define T 24
#define M 32

extern int BeginYear=2000;	//Ãîä, ñ êîòîðîãî íà÷èíàåòñÿ èññëåäîâàíèå
extern int EndYear=2008;	//Ãîä, ñ êîòîðîãî çàêàíè÷èâàåòñÿ èññëåäîâàíèå

//Ìàññèâ ïåðåìåííûõ ïðåäñòàâëåí èíäåêñåì â ìàññèâå. Ò.å. Åñòü åäèíàÿ ïåðåìåííàÿ â âèäå äâóõìåðíîãî ìàññèâà (òàáëèöû)
//23x10, ãäå â êà÷åñòâå ñòðîê(23) óêàçàíû òîðãîâûå äíè ìåñÿöà, à â êà÷åñòâå ñòîëáöîâ (10) óêàçàíû ñâîéñòâà ýòèõ äíåé.
//Ñâîéñòâà ïåðå÷èñëåíû íèæå:
int AllDaysOfMonth=0;				//Âñåãî äíåé ìÿñÿöà â ãîäó. íàïðèìåð â ãîäó 12 ïåðâûõ òîðãîâûõ äíåé ìåñÿöà
int PositivelyDays=1;
int NegativelyDays=2;
int PercentPositivelyDays=3;
int RangeOfPrice=4;
int AllPipsMod=5;
int AllPips=6;
int PositivelyPips=7;				//7. Ïîëîæèòåëüíûõ ïóíêòîâ (Close-Open, òîëüêî åñëè Close>Open)*
int NegativelyPips=8;				//8. Îòðèöàòåëüíûõ ïóíêòîâ (Close-Open, òîëüêî åñëè Close<Open)*
int PercentPosityvelyPt=9;


				

int iYear;							//Òåêóùèé ãîä
int index;							//Òåêóùèé áàð
int TDM;								//Ëèáî òîðãîâûé äåíü ìåñÿöà ëèáî ïðîñòî äåíü ìåñÿöà
int LTD;								//Ïîñëåäíèé òîðãîâûé äåíü, ïðèíèìàåò çíà÷åíèå ëèáî 23 ëèáî 32 â çàâèñèìîñòè îò ðåæèìà èññëåäîâàíèÿ
int FileHandle;					//Äèñêðèïòîð ôàéëà, â êîòîðûé ïèøåòñÿ ðåçóëüòàò
double TradeMonth[24][10]; 	//ìàññèâ äíåé. 
double TradeMonthAll[24][10]; //Èòîãîâàÿ ñòàòèñòèêà
/*
  Îñíîâíàÿ ôóíêöèÿ ñêðèïòà, âîçâðàùàåò òîðãîâûé äåíü ìåñÿöà. Íàïðèìåð â ìåñÿöå 22 òîðãîâûõ äíÿ, ò.å.
  äåíü 31.10.08 áóäåò 23 òîðãîâûì äíåì
*/
int TradeDayOfMonth(int index){
	int TDM; 									//òîðãîâûé äåíü ìåñÿöà, ïðèíèìàåò çíà÷åíèå îò 1 äî 22
	int MonthYear;								//ìåñÿö ãîäà, ïðèíèìàåò çíà÷åíèå îò 1 (ÿíâàðü) äî 12 (äåêàáðü)
	MonthYear=TimeMonth(Time[index]);	//óçíàåì ñ êàêèì ìåñÿöåì ìû èìååì äåëî
	//Öèêë âûïîëíèòñÿ ïî êðàéíåé ìåðå îäèí ðàç, ïîýòîìó íåò íóæäû îò÷èòûâàòü TDM ñ 1
	while(MonthYear==TimeMonth(Time[index])){
		TDM++;
		index++;
	}
	return(TDM);
}
int WriteResults(int FileHandle, double TradeM[24][10]){
	double dYear;
	double AverageDay;
	dYear=iYear;
	if(iYear>EndYear)
	   FileWriteString(FileHandle, "ÈÒÎÃÎ:", StringLen("ÈÒÎÃÎ:"));
	else
	   FileWriteString(FileHandle, DoubleToStr(dYear,0), StringLen(DoubleToStr(dYear,0)));
	FileWriteString(FileHandle, "\r\n", StringLen("\r\n"));
	for(int i=1;i<24;i++){
	   //È ñíîâà ãîëü íà âûäóìêè õèòðà
	  double d=i;
	  FileWriteString(FileHandle, "TDM-", StringLen("TDM-"));
	  FileWriteString(FileHandle, DoubleToStr(d,0), StringLen(DoubleToStr(d,0)));
	  FileWriteString(FileHandle, "\t", StringLen("\t"));
	  for(int j=0;j<10;j++){
	     int len;
		  if(j==3||j==9)len=1;
		  else len=0;
		  if(j>3&&j<9){//Ñðåäíèè çíà÷åíèÿ äíåé	
		     if(TradeM[i][AllDaysOfMonth]==0)AverageDay=0;
			  else AverageDay=TradeM[i][j]/TradeM[i][AllDaysOfMonth];
			  FileWriteString(FileHandle, (DoubleToStr(AverageDay, len)), StringLen(DoubleToStr(AverageDay, len)));
		  }
		  else	FileWriteString(FileHandle, DoubleToStr(TradeM[i][j], len), StringLen(DoubleToStr(TradeM[i][j], len)));
		  if(j<9)FileWriteString(FileHandle, "\t", StringLen("\t"));
		}
		FileWriteString(FileHandle, "\r\n", StringLen("\r\n"));
	}
	FileWriteString(FileHandle, "\r\n", StringLen("\r\n"));
	return(1);
}

int start()
  {
//----
   index=Bars-1;
	string FileName;
	if(Period()<1440||Period()>1440){
   	Print("Ïîìåíÿéòå òàéìôðåéì íà äåíü");
   	return(0);}
   if(BeginYear>Year()||EndYear>Year()){
   	Print("Íà÷àëüíûé èëè êîíå÷íûé ãîä íå ìîæåò áûòü áîëüøå òåêóùåãî");
   	return(0);}
   if(BeginYear<TimeYear(Time[Bars-1])||EndYear<TimeYear(Time[Bars-1])){
   	Print("Íà÷àëüíûé èëè êîíå÷íûé ãîä íå ìîæåò áûòü ìåíüøå ñàìîé ñòàðîé èçâåñòíîé öåíû");
   	return(0);}
   if(BeginYear>EndYear){
   	Print("Êîíå÷íûé ãîä íå ìîæåò áûòü ìåíüøå íà÷àëüíîãî");
   	return(0);}
   if(Bars<270){
   	Print("Ñëèøêîì ìàëî äàííûõ. Çàãðóçèòå áîëüøå äàííûõ");
   	return(0);}
	
	FileName="TDM_"+Symbol()+BeginYear+"-"+EndYear+".txt";
   FileHandle=FileOpen(FileName, FILE_BIN|FILE_WRITE);
	if(FileHandle<1){
      Print("Íå óäàëîñü îòêðûòü ôàéë, ïðè÷èíà:", GetLastError());
      return;
   }
	while(BeginYear!=TimeYear(Time[index])){index--;}
	for(iYear=BeginYear;iYear<=EndYear;iYear++){
		while(iYear==TimeYear(Time[index])){
			TDM=TradeDayOfMonth(index);
			TradeMonth[TDM][AllDaysOfMonth]=TradeMonth[TDM][AllDaysOfMonth]+1;
			TradeMonth[TDM][AllPips]=TradeMonth[TDM][AllPips]+(Close[index]-Open[index])/Point;
			TradeMonth[TDM][RangeOfPrice]=TradeMonth[TDM][RangeOfPrice]+(High[index]-Low[index])/Point;
			TradeMonth[TDM][AllPipsMod]=TradeMonth[TDM][AllPipsMod]+MathAbs((Close[index]-Open[index])/Point);
			if(Close[index]>Open[index])				//Åñëè çàêðûòèå áîëüøå îòêðûòèÿ - äåíü ïîëîæèòåëüíûé
      	{
     			TradeMonth[TDM][PositivelyDays]=TradeMonth[TDM][PositivelyDays]+1;
     			TradeMonth[TDM][PositivelyPips]=TradeMonth[TDM][PositivelyPips]+(Close[index]-Open[index])/Point;
     		}
			if(Close[index]<=Open[index])		//Åñëè çàêðûòèå ìåíüøå ëèáî ðàâíî îòêðûòèþ - äåíü îòðèöàòåëüíûé
      	{
     			TradeMonth[TDM][NegativelyDays]=TradeMonth[TDM][NegativelyDays]+1;
     			TradeMonth[TDM][NegativelyPips]=TradeMonth[TDM][NegativelyPips]+(Close[index]-Open[index])/Point;
 			}
			if(TradeMonth[TDM][AllDaysOfMonth]!=0)
				{TradeMonth[TDM][PercentPositivelyDays]=TradeMonth[TDM][PositivelyDays]*100/TradeMonth[TDM][AllDaysOfMonth];}
			if(TradeMonth[TDM][AllPipsMod]!=0)
				{TradeMonth[TDM][PercentPosityvelyPt]=TradeMonth[TDM][PositivelyPips]*100/TradeMonth[TDM][AllPipsMod];}
			index--;
		}
		//îáúåäèíÿåì
		for(int i=1;i<24;i++){
			TradeMonthAll[i][AllDaysOfMonth]=TradeMonthAll[i][AllDaysOfMonth]+TradeMonth[i][AllDaysOfMonth];
			TradeMonthAll[i][AllPips]=TradeMonthAll[i][AllPips]+TradeMonth[i][AllPips];
			TradeMonthAll[i][RangeOfPrice]=TradeMonthAll[i][RangeOfPrice]+TradeMonth[i][RangeOfPrice];
			TradeMonthAll[i][AllPipsMod]=TradeMonthAll[i][AllPipsMod]+TradeMonth[i][AllPipsMod];
			TradeMonthAll[i][PositivelyDays]=TradeMonthAll[i][PositivelyDays]+TradeMonth[i][PositivelyDays];
			TradeMonthAll[i][NegativelyDays]=TradeMonthAll[i][NegativelyDays]+TradeMonth[i][NegativelyDays];
			TradeMonthAll[i][PositivelyPips]=TradeMonthAll[i][PositivelyPips]+TradeMonth[i][PositivelyPips];
			TradeMonthAll[i][NegativelyPips]=TradeMonthAll[i][NegativelyPips]+TradeMonth[i][NegativelyPips];
			if(TradeMonthAll[i][AllDaysOfMonth]!=0)
				{TradeMonthAll[i][PercentPositivelyDays]=TradeMonthAll[i][PositivelyDays]*100/TradeMonthAll[i][AllDaysOfMonth];}
			if(TradeMonthAll[i][AllPipsMod]!=0)
				{TradeMonthAll[i][PercentPosityvelyPt]=TradeMonthAll[i][PositivelyPips]*100/TradeMonthAll[i][AllPipsMod];}
		}
		
		WriteResults(FileHandle, TradeMonth);		
		//îáíóëÿåì...
		for(int a=1;a<24;a++){
			for(int b=0;b<10;b++){
				TradeMonth[a][b]=0;
			}
		}	
	}
	//Èòîãîâàÿ ñòàòèñòêèêà 
   WriteResults(FileHandle, TradeMonthAll);
//----
   return(0);
  }
//+------------------------------------------------------------------+







Sample





Analysis



Market Information Used:

Series array that contains open time of each bar
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


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features:

It writes information to file
Uses files from the file system