Author: Copyright � 2008, BazilSoft
TDM
Miscellaneous
It writes information to fileUses files from the file system
0 Views
0 Downloads
0 Favorites
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);
  }
//+------------------------------------------------------------------+



Comments