//+------------------------------------------------------------------+ //| Laptrend_1.mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| Ìîñêîâöåâ Ñåðãåé sergomsk@mail.ru //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+- // Îïèñàíèå ãëîáàëüíûõ ïåðåìåííûõ extern double Lots =0.0; // Êîëè÷åñòâî ëîòîâ extern int Percent =0; // Ïðîöåíò âûäåëåííûõ ñðåäñòâ extern int StopLoss =100; // StopLoss äëÿ íîâûõ îðäåðîâ (ïóíêòîâ) extern int TakeProfit =40; // TakeProfit äëÿ íîâûõ îðäåðîâ (ïóíêòîâ) extern int TralingStop=100; // TralingStop äëÿ ðûíî÷íûõ îðäåðîâ (ïóíê) extern int Parol=12345; // Ïàðîëü äëÿ ðàáîòû íà ðåàëüíîì ñ÷¸òå extern double Delta=7; //Ñêâàæíîñòü ADX static bool SHUp, SHD, SMUp, SMD, FUp, FD, FclUp, FclD, SM1Up, SM1D; int Level_new, // Íîâîå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè Level_old, // Ïðåäûäóùåå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè Mas_Tip[6]; // Ìàññèâ òèïîâ îðäåðîâ // [] òèï îðä: 0=B,1=S,2=BL,3=SL,4=BS,5=SS double Lots_New, // Êîëè÷åñòâî ëîòîâ äëÿ íîâûõ îðäåðîâ Mas_Ord_New[31][9], // Ìàññèâ îðäåðîâ òåêóùèé .. Mas_Ord_Old[31][9]; // .. è ñòàðûé // 1é èíäåêñ = ïîðÿäêîâûé íîìåð îðäåðà // [][0] íå îïðåäåëÿåòñÿ // [][1] êóðñ îòêð. îðäåðà (àáñ.çíà÷.êóðñà) // [][2] StopLoss îðäåðà (àáñ.çíà÷.êóðñà) // [][3] TakeProfit îðäåðà (àáñ.çíà÷.êóðñà) // [][4] íîìåð îðäåðà // [][5] êîëè÷. ëîòîâ îðä. (àáñ.çíà÷.êóðñà) // [][6] òèï îðä. 0=B,1=S,2=BL,3=SL,4=BS,5=SS // [][7] ìàãè÷åñêîå ÷èñëî îðäåðà // [][8] 0/1 ôàêò íàëè÷èÿ êîììåíòàðèÿ int init() { //---- Level_old=MarketInfo(Symbol(),MODE_STOPLEVEL );//Ìèíèì. äèñòàíèöèÿ Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ SHUp=false; SHD=false; SMUp=false; SMD=false; FUp=false; FD=false; FclUp=false; FclD=false; return; // Âûõîä èç init() //---- } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- Inform(-1); // Äëÿ óäàëåíèÿ îáúåêòîâ return; // Âûõîä èç deinit() //---- } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if(Check()==false) // Åñëè óñëîâèÿ èñïîëüçîâàíèÿ.. return; // ..íå âûïîëíÿþòñÿ, òî âûõîä //PlaySound("tick.wav"); // Íà êàæäîì òèêå Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ Events(); // Èíôîðìàöèÿ î ñîáûòèÿõ Trade(Criterion()); // Òîðãîâàÿ ôóíêöèÿ Inform(0); // Äëÿ ïåðåêðàøèâàíèÿ îáúåêòîâ return; // Âûõîä èç start() //---- } //+------------------------------------------------------------------+ // Ôóíêöèÿ ïðîâåðêè ëåãàëüíîñòè èñïîëüçîâàíèÿ ïðîãðàììû // Âõîäíûå ïàðàìåòðû: // - ãëîáàëüíàÿ ïåðåìåííàÿ Parol // - ëîêàëüíàÿ êîíñòàíòà "SuperBank" // Âîçâðàùàåìûå çíà÷åíèÿ: // true - åñëè óñëîâèÿ èñïîëüçîâàíèÿ ñîáëþäåíû // false - åñëè óñëîâèÿ èñïîëüçîâàíèÿ íàðóøåíû bool Check() // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ { if (IsDemo()==true) // Åñëè ýòî äåìî-ñ÷¸ò, òî.. return(true); // .. äðóãèõ îãðàíè÷åíèé íåò if (AccountCompany()=="SuperBank") // Äëÿ êîðïîðàòèâíûõ êëèåíòîâ.. return(true); // ..ïàðîëü íå íóæåí int Key=AccountNumber()*2+1000001; // Âû÷èñëÿåì êëþ÷ if (Parol==Key) // Åñëè ïàðîëü âåðíûé, òî.. return(true); // ..ðàçðåøàåì ðàáîòó íà ðåàëå Inform(14); // Ñîîáùåíèå î íåñàíêö. ðàáîòå return(false); // Âûõîä èç ïîëüçîâ. ôóíêöèè } int Terminal() { int Qnt=0; // Ñ÷¸ò÷èê êîëè÷åñòâà îðäåðîâ ArrayCopy(Mas_Ord_Old, Mas_Ord_New);// Ñîõðàíÿåì ïðåäûäóùóþ èñòîðèþ Qnt=0; // Îáíóëåíèå ñ÷¸ò÷èêà îðäåðîâ ArrayInitialize(Mas_Ord_New,0); // Îáíóëåíèå ìàññèâà ArrayInitialize(Mas_Tip, 0); // Îáíóëåíèå ìàññèâà for(int i=0; i<OrdersTotal(); i++) // Ïî ðûíî÷í. è îòëîæ. îðäåðàì { if((OrderSelect(i,SELECT_BY_POS)==true) //Åñëè åñòü ñëåäóþù. && (OrderSymbol()==Symbol())) //.. è íàøà âàë.ïàðà { Qnt++; // Êîëè÷. îðäåðîâ Mas_Ord_New[Qnt][1]=OrderOpenPrice(); // Êóðñ îòêðûòèÿ îðä Mas_Ord_New[Qnt][2]=OrderStopLoss(); // Êóðñ SL Mas_Ord_New[Qnt][3]=OrderTakeProfit(); // Êóðñ ÒÐ Mas_Ord_New[Qnt][4]=OrderTicket(); // Íîìåð îðäåðà Mas_Ord_New[Qnt][5]=OrderLots(); // Êîëè÷åñòâî ëîòîâ Mas_Tip[OrderType()]++; // Êîë. îðäåðîâ òèïà Mas_Ord_New[Qnt][6]=OrderType(); // Òèï îðäåðà Mas_Ord_New[Qnt][7]=OrderMagicNumber(); // Ìàãè÷åñêîå ÷èñëî if (OrderComment()=="") Mas_Ord_New[Qnt][8]=0; // Åñëè íåò êîììåíò else Mas_Ord_New[Qnt][8]=1; // Åñëè åñòü êîììåíò } } Mas_Ord_New[0][0]=Qnt; // Êîëè÷. îðäåðîâ return; } //+------------------------------------------------------------------+ // Ôóíêöèÿ âûâîäà íà ýêðàí ãðàôè÷åñêèõ ñîîáùåíèé. int Inform(int Mess_Number, int Number=0, double Value=0.0) { // int Mess_Number // Íîìåð ñîîáùåíèÿ // int Number // Ïåðåäàâàåìîå öåëîå çíà÷åíèå // double Value // Ïåðåäàâàåìîå äåéñòâèò. çíà÷. int Win_ind; // Íîìåð îêíà èíäèêàòîðà string Graf_Text; // Ñòðîêà ñîîáùåíèÿ color Color_GT; // Öâåò ñòðîêè ñîîáùåíèÿ static int Time_Mess; // Âðåìÿ ïîñëåäíåé ïóáëèêàöèè ñîîáù. static int Nom_Mess_Graf; // Ñ÷¸ò÷èê ãðàôè÷åñêèõ ñîîáùåíèé static string Name_Grf_Txt[30]; // Ìàññèâ èì¸í ãðàôè÷. ñîîáùåíèé Win_ind= WindowFind("inform"); // Èùåì íîìåð îêíà èíäèêàòîðà if (Win_ind<0)return; // Åñëè òàêîãî îêíà íåò, óõîäèì if (Mess_Number==0) // Ýòî ïðîèñõîäèò â êàæäîì òèêå { if (Time_Mess==0) return; // Åñëè óæå êðàøåíî ñåðûì if (GetTickCount()-Time_Mess>15000)// Çà 15 ñåê öâåò óñòàðåë { for(int i=0;i<=29; i++) // Êðàñèì còðîêè ñåðûì ObjectSet( Name_Grf_Txt[i], OBJPROP_COLOR, Gray); Time_Mess=0; // Ôëàæîê: âñå ñòðîêè ñåðûå WindowRedraw(); // Ïåðåðèñîâûâàåì îáúåêòû } return; // Âûõîä èç ôóíêöèè } if (Mess_Number==-1) // Ýòî ïðîèñõîäèò ïðè deinit() { for(i=0; i<=29; i++) // Ïî èíäåêñàì îáúåêòîâ ObjectDelete(Name_Grf_Txt[i]);// Óäàëåíèå îáúåêòà return; // Âûõîä èç ôóíêöèè } Nom_Mess_Graf++; // Ñ÷¸ò÷èê ãðàôè÷åñêèõ ñîîáù. Time_Mess=GetTickCount(); // Âðåìÿ ïîñëåäíåé ïóáëèêàöèè Color_GT=Lime; switch(Mess_Number) // Ïåðåõîä íà ñîîáùåíèå { case 1: Graf_Text="Çàêðûò îðäåð Buy "+ Number; PlaySound("Close_order.wav"); break; case 2: Graf_Text="Çàêðûò îðäåð Sell "+ Number; PlaySound("Close_order.wav"); break; case 3: Graf_Text="Óäàë¸í îòëîæåííûé îðäåð "+ Number; PlaySound("Close_order.wav"); break; case 4: Graf_Text="Îòêðûò îðäåð Buy "+ Number; PlaySound("Ok.wav"); break; case 5: Graf_Text="Îòêðûò îðäåð Sell "+ Number; PlaySound("Ok.wav"); break; case 6: Graf_Text="Óñòàíîâëåí îòëîæåííûé îðäåð "+ Number; PlaySound("Ok.wav"); break; case 7: Graf_Text="Îðäåð "+Number+" ïðåîáðàçîâàëñÿ â ðûíî÷íûé"; PlaySound("Transform.wav"); break; case 8: Graf_Text="Ïåðåîòêðûò îðäåð "+ Number; break; PlaySound("Bulk.wav"); case 9: Graf_Text="×àñòè÷íî çàêðûò îðäåð "+ Number; PlaySound("Close_order.wav"); break; case 10: Graf_Text="Íîâàÿ ìèíèìàëüíàÿ äèñòàíöèÿ: "+ Number; PlaySound("Inform.wav"); break; case 11: Graf_Text=" Íå õâàòàåò äåíåã íà "+ DoubleToStr(Value,2) + " ëîòîâ"; Color_GT=Red; PlaySound("Oops.wav"); break; case 12: Graf_Text="Ïîïûòêà çàêðûòü îðäåð "+ Number; PlaySound("expert.wav"); break; case 13: if (Number>0) Graf_Text="Ïîïûòêà îòêðûòü îðäåð Sell.."; else Graf_Text="Ïîïûòêà îòêðûòü îðäåð Buy.."; PlaySound("expert.wav"); break; case 14: Graf_Text="Íåïðàâèëüíûé ïàðîëü. Ýêñïåðò íå ðàáîòàåò."; Color_GT=Red; PlaySound("Oops.wav"); break; case 15: switch(Number) // Ïåðåõîä íà íîìåð îøèáêè { case 2: Graf_Text="Îáùàÿ îøèáêà."; break; case 129: Graf_Text="Íåïðàâèëüíàÿ öåíà. "; break; case 135: Graf_Text="Öåíà èçìåíèëàñü. "; break; case 136: Graf_Text="Íåò öåí. Æä¸ì íîâûé òèê.."; break; case 146: Graf_Text="Ïîäñèñòåìà òîðãîâëè çàíÿòà";break; case 5 : Graf_Text="Ñòàðàÿ âåðñèÿ òåðìèíàëà."; break; case 64: Graf_Text="Ñ÷åò çàáëîêèðîâàí."; break; case 133: Graf_Text="Òîðãîâëÿ çàïðåùåíà"; break; default: Graf_Text="Âîçíèêëà îøèáêà " + Number;//Äðóãèå } Color_GT=Red; PlaySound("Error.wav"); break; case 16: Graf_Text="Ýêñïåðò ðàáîòàåò òîëüêî íà EURUSD"; Color_GT=Red; PlaySound("Oops.wav"); break; default: Graf_Text="default "+ Mess_Number; Color_GT=Red; PlaySound("Bzrrr.wav"); } ObjectDelete(Name_Grf_Txt[29]); // 29é(âåðõíèé) îáúåêò óäàëÿåì for(i=29; i>=1; i--) // Öèêë ïî èíäåêñàì ìàññèâà .. { // .. ãðàôè÷åñêèõ îáúåêòîâ Name_Grf_Txt[i]=Name_Grf_Txt[i-1];// Ïîäíèìàåì îáúåêòû: ObjectSet( Name_Grf_Txt[i], OBJPROP_YDISTANCE, 2+15*i); } Name_Grf_Txt[0]="Inform_"+Nom_Mess_Graf+"_"+Symbol(); // Èìÿ îáúåêò ObjectCreate (Name_Grf_Txt[0],OBJ_LABEL, Win_ind,0,0);// Ñîçäà¸ì ObjectSet (Name_Grf_Txt[0],OBJPROP_CORNER, 3 ); // Óãîë ObjectSet (Name_Grf_Txt[0],OBJPROP_XDISTANCE, 450);// Êîîðä. Õ ObjectSet (Name_Grf_Txt[0],OBJPROP_YDISTANCE, 2); // Êîîðä. Y // Òåêñòîâîå îïèñàíèå îáúåêòà ObjectSetText(Name_Grf_Txt[0],Graf_Text,10,"Courier New",Color_GT); WindowRedraw(); // Ïåðåðèñîâûâàåì âñå îáúåêòû return; } //+------------------------------------------------------------------+ // Ôóíêöèÿ ñëåæåíèÿ çà ñîáûòèÿìè. // Ãëîáàëüíûå ïåðåìåííûå: // Level_new Íîâîå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè // Level_old Ïðåäûäóùåå çíà÷åíèå ìèíèìàëüíîé äèñòàíöèè // Mas_Ord_New[31][9] Ìàññèâ îðäåðîâ ïîñëåäíèé èçâåñòíûé // Mas_Ord_Old[31][9] Ìàññèâ îðäåðîâ ïðåäûäóùèé (ñòàðûé) int Events() // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ { bool Conc_Nom_Ord; // Ñîâïàäåíèå îðäåðîâ â .. //.. ñòàðîì è íîâîì ìàññèâàõ Level_new=MarketInfo(Symbol(),MODE_STOPLEVEL );// Ïîñëåäí.èçâåñòíîå if (Level_old!=Level_new) // Íîâîå íå ðàâíî ñòàðîìó.. { // çíà÷èò èçìåíèëèñü óñëîâèÿ Level_old=Level_new; // Íîâîå "ñòàðîå çíà÷åíèå" Inform(10,Level_new); // Ñîîáùåíèå: íîâàÿ äèñòàíö. } // Ïîèñê ïðîïàâøèõ, ïîìåíÿâøèõ òèï, ÷àñòè÷íî çàêðûòûõ è ïåðåîòêðûòûõ for(int old=1;old<=Mas_Ord_Old[0][0];old++)// Ïî ìàññèâó ñòàðûõ { // Èñõîäèì èç òîãî, ÷òî.. Conc_Nom_Ord=false; // ..îðäåðà íå ñîâïàäàþò for(int new=1;new<=Mas_Ord_New[0][0];new++)//Öèêë ïî ìàññèâó .. { //..íîâûõ îðäåðîâ if (Mas_Ord_Old[old][4]==Mas_Ord_New[new][4])// Ñîâïàë íîìåð { // Òèï îðäåðà ñòàë .. if (Mas_Ord_New[new][6]!=Mas_Ord_Old[old][6])//.. äðóãèì Inform(7,Mas_Ord_New[new][4]);// Ñîîáùåíèå: ïðåîáðàç.:) Conc_Nom_Ord=true; // Îðäåð íàéäåí, .. break; // ..çíà÷èò âûõîäèì èç .. } // .. âíóòðåííåãî öèêëà // Íå ñîâïàë íîìåð îðäåðà if (Mas_Ord_Old[old][7]>0 && // MagicNumber åñòü, ñîâïàë Mas_Ord_Old[old][7]==Mas_Ord_New[new][7])//.. ñî ñòàðûì { //çíà÷èò îí ïåðåîòêðûò èëè ÷àñòè÷íî çàêðûò // Åñëè ëîòû ñîâïàäàþò,.. if (Mas_Ord_Old[old][5]==Mas_Ord_New[new][5]) Inform(8,Mas_Ord_Old[old][4]);// ..òî ïåðåîòêðûòèå else // À èíà÷å ýòî áûëî.. Inform(9,Mas_Ord_Old[old][4]);// ..÷àñòè÷íîå çàêðûòèå Conc_Nom_Ord=true; // Îðäåð íàéäåí, .. break; // ..çíà÷èò âûõîäèì èç .. } // .. âíóòðåííåãî öèêëà } if (Conc_Nom_Ord==false) // Åñëè ìû ñþäà äîøëè,.. { // ..òî îðäåðà íåò:( if (Mas_Ord_Old[old][6]==0) Inform(1, Mas_Ord_Old[old][4]); // Îðäåð Buy çàêðûò if (Mas_Ord_Old[old][6]==1) Inform(2, Mas_Ord_Old[old][4]); // Îðäåð Sell çàêðûò if (Mas_Ord_Old[old][6]> 1) Inform(3, Mas_Ord_Old[old][4]); // Îòëîæåí. îðäåð óäàë¸í } } // Ïîèñê íîâûõ îðäåðîâ for(new=1; new<=Mas_Ord_New[0][0]; new++)// Ïî ìàññèâó íîâûõ îðä. { if (Mas_Ord_New[new][8]>0) //Ýòî íå íîâûé,à ïåðåîòêð continue; //..èëè ÷àñòè÷íî çàêðûòûé Conc_Nom_Ord=false; // Ïîêà ñîâïàäåíèÿ íåò for(old=1; old<=Mas_Ord_Old[0][0]; old++)// Ïîèùåì ýòîò îðäåðîê { // ..â ìàññèâå ñòàðûõ if (Mas_Ord_New[new][4]==Mas_Ord_Old[old][4])//Ñîâïàë íîìåð.. { //.. îðäåðà Conc_Nom_Ord=true; // Îðäåð íàéäåí, .. break; // ..çíà÷èò âûõîäèì èç .. } // .. âíóòðåííåãî öèêëà } if (Conc_Nom_Ord==false) // Åñëè ñîâïàäåíèÿ íåò,.. { // ..òî îðäåð íîâûé :) if (Mas_Ord_New[new][6]==0) Inform(4, Mas_Ord_New[new][4]); // Îðäåð Buy îòêðûò if (Mas_Ord_New[new][6]==1) Inform(5, Mas_Ord_New[new][4]); // Îðäåð Sell îòêðûò if (Mas_Ord_New[new][6]> 1) Inform(6, Mas_Ord_New[new][4]); // Óñòàíîâëåí îòëîæ.îðäåð } } return; } //+------------------------------------------------------------------+ // Ôóíêöèÿ âû÷èñëåíèÿ êîëè÷åñòâà ëîòîâ. // Ãëîáàëüíûå ïåðåìåííûå: // double Lots_New - êîëè÷åñòâî ëîòîâ äëÿ íîâûõ îðäåðîâ (âû÷èñëÿåòñÿ) // double Lots - æåëàåìîå êîëè÷åñòâî ëîòîâ, çàäàííîå ïîëüçîâàòåë. // int Percent - ïðîöåíò ñðåäñòâ, çàäàííûé ïîëüçîâàòåëåì // Âîçâðàùàåìûå çíà÷åíèÿ: // true - åñëè ñðåäñòâ õâàòàåò íà ìèíèìàëüíûé ëîò // false - åñëè ñðåäñòâ íå õâàòàåò íà ìèíèìàëüíûé ëîò bool Lot() // Ïîçîâàòåëüñêàÿ ô-èÿ { string Symb =Symbol(); // Ôèíàíñîâûé èíñòðóì. double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Ñòîèì. 1 ëîòà double Min_Lot=MarketInfo(Symb,MODE_MINLOT);// Ìèí. ðàçìåð. ëîòîâ double Step =MarketInfo(Symb,MODE_LOTSTEP);//Øàã èçìåíåí ðàçìåðà double Free =AccountFreeMargin(); // Ñâîáîäíûå ñðåäñòâà if (Lots>0) // Ëîòû çàäàíû ÿâíî.. { // ..ïðîâåðèì ýòî double Money=Lots*One_Lot; // Ñòîèìîñòü îðäåðà if(Money<=AccountFreeMargin()) // Ñðåäñòâ õâàòàåò.. Lots_New=Lots; // ..ïðèíèìàåì çàäàííîå else // Åñëè íå õâàòàåò.. Lots_New=MathFloor(Free/One_Lot/Step)*Step;// Ðàñ÷¸ò ëîòîâ } else // Åñëè ëîòû íå çàäàíû { // ..òî áåð¸ì ïðîöåíò if (Percent > 100) // Çàäàíî îøèáî÷íî .. Percent=100; // .. òî íå áîëåå 100 if (Percent==0) // Åñëè óñòàíîâëåí 0 .. Lots_New=Min_Lot; // ..òî ìèíèìàëüíûé ëîò else // Æåëàåì. êîëè÷.ëîòîâ: Lots_New=MathFloor(Free*Percent/100/One_Lot/Step)*Step;//Ðàñ÷ } if (Lots_New < Min_Lot) // Åñëè ìåíüøå äîïóñò.. Lots_New=Min_Lot; // .. òî ìèíèàìàëüíûé if (Lots_New*One_Lot > AccountFreeMargin()) // Íå õâàòàåò äàæå.. { // ..íà ìèíèìàëüí. ëîò:( Inform(11,0,Min_Lot); // Ñîîáùåíèå.. return(false); // ..è âûõîä } return(true); // Âûõîä èç ïîëüç. ô-èè } //+------------------------------------------------------------------+ // Ôóíêöèÿ âû÷èñëåíèÿ òîðãîâûõ êðèòåðèåâ. // Âîçâðàùàåìûå çíà÷åíèÿ: // 10 - îòêðûòèå Buy // 20 - îòêðûòèå Sell // 11 - çàêðûòèå Buy // 21 - çàêðûòèå Sell // 0 - çíà÷èìûõ êðèòåðèåâ íåò int Criterion() // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ { string Sym=Symbol(); int i, k, o, m, s, f; double Fx_0n, Fx_1n, Fx_2n, Fx_0, Fx_1, Sh1, Sh2, Sh3, Sh4, Sh0, Sh00;// // Ïàðàìåòðû ïîëüçîâàò. èíäèêàò: double adx_m5 = iADX(Sym,15,14,PRICE_CLOSE,0,0); double adx_1ago_m5 = iADX(NULL,15,14,PRICE_CLOSE,0,1); // ADX 5 min 1 bar ago double di_p_m5 = iADX(NULL,15,14,PRICE_CLOSE,1,0); // DI+ 5 min double di_m_m5 = iADX(NULL,15,14,PRICE_CLOSE,2,0); // DI- 5 min Fx_0n=iCustom(Sym,PERIOD_M15,"Fisher_Yur4ik_Alert",10,0,0); Fx_1n=iCustom(Sym,PERIOD_M15,"Fisher_Yur4ik_Alert",10,0,1); Fx_2n=iCustom(Sym,PERIOD_M15,"Fisher_Yur4ik_Alert",10,0,2); Fx_0=sglag2(Fx_0n, Fx_1n); Fx_1=sglag2(Fx_1n, Fx_2n); if(Fx_1<0 && Fx_0>0) {FUp=true; FD=false;} if(Fx_1>0 && Fx_0<0) {FD=true; FUp=false;} if(Fx_1>0.25 && Fx_0<0.25) {FclUp=true; FclD=false;} if(Fx_1<-0.25 && Fx_0>-0.25) {FclD=true; FclUp=false;} Tral_Stop(0); // Òðåéëèíã ñòîï Buy Tral_Stop(1); // Òðåéëèíã ñòîï Sell if(mod(di_p_m5,di_m_m5)<Delta && mod(adx_m5,di_p_m5)<Delta && mod(adx_m5,di_m_m5)<Delta) { Comment("×àñ âåðõ ",SHUp," ",Sh1," Ëàï ",i," Ìèí ââåðõ ",SMUp," ",Sh3," Ëàï ",o," FxUp ",FUp," FxUpCl ",FclUp," ×àñ âíèç ",SHD," ",Sh2," Ëàï ",k," Ìèí âíèç ",SMD," ",Sh4," Ëàï ",m," FxD ",FD," FxDCl ",FclD, "\n ADX ",adx_m5," ADX 1 ",adx_1ago_m5," +DI ",di_p_m5," -DI ",di_m_m5," Fx íà 0 áàðå ",Fx_0," Fx íà 2 áàðå ",Fx_1," Ñèëüíûé ôëåò!!!"); FUp=false; FD=false; FclUp=false; FclD=false; for(int l=1;l<=Mas_Ord_New[0][0];l++) { if(Mas_Ord_New[l][6]==0) return(11); // Çàêðûòèå Buy if(Mas_Ord_New[l][6]==1) return(21); // Çàêðûòèå Sell } return(0); } for(s=0;s<3000;s++) { Sh0=iCustom(Symbol(),PERIOD_M1,"LabTrend1_v2.1",3,0,s); if(Sh0<1000 && Sh0>0) break; } for(f=0;f<3000;f++) { Sh00=iCustom(Symbol(),PERIOD_M1,"LabTrend1_v2.1",3,1,f); if(Sh00<1000 && Sh00>0) break; } for(i=0;i<3000;i++) { Sh1=iCustom(Symbol(),PERIOD_H1,"LabTrend1_v2.1",3,0,i); if(Sh1<1000 && Sh1>0) break; } for(k=0;k<3000;k++) { Sh2=iCustom(Symbol(),PERIOD_H1,"LabTrend1_v2.1",3,1,k); if(Sh2<1000 && Sh2>0) break; } for(o=0;o<3000;o++) { Sh3=iCustom(Symbol(),PERIOD_M15,"LabTrend1_v2.1",3,0,o); if(Sh3<1000 && Sh3>0) break; } for(m=0;m<3000;m++) { Sh4=iCustom(Symbol(),PERIOD_M15,"LabTrend1_v2.1",3,1,m); if(Sh4<1000 && Sh4>0) break; } if(s<f) { SM1Up=true; SM1D=false; } if(s>f) { SM1Up=true; SM1D=false; } if(i<k) { SHUp=true; SHD=false; } if(o<m) { SMUp=true; SMD=false; } if(i>k) { SHD=true; SHUp=false; } if(o>m) { SMD=true; SMUp=false; } Comment("×àñ âåðõ ",SHUp," ",Sh1," Ëàï ",i," Ìèí ââåðõ ",SMUp," ",Sh3," Ëàï ",o," FxUp ",FUp," FxUpCl ",FclUp," ×àñ âíèç ",SHD," ",Sh2," Ëàï ",k," Ìèí âíèç ",SMD," ",Sh4," Ëàï ",m," FxD ",FD," FxDCl ",FclD, "\n ADX ",adx_m5," ADX1 ",adx_1ago_m5," +DI ",di_p_m5," -DI ",di_m_m5," Fx íà 0 áàðå ",Fx_0," Fx íà 2 áàðå ",Fx_1); if(SHUp==true && SMUp==true && FUp==true && di_p_m5>di_m_m5 && adx_m5>adx_1ago_m5) return(10); // Îòêðûòèå Buy if(SHD==true && SMD==true && FD==true && di_p_m5<di_m_m5 && adx_m5>adx_1ago_m5) return(20); // Îòêðûòèå Sell if(SMD==true || FD==true || FclUp==true) return(11); // Çàêðûòèå Buy if(SMUp==true || FUp==true || FclD==true) return(21); // Çàêðûòèå Sell return(0); // Âûõîä èç ïîëüçîâ. ôóíêöèè } double mod(double x, double y) { if((x-y)<0) return((x-y)*(-1)); return(x-y); } double sglag2(double x, double y) //Ôóíêöèÿ ñãëàæèâàíèÿ ñ êîô. ÌÀ=2 {return((x+y)/2);} //+------------------------------------------------------------------+ // Òîðãîâàÿ ôóíêöèÿ. int Trade(int Trad_Oper) // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ { // Trad_Oper - òèï òîðãîâîé îïåðàöèè: // 10 - îòêðûòèå Buy // 20 - îòêðûòèå Sell // 11 - çàêðûòèå Buy // 21 - çàêðûòèå Sell // 0 - çíà÷èìûõ êðèòåðèåâ íåò // -1 - èñïîëüçóåòñÿ äðóãîé ôèíàíñîâûé èíñòðóìåíò switch(Trad_Oper) { case 10: // Òîðãîâûé êðèòåðèé = Buy Close_All(1); // Çàêðûòü âñå Sell if (Lot()==false) // Ñðåäñòâ íå õâàòàåò íà ìèíèì. return; // Âûõîä èç ïîëüçîâ. ôóíêöèè Open_Ord(0); // Îòêðûòü Buy return; // Ïîòîðãîâàëè - óõîäèì case 11: // Òîðã. êðèò. = çàêðûòèå Buy Close_All(0); // Çàêðûòü âñå Buy return; // Ïîòîðãîâàëè - óõîäèì case 20: // Òîðãîâûé êðèòåðèé = Sell Close_All(0); // Çàêðûòü âñå Buy if (Lot()==false) return; // Âûõîä èç ïîëüçîâ. ôóíêöèè Open_Ord(1); // Îòêðûòü Sell return; // Ïîòîðãîâàëè - óõîäèì case 21: // Òîðã. êðèò. = çàêðûòèå Sell Close_All(1); // Çàêðûòü âñå Sell return; // Ïîòîðãîâàëè - óõîäèì case 0: // Óäåðæàíèå îòêðûòûõ ïîçèöèé Tral_Stop(0); // Òðåéëèíã ñòîï Buy Tral_Stop(1); // Òðåéëèíã ñòîï Sell return; // Ïîòîðãîâàëè - óõîäèì } } //+------------------------------------------------------------------+ // Ôóíêöèÿ çàêðûòèÿ âñåõ ðûíî÷íûõ îðäåðîâ óêàçàííîãî òèïà // Ãëîáàëüíûå ïåðåìåííûå: // Mas_Ord_New Ìàññèâ îðäåðîâ ïîñëåäíèé èçâåñòíûé // Mas_Tip Ìàññèâ òèïîâ îðäåðîâ int Close_All(int Tip) // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ { // int Tip // Òèï îðäåðà int Ticket=0; // Íîìåð îðäåðà double Lot=0; // Êîëè÷åñòâî çàêð. ëîòîâ double Price_Cls; // Öåíà çàêðûòèÿ îðäåðà-- while(Mas_Tip[Tip]>0) // Äî òåõ ïîð, ïîêà åñòü .. { //.. îðäåðà çàäàííîãî òèïà for(int i=1; i<=Mas_Ord_New[0][0]; i++)// Öèêë ïî æèâûì îðäåðàì { if(Mas_Ord_New[i][6]==Tip && // Ñðåäè îðäåðîâ íàøåãî òèïà Mas_Ord_New[i][5]>Lot) // .. âûáèðàåì ñàìûé äîðîãîé { // Ýòîò áîëüøå ðàíåå íàéäåí. Lot=Mas_Ord_New[i][5]; // Íàèáîëüøèé íàéäåííûé ëîò Ticket=Mas_Ord_New[i][4]; // Íîìåð åãî îðäåðà òàêîé } } if (Tip==0) Price_Cls=Bid; // Äëÿ îðäåðîâ Buy if (Tip==1) Price_Cls=Ask; // Äëÿ îðäåðîâ Sell Inform(12,Ticket); // Ñîîáùåíèå î ïîïûòêå çàêð. bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);// Çàêðûòü îðäåð !:) if (Ans==false) // Íå ïîëó÷èëîñü :( { // Ïîèíòåðåñóåìñÿ îøèáêàìè: if(Errors(GetLastError())==false)// Åñëè îøèáêà íåïðåîäîëèìàÿ return; // .. òî óõîäèì. } Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ Events(); // Îòñëåæèâàíèå ñîáûòèé } return; // Âûõîä èç ïîëüçîâ. ôóíêöèè } //+------------------------------------------------------------------+ // Ôóíêöèÿ îòêðûòèÿ îäíîãî ðûíî÷íîãî îðäåðà óêàçàííîãî òèïà // Ãëîáàëüíûå ïåðåìåííûå: // int Mas_Tip Ìàññèâ òèïîâ îðäåðîâ // int StopLoss Çíà÷åíèå StopLoss (êîëè÷åñòâî ïóíêòîâ) // int TakeProfit Çíà÷åíèå TakeProfit (êîëè÷åñòâî ïóíêòîâ) int Open_Ord(int Tip) { int Ticket, // Íîìåð îðäåðà MN; // MagicNumber double SL, // StopLoss (îòíîñèò.çíà÷.öåíû) TP; // TakeProf (îòíîñèò.çíà÷.öåíû) while(Mas_Tip[Tip]==0) // Äî òåõ ïîð, ïîêà .. { //.. íå äîñòèãíóò óñïåõ if (StopLoss<Level_new) // Åñëè ìåíüøå äîïóñòèìîãî.. StopLoss=Level_new; // .. òî äîïóñòèìûé if (TakeProfit<Level_new) // Åñëè ìåíüøå äîïóñòèìîãî.. TakeProfit=Level_new; // ..òî äîïóñòèìûé MN=TimeCurrent(); // Ïðîñòîé MagicNumber Inform(13,Tip); // Ñîîáùåíèå î ïîïûòêå îòêð if (Tip==0) // Áóäåì îòêðûâàòü Buy { SL=Bid - StopLoss* Point; // StopLoss (öåíà) TP=Bid + TakeProfit*Point; // TakeProfit (öåíà) Ticket=OrderSend(Symbol(),0,Lots_New,Ask,2,SL,TP,"",MN); } if (Tip==1) // Áóäåì îòêðûâàòü Sell { SL=Ask + StopLoss* Point; // StopLoss (öåíà) TP=Ask - TakeProfit*Point; // TakeProfit (öåíà) Ticket=OrderSend(Symbol(),1,Lots_New,Bid,2,SL,TP,"",MN); } if (Ticket<0) // Íå ïîëó÷èëîñü :( { // Ïîèíòåðåñóåìñÿ îøèáêàìè: if(Errors(GetLastError())==false)// Åñëè îøèáêà íåïðåîäîëèìàÿ return; // .. òî óõîäèì. } Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ Events(); // Îòñëåæèâàíèå ñîáûòèé } return; // Âûõîä èç ïîëüçîâ. ôóíêöèè } //+------------------------------------------------------------------+ // Ôóíêöèÿ ìîäèôèêàöèè StopLoss âñåõ îðäåðîâ óêàçàííîãî òèïà // Ãëîáàëüíûå ïåðåìåííûå: // Mas_Ord_New Ìàññèâ îðäåðîâ ïîñëåäíèé èçâåñòíûé // int TralingStop Çíà÷åíèå TralingStop(êîëè÷åñòâî ïóíêòîâ) int Tral_Stop(int Tip) { int Ticket; // Íîìåð îðäåðà double Price, // Öåíà îòêðûòèÿ ðûíî÷íîãî îðäåðà TS, // TralingStop (îòíîñèò.çíà÷.öåíû) SL, // Çíà÷åíèå StopLoss îðäåðà TP; // Çíà÷åíèå TakeProfit îðäåðà bool Modify; // Ïðèçíàê íåîáõîäèìîñòè ìîäèôè. for(int i=1;i<=Mas_Ord_New[0][0];i++) // Öèêë ïî âñåì îðäåðàì { // Èùåì îðäåðà çàäàí. òèïà if (Mas_Ord_New[i][6]!=Tip) // Åñëè ýòî íå íàø òèï.. continue; //.. òî ïåðåñòóïèì îðäåð Modify=false; // Ïîêà íå íàçíà÷åí ê ìîäèôè Price =Mas_Ord_New[i][1]; // Öåíà îòêðûòèÿ îðäåðà SL =Mas_Ord_New[i][2]; // Çíà÷åíèå StopLoss îðäåðà TP =Mas_Ord_New[i][3]; // Çíà÷åíèå TakeProft îðäåðà Ticket=Mas_Ord_New[i][4]; // Íîìåð îðäåðà if (TralingStop<Level_new) // Åñëè ìåíüøå äîïóñòèìîãî.. TralingStop=Level_new; // .. òî äîïóñòèìûé TS=TralingStop*Point; // Òî æå â îòíîñèò.çíà÷.öåíû switch(Tip) // Ïåðåõîä íà òèï îðäåðà { case 0 : // Îðäåð Buy if (NormalizeDouble(SL,Digits)<// Åñëè íèæå æåëàåìîãî.. NormalizeDouble(Bid-TS,Digits)) { // ..òî ìîäèôèöèðóåì åãî: SL=Bid-TS; // Íîâûé åãî StopLoss Modify=true; // Íàçíà÷åí ê ìîäèôè. } break; // Âûõîä èç switch case 1 : // Îðäåð Sell if (NormalizeDouble(SL,Digits)>// Åñëè âûøå æåëàåìîãî.. NormalizeDouble(Ask+TS,Digits)|| NormalizeDouble(SL,Digits)==0)//.. èëè íóëåâîé(!) { // ..òî ìîäèôèöèðóåì åãî SL=Ask+TS; // Íîâûé åãî StopLoss Modify=true; // Íàçíà÷åí ê ìîäèôè. } } // Êîíåö switch if (Modify==false) // Åñëè åãî íå íàäî ìîäèôè.. continue; // ..òî èä¸ì ïî öèêëó äàëüøå bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Ìîäèôèöèðóåì åãî! if (Ans==false) // Íå ïîëó÷èëîñü :( { // Ïîèíòåðåñóåìñÿ îøèáêàìè: if(Errors(GetLastError())==false)// Åñëè îøèáêà íåïðåîäîëèìàÿ return; // .. òî óõîäèì. i--; // Ïîíèæåíèå ñ÷¸ò÷èêà } Terminal(); // Ôóíêöèÿ ó÷¸òà îðäåðîâ Events(); // Îòñëåæèâàíèå ñîáûòèé } return; // Âûõîä èç ïîëüçîâ. ôóíêöèè } //+------------------------------------------------------------------+ // Ôóíêöèÿ îáðàáîòêè îøèáîê. // Âîçâðàùàåìûå çíà÷åíèÿ: // true - åñëè îøèáêà ïðåîäîëèìàÿ (ò.å. ìîæíî ïðîäîëæàòü ðàáîòó) // false - åñëè îøèáêà êðèòè÷åñêàÿ (ò.å. òîðãîâàòü íåëüçÿ) bool Errors(int Error) // Ïîëüçîâàòåëüñêàÿ ôóíêöèÿ { // Error // Íîìåð îøèáêè if(Error==0) return(false); // Íåò îøèáêè Inform(15,Error); // Ñîîáùåíèå switch(Error) { // Ïðåîäîëèìûå îøèáêè: case 129: // Íåïðàâèëüíàÿ öåíà case 135: // Öåíà èçìåíèëàñü RefreshRates(); // Îáíîâèì äàííûå return(true); // Îøèáêà ïðåîäîëèìàÿ case 136: // Íåò öåí. Æä¸ì íîâûé òèê. while(RefreshRates()==false) // Äî íîâîãî òèêà Sleep(1); // Çàäåðæêà â öèêëå return(true); // Îøèáêà ïðåîäîëèìàÿ case 146: // Ïîäñèñòåìà òîðãîâëè çàíÿòà Sleep(500); // Ïðîñòîå ðåøåíèå RefreshRates(); // Îáíîâèì äàííûå return(true); // Îøèáêà ïðåîäîëèìàÿ // Êðèòè÷åñêèå îøèáêè: case 2 : // Îáùàÿ îøèáêà case 5 : // Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà case 64: // Ñ÷åò çàáëîêèðîâàí case 133: // Òîðãîâëÿ çàïðåùåíà default: // Äðóãèå âàðèàíòû return(false); // Êðèòè÷åñêàÿ îøèáêà } } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Indicators Used:
Movement directional index
Custom Indicators Used:
Fisher_Yur4ik_Alert
LabTrend1_v2.1
Order Management characteristics:
Checks for the total of open orders
It Closes Orders by itself
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy
Other Features:
It plays sound alerts