//+------------------------------------------------------------------+ //| Trade Day Of Week.mq4 | //| Copyright © 2008, Vasily Sokolov (C-4) | //| e-mail: vs-box@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, BazilSoft" #property link "vs-box@mail.ru" #property show_inputs extern int BeginYear=1998; extern int EndYear=2008; //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ //ÏÅÐÅÌÅÍÍÛÅ ÂÛÂÎÄßÙÈÅÑß Â ÔÀÉË: // ïåðâîé ÿ÷åéêå ìàññèâà õðàíèòñÿ ñòàòèñòèêà çà ãîä, âî âòîðîé ñîâîêóïíàÿ ñòàòèñòèêà çà âñå ãîäû double AllDaysOfWeek[2]; //1. Âñåãî äíåé íåäåëè â ãîäó (íàïðèìåð â ãîäó 52 ïîíåäåëüíèêà)* double PositivelyDays[2]; //2. Äíè çàêðûâøèåñÿ ïîëîæèòåëüíî* double NegativelyDays[2]; //3. Äíè çàêðûâøèåñÿ îòðèöàòåëüíî* double PercentPositivelyDays[2]; //4. Ïðîöåíò äíåé çàêðûâøèõñÿ ïîëîæèòåëüíî îò AllDaysOfWeek double AllPtM[2]; //5. Âñåãî ïóíêòîâ ïî ìîäóëþ (Close-Open)* double AllPt[2]; //6. Âñåãî ïóíêòîâ (Close-Open)* double PositivelyPt[2]; //7. Ïîëîæèòåëüíûõ ïóíêòîâ (Close-Open, òîëüêî åñëè Close>Open)* double NegativelyPt[2]; //8. Îòðèöàòåëüíûõ ïóíêòîâ (Close-Open, òîëüêî åñëè Close<Open)* double PercentPosityvelyPt[2]; //9. Ïðîöåíò ïîëîæèòåëüíûõ ïóíêòîâ îò AllPtM double RangeOfPrice[2]; //10. Äèàïàçîí öåí äíÿ, (High-Low) int FileHandle; int FileStat; void WriteResults(int FileName, int BYear, int a){ string Y, N; if(BYear==0){Y="Èòîãî";N="\n";} else{Y=BYear;} FileWrite(FileName, Y,"\t", DoubleToStr(AllDaysOfWeek[a], 0), DoubleToStr(PositivelyDays[a], 0), DoubleToStr(NegativelyDays[a], 0), DoubleToStr(PercentPositivelyDays[a], 1), DoubleToStr((RangeOfPrice[a]/AllDaysOfWeek[a]), 0), DoubleToStr(AllPtM[a]/AllDaysOfWeek[a], 0), DoubleToStr(AllPt[a]/AllDaysOfWeek[a], 0), DoubleToStr(PositivelyPt[a]/AllDaysOfWeek[a], 0), DoubleToStr(NegativelyPt[a]/AllDaysOfWeek[a], 0), DoubleToStr(PercentPosityvelyPt[a], 1), N); } void WriteStatistic(int index){ string YY, MM, DD, YYMMDD; double RangeOfPrice; double AllPt; YY=TimeYear(Time[index]); MM=TimeMonth(Time[index]); DD=TimeDay(Time[index]); YYMMDD=YY+"."+MM+"."+DD; RangeOfPrice=(High[index]-Low[index])/Point; AllPt=(Close[index]-Open[index])/Point; FileWrite(FileStat, YYMMDD, " ", RangeOfPrice, " ", AllPt); } int start() { //-------------------------------------------------------------------- //ÑËÓÆÅÁÍÛÅ ÏÅÐÅÌÅÍÍÛÅ: int index; //Íîìåð èññëåäóåìîãî äíÿ string DW; //Íàçâàíèå äíÿ íåäåëè 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="TDW_"+Symbol()+BeginYear+"-"+EndYear+".txt"; FileHandle=FileOpen(FileName, FILE_WRITE | FILE_CSV, "\t"); FileStat=FileOpen("_StatisticTDW.txt", FILE_WRITE | FILE_CSV, "\t"); if(FileHandle<1){ Print("Íå óäàëîñü îòêðûòü ôàéë, ïðè÷èíà:", GetLastError()); return; } for(int MDayOfWeek=1;MDayOfWeek<=5;MDayOfWeek++) //Íà÷èíàåì ñ ïîíåäåëüíèêà(1), çàêàí÷èâàåì ïÿòíèöåé(5) { index=Bars-1; while(BeginYear!=TimeYear(Time[index])){index--;} switch(MDayOfWeek) { case 1: DW="ÏÎÍÅÄÅËÜÍÈÊ"; break; case 2: DW="ÂÒÎÐÍÈÊ"; break; case 3: DW="ÑÐÅÄÀ\t"; break; case 4: DW="×ÅÒÂÅÐÃ"; break; case 5: DW="ÏßÒÍÈÖÎ\t"; } FileWrite(FileHandle, DW); for(int BYear=BeginYear; (BYear<=EndYear)&&(index>=0); BYear++) { Print(DW, " ", BYear); while(BYear==TimeYear(Time[index])) //Ïðîñìàòðèâàåì âñå äíè ãîäà { if(TimeDayOfWeek(Time[index])==MDayOfWeek) //Âûáèðàåì èç íèõ òîëüêî MDayOfWeek (íàïð. ïîíåäåëüíèêè) { AllDaysOfWeek[0]++; RangeOfPrice[0]=RangeOfPrice[0]+(High[index]-Low[index])/Point; AllPt[0]=AllPt[0]+(Close[index]-Open[index])/Point; if(Close[index]>Open[index]) //Åñëè çàêðûòèå áîëüøå îòêðûòèÿ - äåíü ïîëîæèòåëüíûé { PositivelyDays[0]++; PositivelyPt[0]=PositivelyPt[0]+(Close[index]-Open[index])/Point; AllPtM[0]=AllPtM[0]+(Close[index]-Open[index])/Point; } if(Close[index]<Open[index]) //Åñëè çàêðûòèå ìåíüøå îòêðûòèÿ - äåíü îòðèöàòåëüíûé { NegativelyDays[0]++; NegativelyPt[0]=NegativelyPt[0]-(Close[index]-Open[index])/Point; AllPtM[0]=AllPtM[0]+(-1*(Close[index]-Open[index])/Point); } //Äëÿ ïðîâåðêè ïðàâèëüíîñòè ïîäñ÷åòà èñïîëüçîâàëàñü âñïîìîãàòåëüíàÿ ôóíêöèÿ WriteStatistic //îíà ïèøåò â îòäåëüíûé ôàéë äàòó êàæäîãî äíÿ íåäåëè, åãî äíåâíîé äèàïîçîí è äèàïîçîí Close-Open //Ïðè æåëàíèè åå ìîæíî çàêîììåíòèðîâàòü. WriteStatistic(index); } index--; } if(AllPtM[0]>0){ PercentPosityvelyPt[0]=PositivelyPt[0]*100/AllPtM[0];} if(AllDaysOfWeek[0]>0){ PercentPositivelyDays[0]=PositivelyDays[0]*100/AllDaysOfWeek[0];} AllDaysOfWeek[1]=AllDaysOfWeek[1]+AllDaysOfWeek[0]; AllPt[1]=AllPt[1]+AllPt[0]; AllPtM[1]=AllPtM[1]+AllPtM[0]; PositivelyDays[1]=PositivelyDays[1]+PositivelyDays[0]; NegativelyDays[1]=NegativelyDays[1]+NegativelyDays[0]; PositivelyPt[1]=PositivelyPt[1]+PositivelyPt[0]; NegativelyPt[1]=NegativelyPt[1]+NegativelyPt[0]; RangeOfPrice[1]=RangeOfPrice[1]+RangeOfPrice[0]; //Âûâîäèì ïåðåìåííûå â ôàéë WriteResults(FileHandle, BYear, 0); AllDaysOfWeek[0]=0;AllPt[0]=0;AllPtM[0]=0;PositivelyDays[0]=0;NegativelyDays[0]=0;RangeOfPrice[0]=0; PositivelyPt[0]=0;NegativelyPt[0]=0;PercentPosityvelyPt[0]=0;PercentPositivelyDays[0]=0; } if(AllPtM[1]>0){ PercentPosityvelyPt[1]=PositivelyPt[1]*100/AllPtM[1];} if(AllDaysOfWeek[1]>0){ PercentPositivelyDays[1]=PositivelyDays[1]*100/AllDaysOfWeek[1];} //âûâîäèì èòîãîâóþ ñòàòèñòèêó â ôàéë WriteResults(FileHandle, 0, 1); AllDaysOfWeek[1]=0;AllPt[1]=0;AllPtM[1]=0;PositivelyDays[1]=0;NegativelyDays[1]=0;RangeOfPrice[1]=0; PositivelyPt[1]=0;NegativelyPt[1]=0;PercentPosityvelyPt[1]=0;PercentPositivelyDays[1]=0; } return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains open time 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 close prices for each bar
Series array that contains open 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