//+------------------------------------------------------------------+ //| Graal-003.mq4 | //| Copyright © 2005, Registr | //| Exsys@pochta.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Registr" #property link "Exsys@pochta.ru" //---- #import "user32.dll" int MessageBoxA(int hWnd ,string lpText,string lpCaption,int uType); #import "Registr.dll" string jLeft(string InStr,int Number); string jRight(string InStr,int Number); string jTrimAll(string InStr); string jTrimLeft(string InStr); string jTrimRight(string InStr); int jLen(string InStr); string jCopy(string InStr,int Ind,int Count); int jPos(string SubInStr,string InStr); string jGetProgramName(); string jGetProgramDir(string ProgName); string jGetCurrDir(); bool jFileExists(string FileName); string jFileExt(string FileName); void jDeleteLogs(string FolderName); #import //---- #include <stdlib.mqh> //---- input parameters extern double Lots =0.1; extern int TakeProfit=500; extern int StopLoss =500; extern int Limit =5; // Óðîâåíü óñòàíîâêè îòëîæåííîãî îðäåðà extern int ProfitLevel= 30; // Îáùèé ïðîôèò äëÿ âñåõ ïîçèöèé ïðè êîòîðîì îíè çàêðûâàþòñÿ extern int ModeOpeningOfWarrants=1; /* Ðåæèì óñòàíîâêè îðäåðîâ: 0 - ñíà÷àëà îòêðûâàþòñÿ ïîçèöèè, çàòåì óñòàíàâëèâàòñÿ îòëîæåííûå îðäåðà, 1 - ñíà÷àëà óñòàíàâëèâàòñÿ îòëîæåííûå îðäåðà, çàòåì îòêðûâàþòñÿ ïîçèöèè, 2 - îòêðûâàþòñÿ òîëüêî ïîçèöèè, 3 - óñòàíàâëèâàòñÿ òîëüêî îòëîæåííûå îðäåðà */ extern int ModeClosingOfWarrants=1; /* Ðåæèì çàêðûòèÿ îðäåðîâ: 0 - îðäåðà çàêðûâàòñÿ â ñìåøàííîì ïîðÿäêå ïî ïðèíöèïó ÔÈÔÎ ( ïîñëåäíèì îòêðûëñÿ, ïåðâûì çàêðûëÿ, 1 - ñíà÷àëà çàêðûâàþòñÿ îòêðûòûå ïîçèöèè, çàòåì îòëîæåííûå îðäåðà, 2 - ñíà÷àëà çàêðûâàþòñÿ îòëîæåííûå îðäåðà, çàòåì îòêðûòûå ïîçèöèè, 3 - òî æå ñàìîå, ÷òî 2 íî, îòëîæåííûå îðäåðà çàêðûâàþòñÿ â îáðàòíîì ïîðÿäêå(íå ðåàëèçîâàíî)*/ extern bool OpenOnlyOnDepthOfFChannel=false; /*Ðàçðåøàåò ñîâåòíèêó îòêðûâàòü ïîçèöèè òîëüêî íà ãëóáèíå ôðàêòàëüíîãî êàíàëà*/ extern int DepthOfFChannel=25; /*Ãëóáèíà ôðàêòàëüíîãî êàíàëà íà êîòîðîé îòêðûâàþòñÿ îðäåðà, â ïðîöåíòàõ, ïðè çíà÷åíèè ðàâíîìó íóëþ êàíàë îòîáðàæàåòñÿ, íî ôèëüòð íå ðàáîòàåò*/ extern bool ReferenceOnChannel_HL=false; /*Ðàçðåøàåò ñîâåòíèêó îðåèíòèðîâàòüñÿ íà êàíàë High-Low, ýòî îçíà÷àåò, ÷òî ñîâåòíèê íå áóäåò îòêðûâàòü ïîçèöèþ Buy, åñëè öåíà íèæå óðîâíÿ îðåèíòàöèè Low, è íàîáîðîò*/ extern int LevelOrientationOnChannel_HL=20; /*Óðîâåíü îðåèíòàöèè â ïðîöåíòàõ îò êàíàëà High-Low, ïðè çíà÷åíèè ðàâíîìó íóëþ êàíàë îòîáðàæàåòñÿ, íî ôèëüòð íå ðàáîòàåò*/ extern bool ToTradeInFlat=true; /*Ðàçðåøàåò èëè çàïðåùàåò ñîâåòíèêó òîðãîâàòü âî ôëýòå*/ extern int LevelChannel_HLForFlat=20; /*Óðîâåíü êàíàëà High-Low, ïðè êîòîðîì òåíäåíöèÿ ñ÷èòàåòñÿ ôëýòîì*/ extern bool UseWPRInClosePositions=false; /*Èñïîëüçîâàòü ëè èíäèêàòîð WPR â ïðèíÿòèå ðåøåíèÿ î çàêðûòèè îðäåðîâ*/ extern int ControlLevelWPR=30; /*Êîíòðîëüíûé óðîâåíü èíäèêàòîðà WPR*/ extern bool ToExposeContrwarrants=false; /*Âûñòàâëÿòü êîíòðîðäåðà ïðè ñðàáàòûâàíèè îòëîæåííûõ îðäåðîâ*/ extern bool OnlyOnePosition=false; /* Äîïîëíèòåëüíàÿ íàñòðîéêà, êîòîðóþ ââîæó ïðÿìî ñ êîë¸ñ, ïîýòîìó â èíôîðìàöèîííîì òàáëî îíà íå îòîáðàæàåòñÿ. Ðàçðåøàåò èëè çàïðåùàåò ñîâåòíèêó îòêðûâàòü òîëüêî îäèí îðäåð Buy è îäèí îðäåð Sell, â êàæäîé ñåññèè. Áóäåò ðàáîòàòü, òîëüêî ïðè ðàçðåøåíèè âûñòàâëÿòü êîíòðîðäåðà, ò.ê. â ïðîòèâíîì ñëó÷àå òåðÿåòñÿ ñìûñë èäåè. Ñîáñòâåííî, â äàëüíåéøåì, òîðãîâëÿ óæå âåä¸òñÿ íà îòëîæåííûõ îðäåðàõ...*/ extern bool DeleteLogsOnClose=false; /*Ñòèðàòü âñå log-ôàéëû, ñîçäàâàåìûå ÌÒ4, ïðè çàâåðøåíèè ðàáîòû òåðìèíàëà*/ /* ýòîì ñëó÷àå, êàòàëîã ÌÒ4 íå áóäåò ðàçðàñòàòüñÿ äî ãèãàáàéòîâ*/ extern bool EraseOldFileOfReport=true; /*Ñòèðàòü ñòàðûé ôàéë ïðîòîêîëà, åñëè ôàéë FileNameOfReport óæå ñóùåñòâóåò*/ extern string FileNameOfReport; /*Íàçâàíèå ôàéëà ïðîòîêîëà*/ extern bool UseSoundInOperations=false; /*Èñïîëüçîâàòü çâóêîâîå ñîïðîâîæäåíèå òîðãîâûõ îïåðàöèé*/ extern string SoundOpenBuy="OpenBuy.wav"; /*Çâóê ïðè îòêðûòèè îðäåðà Buy*/ extern string SoundOpenSell="OpenSell.wav"; /*Çâóê ïðè îòêðûòèè îðäåðà Sell*/ extern string SoundOpenBuyStop="OpenBuyStop.wav"; /*Çâóê ïðè âûñòàâëåíèè îðäåðà BuyStop*/ extern string SoundOpenSellStop="OpenSellStop.wav"; /*Çâóê ïðè âûñòàâëåíèè îðäåðà SellStop*/ extern string SoundClosing="ClosePositions.wav"; /*Çâóê ïðè çàêðûòèè âñåõ îðäåðîâ*/ //---- static int magicNumber=123456; static string NameOfExpert="Graal-003"; static datetime prev_min=D'1.1.1'; // âðåìÿ ïðåäûäóùåãî ôðàêòàëüíîãî ìèíèìóìà static datetime prev_max=D'1.1.1'; // âðåìÿ ïðåäûäóùåãî ôðàêòàëüíîãî ìàêñèìóìà //---- bool AllowTrade,OpenBuy,OpenSell,StopWorkOfExpert,beginning,WorkWPR; bool TrendUp,TrendDn,SignalOnClosing,CheckClose,LockForClose; datetime PrevTime,TimeOfClosing; int CountBars,jk,CountSessions,CountOperations,CountOrders,CountBuy,CountSell; int PerHL,TotalBuyStop,CountBuyStop,TotalSellStop,CountSellStop,MaximalDrawdown; double iFractals_up,iFractals_lo,PrevPrice,FractalPrevUp,FractalPrevDn,UseOfDeposit; double ChannelHLClose,MidLine,MaxH,MinL,SubMaxH,SubMinL,FChannel; double CollectorBuy,CollectorSell,SubFractalUp,FractalUp,SubFractalDn,FractalDn; double InfoOpenOrders[][4]; string FlagFractal; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { int buffer; //bool AllowTrade=true;OpenBuy=false;OpenSell=false;StopWorkOfExpert=false;beginning=true; WorkWPR=false;TrendUp=false;TrendDn=false;SignalOnClosing=false; CheckClose=false; LockForClose=true; //datetime PrevTime=Time[0];TimeOfClosing=0; //int CountBars=0;jk=0;CountSessions=0;CountOperations=0;CountOrders=0;CountBuy=0;CountSell=0; MaximalDrawdown=0;PerHL=14;TotalBuyStop=0;CountBuyStop=0;TotalSellStop=0;CountSellStop=0; //double iFractals_up=0;iFractals_lo=0;PrevPrice=0;FractalPrevUp=0;FractalPrevDn=0;UseOfDeposit=0; CollectorBuy=0;CollectorSell=0;SubFractalUp=0;FractalUp=0;SubFractalDn=0;FractalDn=0; //string FlagFractal=""; //---- string StrYear=(CharToStr(50)+CharToStr(48)+CharToStr(48)+CharToStr(54)); string StrMonth=(CharToStr(51)); int YearWork=StrToInteger(StrYear),MonthWork=StrToInteger(StrMonth); if(TimeYear(CurTime())>=YearWork) {//001 if((TimeMonth(CurTime())>MonthWork)||(TimeYear(CurTime())>YearWork)) {//002 Alert("Ñðîê äåéñòâèÿ ñîâåòíèêà èñò¸ê!"); StopWorkOfExpert=true;return(0); }//002 }//001 if(!IsTesting()) { ObjectsDeleteAll(WindowOnDropped()); Comment(""); if((!IsDllsAllowed())||(!IsLibrariesAllowed())) { Alert("Äëÿ ðàáîòû ýêñïåðòà íåîáõîäèìî ðàçðåøèòü èìïîðò ôóíêöèé", "\n"+"èç âíåøíèõ è dll áèáëèîòåê! Ðàáîòà ýêñïåðòà íå âîçìîæíà!"); StopWorkOfExpert=true;return(0); } if(!IsTradeAllowed()) { MessageBoxA(WindowHandle(Symbol(),0), "Ñîâåòíèêó íå ðàçðåøåíî òîðãîâàòü!  ñâîéñòâàõ ñîâåòíèêà ïîñòàâüòå" +"\n"+"ãàëî÷êó íà ïðîòèâ îïöèè - \" ÐÀÇÐÅØÈÒÜ ÑÎÂÅÒÍÈÊÓ ÒÎÐÃÎÂÀÒÜ \"." ,"Ñîâåòíèêó "+NameOfExpert+" òîðãîâëÿ íå ðàçðåøåíà!",16); StopWorkOfExpert=true;return(0); } Sleep(2000); PlaySound("Money.wav"); buffer=ToInformTheUser(); if(buffer==2) { StopWorkOfExpert=true;return(0); } if(!IsConnected()) { Alert("Îòñóòñòâóåò ñîåäèíåíèå ñ ñåðâåðîì! Ðàáîòà ñîâåòíèêà ïðèîñòàíîâëåíà!"); } } else { Alert("Âíèìàíèå!  òåñòåðå ìíîãèå ôóíêöèè íå ðàáîòàþò!"); } if(StringLen(FileNameOfReport)==0) { FileNameOfReport=("Report"+Symbol()+Period()); } if(EraseOldFileOfReport) { FileDelete(FileNameOfReport); } // Print("Âûïîëíåí áëîê init"); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { if(!IsTesting()) { ObjectsDeleteAll(WindowOnDropped()); Comment(""); } WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Îêîí÷àíèå ðàáîòû ñîâåòíèêà "+NameOfExpert); if(DeleteLogsOnClose) { jDeleteLogs(jGetCurrDir()+"\\experts\logs"); jDeleteLogs(jGetCurrDir()+"\\tester\logs"); } Print("Âûïîëíåí áëîê deinit"); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { //if ((Year()<2005) || (Month()<10)) return (0); if(StopWorkOfExpert) return(0); bool NewBar=false;int i,size; //êîíòðîëüíàÿ ìåòêà int a=0; int b=0; int c=0; if(a==b) {//? c=a+b; }//? if(beginning) { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íà÷àëî ðàáîòû ñîâåòíèêà "+NameOfExpert); if(IsTesting())WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Âíèìàíèå!  òåñòåðå ìíîãèå ôóíêöèè íå ðàáîòàþò!"); WriteLineInFile(FileNameOfReport,""); CountSessions++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íà÷àëî òîðãîâîé ñåñèè ¹"+CountSessions); WriteLineInFile(FileNameOfReport,""); beginning=false; } if(!IsTesting()&&(jk<3)) { if(CalculationOfWarrants(Symbol(),0,8,0)>0) { int answer=InfoByOpenOrders();jk=3; if(answer==6) { StopWorkOfExpert=true;return(0); } } jk++; } if (Time[0]!=PrevTime) { CountBars++; NewBar=True; PrevPrice=0; PrevTime=Time[0]; } if((CountBuyStop>CalculationOfWarrants(Symbol(),0,4,0))|| (CountSellStop>CalculationOfWarrants(Symbol(),0,5,0))) { int resSS=0,resSB=0,intSize=0; size=ArrayRange(InfoOpenOrders,0); for(i=0;i<size;i++) { if(OrderSelect(InfoOpenOrders[i][0],SELECT_BY_TICKET)) { if(OrderType()==InfoOpenOrders[i][2]) continue; else { switch(OrderType()) { case OP_BUY: CountOperations++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñðàáîòàë îðäåð BuyStop òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0) +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" íà îòìåòêå: " +DoubleToStr(InfoOpenOrders[i][3],Digits)); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Îòêðûòà ïîçèöèÿ Buy òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0) +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" ïî öåíå: " +DoubleToStr(InfoOpenOrders[i][3],Digits)); InfoOpenOrders[i][2]=OP_BUY; FlagFractal="buy"; CountBuyStop--; UseOfDeposit=UseOfDeposit+((NormalizeDouble(Ask,Digits)*1000)*OrderLots()); if(ToExposeContrwarrants&&AllowTrade) { WriteLineInFile(FileNameOfReport,"Ðàçðåøåíî âûñòàâëåíèå êîíòðîðäåðîâ!"); CountOrders++; resSS=PerformanceOpenSellStop(Symbol(),Lots,(FractalDn-(Limit*Point)),5,StopLoss,TakeProfit, CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenSellStop); if(resSS>0) { CountSellStop++;TotalSellStop++; intSize=ArrayRange(InfoOpenOrders,0); ArrayResize(InfoOpenOrders,size+1); InfoOpenOrders[intSize][0]=resSS; InfoOpenOrders[intSize][1]=CountOrders; InfoOpenOrders[intSize][2]=OP_SELLSTOP; InfoOpenOrders[intSize][3]=NormalizeDouble((FractalDn-(Limit*Point)),Digits); } else { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îòëîæåííûé êîíòðîðäåð!"); CountOrders--; } } WriteLineInFile(FileNameOfReport,""); break; case OP_SELL: CountOperations++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñðàáîòàë îðäåð SellStop òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0) +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" íà îòìåòêå: " +DoubleToStr(InfoOpenOrders[i][3],Digits)); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Îòêðûòà ïîçèöèÿ Sell òèêåò "+DoubleToStr(InfoOpenOrders[i][0],0) +" âíóòðåííèé ¹"+DoubleToStr(InfoOpenOrders[i][1],0)+" ïî öåíå: " +DoubleToStr(InfoOpenOrders[i][3],Digits)); InfoOpenOrders[i][2]=OP_SELL; FlagFractal="sell"; CountSellStop--; UseOfDeposit=UseOfDeposit+((NormalizeDouble(Bid,Digits)*1000)*OrderLots()); if(ToExposeContrwarrants&&AllowTrade) { WriteLineInFile(FileNameOfReport,"Ðàçðåøåíî âûñòàâëåíèå êîíòðîðäåðîâ!"); CountOrders++; resSB=PerformanceOpenBuyStop(Symbol(),Lots,(FractalUp+(Limit*Point)),5,StopLoss,TakeProfit, CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenBuyStop); if(resSB>0) { CountBuyStop++;TotalBuyStop++; intSize=ArrayRange(InfoOpenOrders,0); ArrayResize(InfoOpenOrders,size+1); InfoOpenOrders[intSize][0]=resSB; InfoOpenOrders[intSize][1]=CountOrders; InfoOpenOrders[intSize][2]=OP_BUYSTOP; InfoOpenOrders[intSize][3]=NormalizeDouble(FractalUp+(Limit*Point),Digits); } else { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îòëîæåííûé êîíòðîðäåð!"); CountOrders--; } } WriteLineInFile(FileNameOfReport,""); break; default: WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ïóòàíèöà â îðäåðàõ íà ñåðâåðå!"); Print("Ïóòàíèöà â îðäåðàõ íà ñåðâåðå!"); break; } } } else { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûáðàòü îðäåð "+ InfoOpenOrders[i][0] +" âíóòðåííèé ¹"+InfoOpenOrders[i][1]+", ïðè÷èíà: "+ErrorDescription(GetLastError())); Print("Íå óäàëîñü âûáðàòü îðäåð "+ InfoOpenOrders[i][0]+" âíóòðåííèé ¹"+InfoOpenOrders[i][1] +", ïðè÷èíà: "+ErrorDescription(GetLastError())); } } } if(MaximalDrawdown>(CalculationOfWarrants(Symbol(),magicNumber,0,1)+CalculationOfWarrants(Symbol(),magicNumber,1,1))) { MaximalDrawdown=CalculationOfWarrants(Symbol(),magicNumber,0,1)+CalculationOfWarrants(Symbol(),magicNumber,1,1); } if (CalculationOfWarrants(Symbol(),magicNumber,6,1)>ProfitLevel) { AllowTrade=false; if(LockForClose) { SignalOnClosing=true; WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Îáùèé óðîâåíü ïðèáûëè ïðèâûñèë ProfitLevel, ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing"); if(!UseWPRInClosePositions) { WriteLineInFile(FileNameOfReport,""); } } } if(SignalOnClosing&&UseWPRInClosePositions&&LockForClose) { double InitWPRPrev=0,InitWPRCurr=0; InitWPRPrev=iWPR(Symbol(),0,14,1); InitWPRCurr=iWPR(Symbol(),0,14,0); if((InitWPRPrev>(0-ControlLevelWPR))&&(InitWPRCurr>InitWPRPrev)) { WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë SignalOnClosing îòìåíåí ôèëüòðîì \"WPR\", ò.ê. òðåíä ââåðõ"); WorkWPR=true;TrendUp=true;SignalOnClosing=false; } if((InitWPRPrev<(-100+ControlLevelWPR))&&(InitWPRCurr<InitWPRPrev)) { WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë SignalOnClosing îòìåíåí ôèëüòðîì \"WPR\", ò.ê. òðåíä âíèç"); WorkWPR=true;TrendDn=true;SignalOnClosing=false; } WriteLineInFile(FileNameOfReport,""); LockForClose=false; } if(WorkWPR) { double WPRPrev=0,WPRCurr=0; WPRPrev=iWPR(Symbol(),0,14,1); WPRCurr=iWPR(Symbol(),0,14,0); if(TrendUp&&(WPRCurr<(0-ControlLevelWPR))) { WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ôèëüòð \"WPR\" ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing"); WriteLineInFile(FileNameOfReport,""); WorkWPR=false;TrendUp=false;SignalOnClosing=true; } if(TrendDn&&(WPRCurr>(-100+ControlLevelWPR))) { WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ôèëüòð \"WPR\" ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing"); WriteLineInFile(FileNameOfReport,""); WorkWPR=false;TrendDn=false;SignalOnClosing=true; } if ((CalculationOfWarrants(Symbol(),magicNumber,0,1)) +(CalculationOfWarrants(Symbol(),magicNumber,1,1))<ProfitLevel/2) { WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Äåéñòâèå ôèëüòðà \"WPR\" îòìåíåíî,ñãåíåðèðîâàí ñèãíàë íà çàêðûòèå îðäåðîâ - SignalOnClosing"); WriteLineInFile(FileNameOfReport,""); WorkWPR=false;TrendUp=false;TrendDn=false;SignalOnClosing=true; } } if(SignalOnClosing) { if(!IsTesting()) { if((UseSoundInOperations)&&(CheckSoundFileName(SoundClosing)=="")) PlaySound(SoundClosing); } CloseAllPositions(Symbol(),magicNumber,ModeClosingOfWarrants); SetBadge("K",CurTime(),((Ask+Bid)/2)-3*Point,170,Violet); SignalOnClosing=false;LockForClose=false;CheckClose=true; } if(CheckClose) { if(CalculationOfWarrants(Symbol(),magicNumber,8,0)==0) { WriteLineInFile(FileNameOfReport,"Âñå îðäåðà çàêðûòû!"); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îêîí÷àíèå òîðãîâîé ñåñèè ¹"+CountSessions); WriteLineInFile(FileNameOfReport,""); WriteLineInFile(FileNameOfReport,"Îò÷¸ò ïî ñåññèè: "); WriteLineInFile(FileNameOfReport,"Âñåãî îòêðûòî îðäåðîâ: "+CountOrders); WriteLineInFile(FileNameOfReport,"Âñåãî îòêðûòî îðäåðîâ Buy: "+CountBuy+" ,îðäåðîâ SellStop: " +TotalSellStop+" ,èç íèõ ñðàáîòàâøèõ: "+(TotalSellStop-CountSellStop)); WriteLineInFile(FileNameOfReport,"Âñåãî îòêðûòî îðäåðîâ Sell: "+CountSell+" ,îðäåðîâ BuyStop: " +TotalBuyStop+" ,èç íèõ ñðàáîòàâøèõ: "+(TotalBuyStop-CountBuyStop)); WriteLineInFile(FileNameOfReport,"Âðåìÿ çàêðûòèÿ îðäåðîâ: "+TimeToStr(TimeOfClosing,TIME_SECONDS )); WriteLineInFile(FileNameOfReport,"Ïðèáûëü/óáûòîê ïî ïîçèöèÿì Buy: "+DoubleToStr(CollectorBuy,2)); WriteLineInFile(FileNameOfReport,"Ïðèáûëü/óáûòîê ïî ïîçèöèÿì Sell: "+DoubleToStr(CollectorSell,2)); WriteLineInFile(FileNameOfReport,"Ïðèáûëü/óáûòîê ïî âñåì ïîçèöèÿì: "+DoubleToStr((CollectorBuy+CollectorSell),2)); WriteLineInFile(FileNameOfReport,"Îáñîëþòíîå èñïîëüçîâàíèå äåïîçèòà: "+DoubleToStr(UseOfDeposit,2)); WriteLineInFile(FileNameOfReport,"Îòíîñèòåëüíîå èñïîëüçîâàíèå äåïîçèòà: " +DoubleToStr((UseOfDeposit/((AccountBalance()-(CollectorBuy+CollectorSell))/100)),2)+"%"); WriteLineInFile(FileNameOfReport,"Ìàêñèìàëüíàÿ ïðîñàäêà çà ñåññèþ: "+MaximalDrawdown); WriteLineInFile(FileNameOfReport,""); CountBuy=0;TotalSellStop=0;CountSellStop=0;CountSell=0;TotalBuyStop=0;CountBuyStop=0; TimeOfClosing=0;CollectorBuy=0;CollectorSell=0;UseOfDeposit=0;MaximalDrawdown=0; CountOperations=0;CountOrders=0;WorkWPR=false;TrendUp=false;TrendDn=false; SignalOnClosing=false;LockForClose=true;CheckClose=false;//FlagFractal=""; ArrayResize(InfoOpenOrders,0); Sleep(5000); WriteLineInFile(FileNameOfReport,""); WriteLineInFile(FileNameOfReport,""); CountSessions++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íà÷àëî òîðãîâîé ñåñèè ¹"+CountSessions); WriteLineInFile(FileNameOfReport,""); AllowTrade=true; } } for(i=0; i < 300; i++) { iFractals_up=iFractals(NULL, 0, MODE_UPPER, i); iFractals_lo=iFractals(NULL, 0, MODE_LOWER, i); if ((iFractals_up!=0) || (iFractals_lo!=0)) break; } if ((iFractals_up!=0) && (Time[i]!=prev_max) && (i < 3)) { prev_max=Time[i]; if(AllowTrade) { OpenSell=true; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Èíäèêàòîð iFractals ñãåíåðèðîâàë ñèãíàë OpenSell"); } } if ((iFractals_lo!=0) && (Time[i]!=prev_min) && (i < 3)) { prev_min=Time[i]; if(AllowTrade) { OpenBuy=true; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Èíäèêàòîð iFractals ñãåíåðèðîâàë ñèãíàë OpenBuy"); } } FractalUp=0;FractalDn=0; FractalUp=iFractals_up; FractalDn=iFractals_lo; if(FractalUp==0) { if(FractalPrevUp==0) { FractalUp=High[PerHL]; for(i=0;i<PerHL;i++) { if (FractalUp<High[i]) FractalUp=High[i]; } } else FractalUp=FractalPrevUp; } else FractalPrevUp=FractalUp; if(FractalDn==0) { if(FractalPrevDn==0) { FractalDn=Low[PerHL]; for(i=0;i<PerHL;i++) { if (FractalDn>Low[i]) FractalDn=Low[i]; } } else FractalDn=FractalPrevDn; } else FractalPrevDn=FractalDn; if(OpenOnlyOnDepthOfFChannel) { FChannel=MathRound((FractalUp-FractalDn)/Point); SubFractalUp=FractalUp-(((FChannel/100)*DepthOfFChannel)*Point); SubFractalDn=FractalDn+(((FChannel/100)*DepthOfFChannel)*Point); if(!IsTesting()) { bool R1=DrawChannel("FChannel",FractalUp,FractalDn,SubFractalUp,SubFractalDn); if(!R1) WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îøèáêà â îòîáðàæåíèè êàíàëà FChannel"); } if(DepthOfFChannel>0) { if(OpenBuy) { RefreshRates(); if(Close[0]<SubFractalDn) { OpenBuy=false; SetBadge("C",CurTime(),Close[0],76,MediumVioletRed); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"FChannel\", ò.ê. öåíà íå äîñòèãëà çàäàííîé ãëóáèíû êàíàëà"); WriteLineInFile(FileNameOfReport,""); } } if(OpenSell) { RefreshRates(); if(Close[0]>SubFractalUp) { OpenSell=false; SetBadge("C",CurTime(),Close[0],76,DodgerBlue); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"FChannel\", ò.ê. öåíà íå äîñòèãëà çàäàííîé ãëóáèíû êàíàëà"); WriteLineInFile(FileNameOfReport,""); } } } } MaxH=Close[PerHL];MinL=Close[PerHL]; for(i=1;i<PerHL;i++) { if (MaxH<Close[i]) MaxH=Close[i]; if (MinL>Close[i]) MinL=Close[i]; } MidLine=NormalizeDouble((MaxH+MinL)/2,Digits); ChannelHLClose=MathRound((MaxH-MinL)/Point); if(ReferenceOnChannel_HL) { SubMaxH=MaxH-(((ChannelHLClose/100)*LevelOrientationOnChannel_HL)*Point); SubMinL=MinL+(((ChannelHLClose/100)*LevelOrientationOnChannel_HL)*Point); if(!IsTesting()) { bool R2=DrawChannel("ChannelHLClose",MaxH,MinL,SubMaxH,SubMinL,MidLine); if(!R2) WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îøèáêà â îòîáðàæåíèè êàíàëà ChannelHLClose"); } if(LevelOrientationOnChannel_HL>0) { if(OpenBuy) { RefreshRates(); if(Close[0]<SubMinL) { OpenBuy=false; SetBadge("R",CurTime(),Close[0],251,MediumVioletRed); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"ChannelHLClose\", ò.ê. öåíà íèæå óðîâíÿ îðåèíòàöèè êàíàëà"); WriteLineInFile(FileNameOfReport,""); } } if(OpenSell) { RefreshRates(); if(Close[0]>SubMaxH) { OpenSell=false; SetBadge("R",CurTime(),Close[0],251,DodgerBlue); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"ChannelHLClose\", ò.ê. öåíà âûøå óðîâíÿ îðåèíòàöèè êàíàëà"); WriteLineInFile(FileNameOfReport,""); } } } } if(!ToTradeInFlat) { if((ChannelHLClose<LevelChannel_HLForFlat) &&(CalculationOfWarrants(Symbol(),magicNumber,0,0)==CalculationOfWarrants(Symbol(),magicNumber,1,0))) { if(OpenBuy) { SetBadge("F",CurTime(),((Ask+Bid)/2)-3*Point,104,MediumVioletRed); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"Flat\", ò.ê. ðûíî÷íàÿ òåíäåíöèÿ îòñóòñâóåò"); WriteLineInFile(FileNameOfReport,""); OpenBuy=false; } if(OpenSell) { SetBadge("F",CurTime(),((Ask+Bid)/2)+3*Point,104,DodgerBlue); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"Flat\", ò.ê. ðûíî÷íàÿ òåíäåíöèÿ îòñóòñâóåò"); WriteLineInFile(FileNameOfReport,""); OpenSell=false; } } } if(OnlyOnePosition&&ToExposeContrwarrants) { if(OpenBuy) { if(CalculationOfWarrants(Symbol(),magicNumber,0,0)>0) { WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"OnlyOnePosition\", ò.ê. ïîçèöèÿ óæå Buy åñòü"); WriteLineInFile(FileNameOfReport,""); OpenBuy=false; } } if(OpenSell) { if(CalculationOfWarrants(Symbol(),magicNumber,1,0)>0) { WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"OnlyOnePosition\", ò.ê. ïîçèöèÿ óæå Sell åñòü"); WriteLineInFile(FileNameOfReport,""); OpenSell=false; } } } if(OpenBuy) { if(FlagFractal=="buy") { SetBadge("Z",CurTime(),((Ask+Bid)/2)-3*Point,65,MediumVioletRed); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë OpenBuy îòìåíåí ôèëüòðîì \"DoublePosition\", ò.ê. íà ýòîì óðîâíå ïîçèöèÿ Buy óæå åñòü"); OpenBuy=false; WriteLineInFile(FileNameOfReport,""); } else WriteLineInFile(FileNameOfReport,""); } if(OpenSell) { if(FlagFractal=="sell") { SetBadge("Z",CurTime(),((Ask+Bid)/2)+3*Point,65,DodgerBlue); WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Ñèãíàë OpenSell îòìåíåí ôèëüòðîì \"DoublePosition\", ò.ê. íà ýòîì óðîâíå ïîçèöèÿ Sell óæå åñòü"); OpenSell=false; WriteLineInFile(FileNameOfReport,""); } else WriteLineInFile(FileNameOfReport,""); } if((OpenBuy)&&(AllowTrade)) { int resBuy,resSellStop,process1=0,mode1=ModeOpeningOfWarrants; CountOperations++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations); SetBadge("B",CurTime(),((Ask+Bid)/2)-3*Point,241,Red); if((mode1==0)||(mode1==1)) process1=2; if((mode1==2)||(mode1==3)) process1=1; while(process1>0) { if((mode1==0)||(mode1==2)) { CountOrders++; resBuy=PerformanceOpenBuy(Symbol(),Lots,5,StopLoss,TakeProfit,CountOrders +" Buy "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenBuy); if(resBuy>0) { CountBuy++;process1--;FlagFractal="buy"; size=ArrayRange(InfoOpenOrders,0); ArrayResize(InfoOpenOrders,size+1); InfoOpenOrders[size][0]=resBuy; InfoOpenOrders[size][1]=CountOrders; InfoOpenOrders[size][2]=OP_BUY; InfoOpenOrders[size][3]=NormalizeDouble(Ask,Digits); UseOfDeposit=UseOfDeposit+((NormalizeDouble(Ask,Digits)*1000)*Lots); } else { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûïîëíèòü òîðãîâûå îïåðàöèè!"); CountOrders--; break; } if(mode1==0) mode1=3; } if((mode1==1)||(mode1==3)) { CountOrders++; resSellStop=PerformanceOpenSellStop(Symbol(),Lots,(FractalDn-(Limit*Point)),5,StopLoss,TakeProfit, CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenSellStop); if(resSellStop>0) { CountSellStop++;TotalSellStop++;process1--; size=ArrayRange(InfoOpenOrders,0); ArrayResize(InfoOpenOrders,size+1); InfoOpenOrders[size][0]=resSellStop; InfoOpenOrders[size][1]=CountOrders; InfoOpenOrders[size][2]=OP_SELLSTOP; InfoOpenOrders[size][3]=NormalizeDouble((FractalDn-(Limit*Point)),Digits); } else { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü çàâåðøèòü òîðãîâûå îïåðàöèè!"); CountOrders--; break; } if(mode1==1) mode1=2; } } WriteLineInFile(FileNameOfReport,""); OpenBuy=false; } if((OpenSell)&&(AllowTrade)) { int resSell,resBuyStop,process2=0,mode2=ModeOpeningOfWarrants; CountOperations++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations); SetBadge("S",CurTime(),((Ask+Bid)/2)+7*Point,242,Blue); if((mode2==0)||(mode2==1)) process2=2; if((mode2==2)||(mode2==3)) process2=1; while(process2>0) { if((mode2==0)||(mode2==2)) { CountOrders++; resSell=PerformanceOpenSell(Symbol(),Lots,5,StopLoss,TakeProfit,CountOrders +" Sell "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenSell); if(resSell>0) { CountSell++;process2--;FlagFractal="sell"; size=ArrayRange(InfoOpenOrders,0); ArrayResize(InfoOpenOrders,size+1); InfoOpenOrders[size][0]=resSell; InfoOpenOrders[size][1]=CountOrders; InfoOpenOrders[size][2]=OP_SELL; InfoOpenOrders[size][3]=NormalizeDouble(Bid,Digits); UseOfDeposit=UseOfDeposit+((NormalizeDouble(Bid,Digits)*1000)*Lots); } else { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûïîëíèòü òîðãîâûå îïåðàöèè!"); CountOrders--; break; } if(mode2==0) mode2=3; } if((mode2==1)||(mode2==3)) { CountOrders++; resBuyStop=PerformanceOpenBuyStop(Symbol(),Lots,(FractalUp+(Limit*Point)),5,StopLoss,TakeProfit, CountOrders+" SellStop "+NameOfExpert,magicNumber,UseSoundInOperations,SoundOpenBuyStop); if(resBuyStop>0) { CountBuyStop++;TotalBuyStop++;process2--; size=ArrayRange(InfoOpenOrders,0); ArrayResize(InfoOpenOrders,size+1); InfoOpenOrders[size][0]=resBuyStop; InfoOpenOrders[size][1]=CountOrders; InfoOpenOrders[size][2]=OP_BUYSTOP; InfoOpenOrders[size][3]=NormalizeDouble(FractalUp+(Limit*Point),Digits); } else { WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü çàâåðøèòü òîðãîâûå îïåðàöèè!"); CountOrders--; break; } if(mode2==1) mode2=2; } } WriteLineInFile(FileNameOfReport,""); OpenSell=false; } if(!IsTesting()) { string com=("Äàòà: "+GetCurRusTime()); if(OpenOnlyOnDepthOfFChannel) { com=com + (" Êàíàë FChannel: "+DoubleToStr(FChannel,2)); } if(ReferenceOnChannel_HL) { com=com + (" Êàíàë ChannelHLClose: "+DoubleToStr(ChannelHLClose,2)); } Comment(com); } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int ToInformTheUser() { string InitialMsg,Msg0,Msg1,Msg2,Msg3,Msg4,Msg5,Msg6,Msg7,Msg8,Msg9,Msg10,Msg11,Msg12,Msg13,Msg14,Msg15,Msg16, Msg18,Msg19,Msg20,Msg21,Msg22,Msg23,Msg24,Msg25,Msg26,Msg27,Msg28,Msg29,Msg30,Msg31,Msg32,Msg33,Msg34, Msg35,Msg36,Msg37,Msg38,Msg39,Msg40,Msg41,Msg42,Msg43,Msg44,Msg45,Msg46,Msg47,Msg48,Msg49,Msg50,Msg51,Msg52, Msg53,Msg54,Msg55,Msg56,Msg57,Msg58,Msg59; if(IsDemo()) { Msg0=" íà äåìî-ñ÷¸òå ¹"+AccountNumber(); } else { Msg0=" íà ðåàëüíîì ñ÷¸òå ¹"+AccountNumber(); } Msg1=("Ýêñïåðò "+NameOfExpert+" íà÷èíàåò ñâîþ ðàáîòó"+Msg0+" ñî ñëåäóþùèìè âõîäíûìè ïàðàìåòðàìè: "+"\n"); Msg2=(""+"\n"); Msg3=("Èíôîðìàöèÿ î ñ÷¸òå:"+"\n"); Msg4=(""+"\n"); Msg5=("Íàçâàíèå áðîêåðñêîé êàìïàíèè: "+" "+AccountCompany()+"\n"); Msg6=("Íàèìåíîâàíèå âëàäåëüöà ñ÷¸òà: "+AccountName()+"\n"+"\n"); Msg7=("Íîìåð ñ÷¸òà ó áðîêåðà: "+AccountNumber()+" "); Msg8=("Âàëþòà ñ÷¸òà: "+AccountCurrency()+" "); Msg9=("Êðåäèòíîå ïëå÷î: 1 ê "+AccountLeverage()+"\n"); Msg10=(""+"\n"); Msg11=("Âàø äåïîçèò: "+""+DoubleToStr(AccountBalance(),2)+" "); Msg12=("Òåêóùèé áàëàíñ (ñðåäñòâà): "+""+DoubleToStr(AccountEquity(),2)+" "); if(AccountMargin()!=0) Msg13=("Çàëîã: "+""+DoubleToStr(AccountMargin(),2)+" "); else Msg13=""; Msg14=("Ñâîáîäíûå ñðåäñòâà: "+""+DoubleToStr(AccountFreeMargin(),2)+"\n"); if(AccountMargin()!=0) Msg15=("Íåðåàëèçîâàííàÿ ïðèáûëü/óáûòîê: "+""+DoubleToStr(AccountProfit(),2) +"\n"); else Msg15=""; Msg16=(""+"\n"); Msg18=("Âõîäíûå ïàðàìåòðû:"+"\n"); Msg19=(""+"\n"); Msg20=("Lots: "+" "+DoubleToStr(Lots,1)+(" (Ðàçìåð ëîòà)")+"\n"); Msg21=("TakeProfit: "+" "+TakeProfit+(" (Îáùèé óðîâåíü ôèêñàöèè ïðèáûëè)")+"\n"); Msg22=("StopLoss: "+" "+StopLoss+(" (Îáùèé óðîâåíü ôèêñàöèè óáûòêà)")+"\n"); Msg23=("Limit: "+" "+Limit +(" (Âåëè÷èíà, íà êîòîðóþ, âûøå èëè íèæå óðîâíÿ ôðàêòàëà, âûñòàâëÿþòñÿ îòëîæåííûå îðäåðà)")+"\n"); Msg24=("ProfitLevel: "+" "+ProfitLevel+(" (Óðîâåíü ïðèáûëè, ïðè êîòîðîì çàêðûâàþòñÿ âñå îðäåðà)")+"\n"); Msg25=(""+"\n"); Msg26=("ModeOpeningOfWarrants: "+ModeOpeningOfWarrants+" (Ðåæèì îòêðûòèÿ îðäåðîâ)"+"\n"); Msg27=("ModeClosingOfWarrants: "+" "+ModeClosingOfWarrants+" (Ðåæèì çàêðûòèÿ îðäåðîâ)"+"\n"); Msg28=(""+"\n"); if(OpenOnlyOnDepthOfFChannel) { Msg29="Äà"; Msg31=("DepthOfFChannel: "+" "+DepthOfFChannel +" (Ãëóáèíà îòêðûòèÿ ïîçèöèé, â ïðîöåíòàõ ôðàêòàëüíîãî êàíàëà)"+"\n"); } else { Msg29="Íåò";Msg31=""; } Msg30=("OpenOnlyOnDepthOfFChannel: "+" "+Msg29+" (Îòêðûâàòüñÿ òîëüêî íà ãëóáèíå ôðàêòàëüíîãî êàíàëà)"+"\n"); if(ReferenceOnChannel_HL) { Msg32="Äà"; Msg34=("LevelOrientationOnChannel_HL: "+" "+LevelOrientationOnChannel_HL+" (Óðîâåíü îðåèíòàöèè â ïðîöåíòàõ îò êàíàëà High-Low)"+"\n"); } else { Msg32="Íåò";Msg34=""; } Msg33=("ReferenceOnChannel_HL: "+" "+Msg32+" (Ðàçðåøàòü ñîâåòíèêó îðåèíòèðîâàòüñÿ íà êàíàë High-Low)"+"\n"); if(ToTradeInFlat) { Msg35="Äà"; Msg37=""; } else { Msg35="Íåò"; Msg37=("LevelChannel_HLForFlat: "+" "+LevelChannel_HLForFlat+" (Óðîâåíü êàíàëà High-Low, ïðè êîòîðîì òåíäåíöèÿ ñ÷èòàåòñÿ ôëýòîì)"+"\n"); } Msg36=("ToTradeInFlat: "+" "+Msg35+" (Ðàçðåøàòü ñîâåòíèêó òîðãîâàòü âî ôëýòå)"+"\n"); if(UseWPRInClosePositions) { Msg38="Äà"; Msg40=("ControlLevelWPR: "+" "+ControlLevelWPR+" (Êîíòðîëüíûé óðîâåíü èíäèêàòîðà WPR)"+"\n"); } else { Msg38="Íåò";Msg40=""; } Msg39=("UseWPRInClosePositions: "+" "+Msg38+" (Èñïîëüçîâàòü èíäèêàòîð WPR â ïðèíÿòèè ðåøåíèÿ î çàêðûòèè îðäåðîâ)"+"\n"); if(ToExposeContrwarrants) { Msg41="Äà"; } else { Msg41="Íåò"; } Msg42=("ToExposeContrwarrants: "+" "+Msg41+" (Âûñòàâëÿòü êîíòðîðäåðà ïðè ñðàáàòûâàíèè îòëîæåííûõ îðäåðîâ)"+"\n"); Msg43=(""+"\n"); if(DeleteLogsOnClose) { Msg56="Äà"; } else { Msg56="Íåò"; } Msg59=("DeleteLogsOnClose: "+" "+Msg56+" (Ñòèðàòü âñå log-ôàéëû ñîçäàâàåìûå òåðìèíàëîì è òåñòåðîì)"+"\n"); if(EraseOldFileOfReport) { Msg44="Äà"; Msg47=("-- Âíèìàíèå! Åñëè óêàçàííûé ôàéë ïðîòîêîëà óæå ñóæåñòâóåò, îí áóäåò ñò¸ðò! --"+"\n"); } else { Msg44="Íåò"; Msg47=("-- Âíèìàíèå! Åñëè óêàçàííûé ôàéë ïðîòîêîëà óæå ñóæåñòâóåò, â íåãî áóäåò ïðîäîëæåíà çàïèñü! --"+"\n"); } Msg45=("EraseOldFileOfReport: "+" "+Msg44+" (Ñòèðàòü ñòàðûé ôàéë ïðîòîêîëà, åñëè ôàéë óæå ñóùåñòâóåò)"+"\n"); //---- if(StringLen(FileNameOfReport)==0) {//14 Msg46=("FileNameOfReport: "+""+"Íå óêàçàíî íàçâàíèå ôàéëà ïðîòîêîëà. Áóäåò èñïîëüçîâàíî íàçâàíèå Report"+Symbol()+Period()+"\n"); } else { Msg46=("FileNameOfReport: "+" "+FileNameOfReport+" (Íàçâàíèå ôàéëà ïðîòîêîëà)"+"\n"); } Msg48=(""+"\n"); if(UseSoundInOperations) { Msg49="Äà"; if(StringLen(SoundOpenBuy)==0) SoundOpenBuy=""; if(StringLen(SoundOpenSell)==0) SoundOpenSell=""; if(StringLen(SoundOpenBuyStop)==0) SoundOpenBuyStop=""; if(StringLen(SoundOpenSellStop)==0) SoundOpenSellStop=""; if(StringLen(SoundClosing)==0) SoundClosing=""; if(StringLen(CheckSoundFileName(SoundOpenBuy))==0) { Msg51=("SoundOpenBuy: "+" "+SoundOpenBuy+" (Çâóê ïðè îòêðûòèè îðäåðà Buy)"+"\n"); } else { Msg51=("SoundOpenBuy: "+" "+CheckSoundFileName(SoundOpenBuy)+" Çâóêà äëÿ Buy íå áóäåò."+"\n"); } if(StringLen(CheckSoundFileName(SoundOpenSell))==0) { Msg52=("SoundOpenSell: "+" "+SoundOpenSell+" (Çâóê ïðè îòêðûòèè îðäåðà Sell)"+"\n"); } else { Msg52=("SoundOpenSell: "+" "+CheckSoundFileName(SoundOpenSell)+" Çâóêà äëÿ Sell íå áóäåò."+"\n"); } if(StringLen(CheckSoundFileName(SoundOpenBuyStop))==0) { Msg53=("SoundOpenBuyStop: "+" "+SoundOpenBuyStop+" (Çâóê ïðè îòêðûòèè îðäåðà BuyStop)"+"\n"); } else { Msg53=("SoundOpenBuyStop: "+" "+CheckSoundFileName(SoundOpenBuyStop)+" Çâóêà äëÿ BuyStop íå áóäåò."+"\n"); } if(StringLen(CheckSoundFileName(SoundOpenSellStop))==0) { Msg54=("SoundOpenSellStop: "+" "+SoundOpenSellStop+" (Çâóê ïðè îòêðûòèè îðäåðà SellStop)"+"\n"); } else { Msg54=("SoundOpenSellStop: "+" "+CheckSoundFileName(SoundOpenSellStop)+" Çâóêà äëÿ SellStop íå áóäåò."+"\n"); } if(StringLen(CheckSoundFileName(SoundClosing))==0) { Msg55=("SoundClosing: "+" "+SoundClosing+" (Çâóê ïðè çàêðûòèè âñåõ îðäåðîâ)"+"\n"); } else { Msg55=("SoundClosing: "+" "+CheckSoundFileName(SoundClosing)+" Çâóêà äëÿ Close íå áóäåò."+"\n"); } } else { Msg49="Íåò";Msg51="";Msg52="";Msg53="";Msg54="";Msg55=""; } Msg50=("UseSoundInOperations: "+" "+Msg49+" (Èñïîëüçîâàòü çâóêîâîå ñîïðîâîæäåíèå òîðãîâûõ îïåðàöèé)"+"\n"); Msg57=(""+"\n"); Msg58=("Åñëè Âàñ óñòðàèâàþò âõîäíûå ïàðàìåòðû ñîâåòíèêà íàæìèòå êíîïêó \" Îê \" è ïðîãðàììà ïðîäîëæèò ñâîþ"+"\n"+"ðàáîòó, èíà÷å íàæìèòå êíîïêó \" Îòìåíà \"."+"\n"); //---- InitialMsg=Msg1+Msg2+Msg3+Msg4+Msg5+Msg6+Msg7+Msg8+Msg9+Msg10+Msg11+Msg12+Msg13+Msg14 +Msg15+Msg16+Msg18+Msg19+Msg20+Msg21+Msg22+Msg23+Msg24+Msg25+Msg26+Msg27+Msg28 +Msg30+Msg31+Msg33+Msg34+Msg36+Msg37+Msg39+Msg40+Msg42+Msg43+Msg59+Msg45+Msg46+Msg47+Msg48 +Msg50+Msg51+Msg52+Msg53+Msg54+Msg55+Msg57+Msg58; //---- return(MessageBoxA(WindowHandle(Symbol(),0),InitialMsg,"Íà÷àëüíûå ïàðàìåòðû ýêïåðòà "+NameOfExpert,65)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string CheckSoundFileName(string SoundFileName) { if(StringLen(SoundFileName)==0) { return("Íå óêàçàíî èìÿ ôàéëà çâóêîâîãî ñîïðîâîæäåíèÿ."); } else if((StringFind(SoundFileName,".wav",0))!=(StringLen(SoundFileName)-4)) { return("Íåâåðíî óêàçàíî èìÿ ôàéëà çâóêîâîãî ñîïðîâîæäåíèÿ."); } else if(!jFileExists(jGetCurrDir()+"\sounds"+CharToStr(92)+SoundFileName)) { return("Óêàçàííûé ôàéë íå ñóùåñòâóåò â êàòàëîãå ..\sounds."); } else { return(""); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int InfoByOpenOrders() { string Msg1,Msg2,Msg3,Msg4,Msg5,Msg6,Msg7,Msg8,Msg9,Msg10,Msg11,Msg12,OutString; //---- Msg1=("Âíèìàíèå! Ïî òåêóùåìó èíñòðóìåíòó "+Symbol()+" ó Âàñ èìåþòñÿ ñëåäóþùèå îòêðûòûå îðäåðà:"+"\n"); Msg2=(""+"\n"); if(CalculationOfWarrants(Symbol(),0,0,0)>0) { Msg3=(" BUY - "+""+CalculationOfWarrants(Symbol(),0,0,0)+" "); } else Msg3=""; if(CalculationOfWarrants(Symbol(),0,1,0)>0) { Msg4=(" SELL - "+""+CalculationOfWarrants(Symbol(),0,1,0)+" "); } else Msg4=""; if(CalculationOfWarrants(Symbol(),0,2,0)>0) { Msg5=(" BUYLIMIT - "+""+CalculationOfWarrants(Symbol(),0,2,0)+" "); } else Msg5=""; if(CalculationOfWarrants(Symbol(),0,3,0)>0) { Msg6=(" SELLLIMIT - "+""+CalculationOfWarrants(Symbol(),0,3,0)+" "); } else Msg6=""; if(CalculationOfWarrants(Symbol(),0,4,0)>0) { Msg7=(" BUYSTOP - "+""+CalculationOfWarrants(Symbol(),0,4,0)+" "); } else Msg7=""; if(CalculationOfWarrants(Symbol(),0,5,0)>0) { Msg8=(" SELLSTOP - "+""+CalculationOfWarrants(Symbol(),0,5,0)+" "); } else Msg8=""; Msg9=(""+"\n"); Msg10=("Ñîâåòíèê íå áóäåò êàñàòüñÿ â ñâîåé ðàáîòå ýòèõ îðäåðîâ, åñëè òîëüêî ýòè îðäåðà íå áûëè" +"\n"+"îòêðûòû ðàíåå ýòèì æå ñîâåòíèêîì. Îäíàêî, âî èçáåæàíèè èñêàæåíèÿ ðåçóëüòàòîâ ðàáîòû" +"\n"+"ñîâåòíèêà, íàñòîÿòåëüíî ðåêîìåíäóåì çàêðûòü âñå îòêðûòûå îðäåðà!"+"\n"); Msg11=(""+"\n"); Msg12=("Âû ìîæåòå çàâåðøèòü ðàáîòó ñîâåòíèêà è çàêðûòü âûøå óêàçàííûå îðäåðà. Äëÿ ïðîäîëæå-" +"\n"+"íèÿ ðàáîòû ñîâåòíèêà, çàéäèòå â åãî ñâîéñòâà è ñíèìèòå, à çàòåì âíîâü ïîñòàâüòå ãàëî÷êó" +"\n"+"íà ïðîòèâ îïöèè \" ÐÀÇÐÅØÈÒÜ ÑÎÂÅÒÍÈÊÓ ÒÎÐÃÎÂÀÒÜ \". Çàâåðøèòü ðàáîòó ñîâåòíèêà?"+"\n"); OutString=Msg1+Msg2+Msg3+Msg4+Msg5+Msg6+Msg7+Msg8+Msg9+Msg9+Msg10+Msg11+Msg12; return(MessageBoxA(WindowHandle(Symbol(),0),OutString,"Èìåþòñÿ îòêðûòûå îðäåðà!",52)); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int CalculationOfWarrants(string NameOfToll,int UniqueMagic,int Index1,int Index2) { int Inform[9][2],Zero[9][2];int n=0; ArrayCopy(Inform,Zero,0,0,WHOLE_ARRAY); bool Condition1; if(UniqueMagic==0) { Condition1=(OrderSymbol()==NameOfToll); } else { Condition1=((OrderSymbol()==NameOfToll)&&(OrderMagicNumber()==UniqueMagic)); } for(n=OrdersTotal()-1;n>=0;n--) { OrderSelect(n,SELECT_BY_POS,MODE_TRADES); if (Condition1) { if(OrderType()==0) {Inform[0][0]=Inform[0][0]+1;Inform[0][1]=Inform[0][1]+OrderProfit();} if(OrderType()==1) {Inform[1][0]=Inform[1][0]+1;Inform[1][1]=Inform[1][1]+OrderProfit();} if(OrderType()==2) {Inform[2][0]=Inform[2][0]+1;} if(OrderType()==3) {Inform[3][0]=Inform[3][0]+1;} if(OrderType()==4) {Inform[4][0]=Inform[4][0]+1;} if(OrderType()==5) {Inform[5][0]=Inform[5][0]+1;} } } Inform[6][0]=Inform[0][0]+Inform[1][0]; Inform[6][1]=Inform[0][1]+Inform[1][1]; Inform[7][0]=Inform[2][0]+Inform[3][0]+Inform[4][0]+Inform[5][0]; Inform[8][0]=Inform[0][0]+Inform[1][0]+Inform[2][0]+Inform[3][0] +Inform[4][0]+Inform[5][0]; return(Inform[Index1][Index2]); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void WriteLineInFile(string FileName,string Line) { int HFile=FileOpen(FileName,FILE_READ|FILE_WRITE," "); if(HFile>0) { FileSeek(HFile,0,SEEK_END); FileWrite(HFile,Line); FileFlush(HFile); FileClose(HFile); } return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string GetCurRusTime() { string StrMonth="",StrDay="",StrHour="",StrMinute="",StrSeconds=""; RefreshRates(); 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+" "); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void SetBadge(string BadgeName, datetime BadgeTime, double BadgePrice,int BadgeType,color BadgeColor) { string Name=BadgeName+CurTime(); if(PrevPrice>0) { if(((BadgePrice-PrevPrice)>=0*Point)&&((BadgePrice-PrevPrice)<3*Point)) BadgePrice=BadgePrice+3*Point; if(((PrevPrice-BadgePrice)>=0*Point)&&((PrevPrice-BadgePrice)<3*Point)) BadgePrice=BadgePrice-3*Point; } ObjectCreate(Name,OBJ_ARROW,0,BadgeTime,BadgePrice); ObjectSet(Name,OBJPROP_ARROWCODE,BadgeType); ObjectSet(Name,OBJPROP_COLOR,BadgeColor); PrevPrice=BadgePrice; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool DrawChannel(string NaneChannel,double Upper=0,double Down=0,double SubUp=0,double SubDn=0,double Average=0) { bool res[11]; if(NaneChannel=="FChannel") { if(ObjectFind(NaneChannel+"H")>0) ObjectDelete(NaneChannel+"H"); ObjectCreate(NaneChannel+"H", OBJ_HLINE, 0, Time[0],Close[0]); ObjectSet(NaneChannel+"H",OBJPROP_COLOR,Pink); if(ObjectFind(NaneChannel+"L")>0) ObjectDelete(NaneChannel+"L"); ObjectCreate(NaneChannel+"L", OBJ_HLINE, 0, Time[0],Close[0]); ObjectSet(NaneChannel+"L",OBJPROP_COLOR,SkyBlue); if(ObjectFind(NaneChannel+"SH")>0) ObjectDelete(NaneChannel+"SH"); ObjectCreate(NaneChannel+"SH",OBJ_RECTANGLE,0 ,0,0,0,0); ObjectSet(NaneChannel+"SH",OBJPROP_COLOR,Pink); if(ObjectFind(NaneChannel+"LH")>0) ObjectDelete(NaneChannel+"LH"); ObjectCreate(NaneChannel+"LH",OBJ_RECTANGLE,0 ,0,0,0,0); ObjectSet(NaneChannel+"LH",OBJPROP_COLOR,SkyBlue); } if(NaneChannel=="ChannelHLClose") { if(ObjectFind(NaneChannel+"H")>0) ObjectDelete(NaneChannel+"H"); ObjectCreate(NaneChannel+"H", OBJ_HLINE, 0, Time[0],Close[0]); ObjectSet(NaneChannel+"H",OBJPROP_COLOR,HotPink); if(ObjectFind(NaneChannel+"L")>0) ObjectDelete(NaneChannel+"L"); ObjectCreate(NaneChannel+"L", OBJ_HLINE, 0, Time[0],Close[0]); ObjectSet(NaneChannel+"L",OBJPROP_COLOR,RoyalBlue); if(ObjectFind(NaneChannel+"M")>0) ObjectDelete(NaneChannel+"M"); ObjectCreate(NaneChannel+"M", OBJ_HLINE, 0, Time[0],Close[0]); ObjectSet(NaneChannel+"M",OBJPROP_COLOR,Gold); if(ObjectFind(NaneChannel+"SH")>0) ObjectDelete(NaneChannel+"SH"); ObjectCreate(NaneChannel+"SH",OBJ_RECTANGLE,0 ,0,0,0,0); ObjectSet(NaneChannel+"SH",OBJPROP_COLOR,HotPink); if(ObjectFind(NaneChannel+"LH")>0) ObjectDelete(NaneChannel+"LH"); ObjectCreate(NaneChannel+"LH",OBJ_RECTANGLE,0 ,0,0,0,0); ObjectSet(NaneChannel+"LH",OBJPROP_COLOR,RoyalBlue); } if((NaneChannel=="FChannel")||(NaneChannel=="ChannelHLClose")) { res[0]=ObjectSet(NaneChannel+"H",OBJPROP_PRICE1,Upper); res[1]=ObjectSet(NaneChannel+"L",OBJPROP_PRICE1,Down); if(Average>0) { res[2]=ObjectSet(NaneChannel+"M",OBJPROP_PRICE1,Average); } else { res[2]=true; } res[3]=ObjectSet(NaneChannel+"SH",OBJPROP_TIME1,CurTime()); res[4]=ObjectSet(NaneChannel+"SH",OBJPROP_PRICE1,SubUp); res[5]=ObjectSet(NaneChannel+"SH",OBJPROP_TIME2,CurTime()-(5760*Period())); res[6]=ObjectSet(NaneChannel+"SH",OBJPROP_PRICE2,Upper); res[7]=ObjectSet(NaneChannel+"LH",OBJPROP_TIME1,CurTime()); res[8]=ObjectSet(NaneChannel+"LH",OBJPROP_PRICE1,Down); res[9]=ObjectSet(NaneChannel+"LH",OBJPROP_TIME2,CurTime()-(5760*Period())); res[10]=ObjectSet(NaneChannel+"LH",OBJPROP_PRICE2,SubDn); ObjectsRedraw(); } if(res[0]&&res[1]&&res[2]&&res[3]&&res[4]&&res[5]&&res[6]&&res[7]&&res[8]&&res[9]&&res[10]) return(true);else return(false); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int PerformanceOpenBuy(string Toll,double SizeOfLot,int Accuracy,int FixingOfLoss, int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="") { double OpenPrice=0,SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime(); while(ticket<=0) { while(!IsTradeAllowed()) Sleep(1000); RefreshRates(); OpenPrice=NormalizeDouble(Ask,Digits); SL=OpenPrice - FixingOfLoss * Point; TP=OpenPrice + FixingOfProfit * Point; ticket=OrderSend(Toll,OP_BUY,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,Gold); if(ticket>0) { if(!IsTesting()) { if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound); } index=StringFind(Note," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îòêðûòà ïîçèöèÿ Buy òèêåò " +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" ïî öåíå: "+DoubleToStr(OpenPrice,Digits)); Sleep(5000); return(ticket); } else { err=GetLastError();attempt++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü îòêðûòü îðäåð Buy, ïðè÷èíà: " +ErrorDescription(err)); Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS) +" Íå óäàëîñü îòêðûòü îðäåð Buy, ïðè÷èíà: "+ErrorDescription(err)); if((err==135)&&(Accuracy<11)) Accuracy++; if(((CurTime()-InitialTime)>180)||(attempt==10)) break; Sleep(1000); } } return(-1); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int PerformanceOpenSell(string Toll,double SizeOfLot,int Accuracy,int FixingOfLoss, int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="") { double OpenPrice=0,SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime(); while(ticket<=0) { while(!IsTradeAllowed()) Sleep(1000); RefreshRates(); OpenPrice=NormalizeDouble(Bid,Digits); SL=OpenPrice + StopLoss * Point; TP=OpenPrice - TakeProfit * Point; ticket=OrderSend(Toll,OP_SELL,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,DeepSkyBlue); if(ticket>0) { if(!IsTesting()) { if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound); } index=StringFind(Note," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Îòêðûòà ïîçèöèÿ Sell òèêåò " +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" ïî öåíå: "+DoubleToStr(OpenPrice,Digits)); Sleep(5000); return(ticket); } else { err=GetLastError();attempt++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü îòêðûòü îðäåð Sell, ïðè÷èíà: " +ErrorDescription(err)); Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS) +" Íå óäàëîñü îòêðûòü îðäåð Sell, ïðè÷èíà: "+ErrorDescription(err)); if((err==135)&&(Accuracy<11)) Accuracy++; if(((CurTime()-InitialTime)>180)||(attempt==10)) break; Sleep(1000); } } return(-1); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int PerformanceOpenBuyStop(string Toll,double SizeOfLot,double OpenPrice,int Accuracy,int FixingOfLoss, int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="") { double SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime(); while(ticket<=0) { while(!IsTradeAllowed()) Sleep(1000); RefreshRates(); OpenPrice=NormalizeDouble(OpenPrice,Digits); SL=OpenPrice - FixingOfLoss * Point; TP=OpenPrice + FixingOfProfit * Point; ticket=OrderSend(Toll,OP_BUYSTOP,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,Orange); if(ticket>0) { if(!IsTesting()) { if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound); } index=StringFind(Note," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Âûñòàâëåí îðäåð BuyStop òèêåò " +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" íà îòìåòêó: "+DoubleToStr(OpenPrice,Digits)); Sleep(5000); return(ticket); } else { err=GetLastError();attempt++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îðäåð BuyStop, ïðè÷èíà: " +ErrorDescription(err)); Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS) +"Íå óäàëîñü âûñòàâèòü îðäåð BuyStop, ïðè÷èíà: "+ErrorDescription(err)); if((err==135)&&(Accuracy<11)) Accuracy++; if(((CurTime()-InitialTime)>180)||(attempt==10)) break; Sleep(1000); } } return(-1); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int PerformanceOpenSellStop(string Toll,double SizeOfLot,double OpenPrice,int Accuracy,int FixingOfLoss, int FixingOfProfit,string Note,int UniqueNumber,bool UseSound=false,string NameOfSound="") { double SL=0,TP=0;int ticket=0,index=0,err=0,attempt=0;datetime InitialTime=CurTime(); while(ticket<=0) { while(!IsTradeAllowed()) Sleep(1000); RefreshRates(); OpenPrice=NormalizeDouble(OpenPrice,Digits); SL=OpenPrice + StopLoss * Point; TP=OpenPrice - TakeProfit * Point; ticket=OrderSend(Toll,OP_SELLSTOP,SizeOfLot,OpenPrice,Accuracy,SL,TP,Note,UniqueNumber,0,Blue); if(ticket>0) { if(!IsTesting()) { if((UseSound)&&(CheckSoundFileName(NameOfSound)=="")) PlaySound(NameOfSound); } index=StringFind(Note," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Âûñòàâëåí îðäåð SellStop òèêåò " +ticket+" âíóòðåííèé ¹ "+StringSubstr(Note,0,index)+" íà îòìåòêó: "+DoubleToStr(OpenPrice,Digits)); Sleep(5000); return(ticket); } else { err=GetLastError();attempt++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Íå óäàëîñü âûñòàâèòü îðäåð SellStop, ïðè÷èíà: " +ErrorDescription(err)); Print(TimeToStr(CurTime(),TIME_SECONDS)+" InitialTime: "+TimeToStr(InitialTime,TIME_SECONDS) +"Íå óäàëîñü âûñòàâèòü îðäåð SellStop, ïðè÷èíà: "+ErrorDescription(err)); if((err==135)&&(Accuracy<11)) Accuracy++; if(((CurTime()-InitialTime)>180)||(attempt==10)) break; Sleep(1000); } } return(-1); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void CloseAllPositions(string NameOfToll,int UniqueMagic,int ModeClosing) { bool WorkWarrant=false,PostWarrant=false,result=false; int attempt,cnt,index=0,NumberOfTry=2,PauseAfterError=1; double TimeProfit; datetime InitTime=CurTime(); //---- if(ModeClosing==0) {WorkWarrant=true;PostWarrant=true;} if(ModeClosing==1) {WorkWarrant=true;PostWarrant=false;} if(ModeClosing==2) {WorkWarrant=false;PostWarrant=true;} CountOperations++; WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Òîðãîâàÿ îïåðàöèÿ ¹"+CountOperations); while(OrdersTotal()>0) { for(cnt=OrdersTotal()-1;cnt>=0;cnt--) { result=false; TimeProfit=0; if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==NameOfToll)&&(OrderMagicNumber()==UniqueMagic)) { for(attempt=0;attempt<NumberOfTry;attempt++) { RefreshRates(); while(!IsTradeAllowed()) Sleep(2000); if((OrderType()==0)&&WorkWarrant) { TimeProfit=OrderProfit(); result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),5,Yellow); if (result) { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Çàêðûòà ïîçèöèÿ Buy òèêåò "+OrderTicket() +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ïî öåíå: " +DoubleToStr(OrderClosePrice(),Digits)); CollectorBuy=CollectorBuy+TimeProfit; Sleep(2000); break; } else { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime() +" Îðäåð Buy òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); Alert(" Îðäåð Buy òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); if(ModeClosing==1) {PostWarrant=true;} Sleep(1000*PauseAfterError); } } if((OrderType()==1)&&WorkWarrant) { TimeProfit=OrderProfit(); result=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),5,Blue ); if (result) { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Çàêðûòà ïîçèöèÿ Sell òèêåò "+OrderTicket() +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ïî öåíå: " +DoubleToStr(OrderClosePrice(),Digits)); CollectorSell=CollectorSell+TimeProfit; Sleep(2000); break; } else { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime() +" Îðäåð Sell òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); Alert(" Îðäåð Sell òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); if(ModeClosing==1) {PostWarrant=true;} Sleep(1000*PauseAfterError); } } if((OrderType()==2)&&PostWarrant) { result=OrderDelete(OrderTicket()); if (result) { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð BuyLimit òèêåò "+OrderTicket() +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: " +DoubleToStr(OrderOpenPrice(),Digits)); Sleep(2000); break; } else { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime() +" Îðäåð BuyLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); Alert(" Îðäåð BuyLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); if(ModeClosing==1) {PostWarrant=true;} Sleep(1000*PauseAfterError); } } if((OrderType()==3)&&PostWarrant) { result=OrderDelete(OrderTicket()); if (result) { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð SellLimit òèêåò "+OrderTicket() +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: " +DoubleToStr(OrderOpenPrice(),Digits)); Sleep(2000); break; } else { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime() +" Îðäåð SellLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); Alert(" Îðäåð SellLimit òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); if(ModeClosing==1) {PostWarrant=true;} Sleep(1000*PauseAfterError); } } if((OrderType()==4)&&PostWarrant) { result=OrderDelete(OrderTicket()); if (result) { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð BuyStop òèêåò "+OrderTicket() +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: " +DoubleToStr(OrderOpenPrice(),Digits)); Sleep(2000); break; } else { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime() +" Îðäåð BuyStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); Alert(" Îðäåð BuyStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); if(ModeClosing==1) {PostWarrant=true;} Sleep(1000*PauseAfterError); } } if((OrderType()==5)&&PostWarrant) { result=OrderDelete(OrderTicket()); if (result) { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime()+"Óäàë¸í îðäåð SellStop òèêåò "+OrderTicket() +" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index)+" ñ îòìåòêè: " +DoubleToStr(OrderOpenPrice(),Digits)); Sleep(2000); break; } else { index=StringFind(OrderComment()," ", 0); WriteLineInFile(FileNameOfReport,GetCurRusTime() +" Îðäåð SellStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); Alert(" Îðäåð SellStop òèêåò "+OrderTicket()+" âíóòðåííèé ¹ "+StringSubstr(OrderComment(),0,index) +" íå óäàëîñü çàêðûòü. Ïðè÷èíà: "+ErrorDescription(GetLastError())+" Ïîïûòêà ¹"+attempt+1); if(ModeClosing==1) {PostWarrant=true;} Sleep(1000*PauseAfterError); } } } if((ModeClosing==1)&&(CalculationOfWarrants(NameOfToll,UniqueMagic,6,0)==0)) {PostWarrant=true;} if((ModeClosing==2)&&(CalculationOfWarrants(NameOfToll,UniqueMagic,7,0)==0)) {WorkWarrant=true;cnt=OrdersTotal();} } } else { switch(OrderType()) {//0 case 0: WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Íå óäàëîñü âûáðàòü îðäåð Buy ¹ "+OrderTicket() +" Ïðè÷èíà: "+ErrorDescription(GetLastError())); Alert("Íå óäàëîñü âûáðàòü îðäåð Buy ¹ ",OrderTicket(), " Ïðè÷èíà: ",ErrorDescription(GetLastError())); break; case 1: WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Íå óäàëîñü âûáðàòü îðäåð Sell ¹ "+OrderTicket() +" Ïðè÷èíà: "+ErrorDescription(GetLastError())); Alert("Íå óäàëîñü âûáðàòü îðäåð Sell ¹ ",OrderTicket(), " Ïðè÷èíà: ",ErrorDescription(GetLastError())); break; case 2: WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Íå óäàëîñü âûáðàòü îðäåð BuyLimit ¹ "+OrderTicket() +" Ïðè÷èíà: "+ErrorDescription(GetLastError())); Alert("Íå óäàëîñü âûáðàòü îðäåð BuyLimit ¹ ",OrderTicket(), " Ïðè÷èíà: ",ErrorDescription(GetLastError())); break; case 3: WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Íå óäàëîñü âûáðàòü îðäåð SellLimit ¹ "+OrderTicket() +" Ïðè÷èíà: "+ErrorDescription(GetLastError())); Alert("Íå óäàëîñü âûáðàòü îðäåð SellLimit ¹ ",OrderTicket(), " Ïðè÷èíà: ",ErrorDescription(GetLastError())); break; case 4: WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Íå óäàëîñü âûáðàòü îðäåð BuyStop ¹ "+OrderTicket() +" Ïðè÷èíà: "+ErrorDescription(GetLastError())); Alert("Íå óäàëîñü âûáðàòü îðäåð BuyStop ¹ ",OrderTicket(), " Ïðè÷èíà: ",ErrorDescription(GetLastError())); break; case 5: WriteLineInFile(FileNameOfReport,GetCurRusTime() +"Íå óäàëîñü âûáðàòü îðäåð SellStop ¹ "+OrderTicket() +" Ïðè÷èíà: "+ErrorDescription(GetLastError())); Alert("Íå óäàëîñü âûáðàòü îðäåð SellStop ¹ ",OrderTicket(), " Ïðè÷èíà: ",ErrorDescription(GetLastError())); break; }//0 } } } TimeOfClosing=CurTime()-InitTime; WriteLineInFile(FileNameOfReport,""); return; } //+------------------------------------------------------------------+
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
Indicator Curves created:
Indicators Used:
Larry William percent range indicator
Fractals
Custom Indicators Used:
user32
Registr
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
Other Features:
It issuies visual alerts to the screen
It plays sound alerts
Uses files from the file system
It writes information to file