//+------------------------------------------------------------------+ //| EXP_FIBO_ZZ_V0.mq4 | //| Copyright © 2009, Tokman Yuriy | //| yuriytokman@gmail.com | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Tokman Yuriy" #property link "yuriytokman@gmail.com" //1. Ðàññòàâëÿåì îòëîæåííûå ñòîï îðäåðà ïî óðîâíÿì 100 ïî ôèáî íà áàé è ñåëë + n(3,4,5) pips! //2. Ðàñòàâëÿåì òîëüêî åñëè çèãçàã âíóòðè êàíàëà, ò.å. òðåòüÿ òî÷êà çèã çàãà äîëæíà áûòü //âíóòðè êàíàëà!ïðè ïðîáèòîì êîðèäîðå âûñòàâëÿòüñÿ íåëüçÿ! //3. Ñòîïû ñòàâèë íà óðîâíå âíóòðè êàíàëà, ýòî ìîæåò áûòü 50, 38.2, èëè 61.8, âûáûðàåì ñàìè! //4. Òàéê ïðîôèò ñòàâèì íà óðîâíå 161.8, èëè 200, òîæå ÷òîá ìîæíî áûëî âûáûðàòü ñàìîìó! //5. Äîëæåí áûòü ðåíäæ êîðèäîðà,÷òîá ìîæíî áûëî âûáèðàòü ñàìîìó! íàïðèìåð ìèíèìóì 20 ïóíêîâ, // ìàêñèìóì 100 ïóíêòîâ! //6. Åñëè ñðàáîòàë îäèí èç äâóõ îðäåðîâ âòîðîé àâòîìàòè÷åñêèé óäàëÿåòüñÿ! //7. Âðåìÿ ðàáîòû, 00-24, èëè 8-16! ÷òî ìîæíî áûëî âûáèðàòü ïåðèîä âðåìåíè! //8. íàñòðàèâàåìûé ëîò //9. íàñòðîéêè ïàðàìåòðîâ çèãà çàãà ò.å. (12 6 3) //10. Äîïîëíèòåëüíî, ÷òî ìîæíî áûëî ñäëåàòü ôóíêöèþ êîòîðîþ ìîæíî áóäåò âêë è âûêë, "ïðîöåíò //ðèñêà çà ñäåëêó íà ñäåëêó!" //íàïðèìåð äåïîçèò â 1000 äîëëàðîâ, çàäàåì ïðîöåí ðèñê çà ñäåëêó äîïóñòè 5%, è â äàííûé ìîìåíò //ñòîï 50 ïóíêòîâ, //òî òîãäà ëîò áóäåò 0.1, èëè ðèñê 10% ëîò òóò óæå 0.2, èëè ðàñòîÿíè ñòîïà 20 ïóíêòîâ è ðèñê 10% // òî ëîò áóäåò 0.5! extern string ____1___ = "Íàñòðîéêè èíäèêàòîðà ZigZag"; extern int ExtDepth = 12; extern int ExtDeviation = 5; extern int ExtBackstep = 3; extern string ____2___ = "Âðåìÿ ðàáîòû ñîâåòíèêà"; extern int StartHour = 00; // Ñòàðò ðàáîòû ÷àñû extern int StartMinute = 01; // Ñòàðò ðàáîòû ìèíóòû extern int StopHour = 23; // Ñòîï ðàáîòû ÷àñû extern int StopMinute = 59; // Ñòîï ðàáîòû ìèíóòû extern string ____3___ = "Íàñòðîéêè êîðèäîðà è îòñòóïà"; extern int n_pips = 5; // Îòñòóï â ïóíêòàõ extern int Min_Corridor = 20; // Ìèíèìàëüíûé ðàçìåð êîðèäîðà extern int Max_Corridor = 100; // Ìàêñèìàëüíûé ðàçìåð êîðèäîðà extern string ____4___ = "Íàñòðîéêè ÌÌ"; extern bool Choice_method = true; // Âûáîð ìåòîäà true - áàëàíññ , false - câîáîäíûå ñðåäñòâà extern double Risk = 1; //% çàäà¸ì ïðîöåíò îò äåïîçèòà, åñëè 0 ðàáîòàåì ôèêñèðîâàíûì ëîòîì Lots extern double Lots = 0.1; // Ðàçìåð ëîòà extern bool MovingInWL = true; // Ïåðåâîä â áåçóáûòîê extern int LevelProfit = 13; // Óðîâåíü ïðîôèòà â ïóíêòàõ, êîòîðîãî äîëæíà äîñòèãíóòü ïîçèöèÿ äëÿ òîãî, ÷òîáû å¸ ñòîï áûë ïåðåíåñ¸í íà óðîâåíü áåçóáûòêà. extern int LevelWLoss = 2; // Óðîâåíü áåçóáûòêà â ïóíêòàõ, íà êîòîðûé áóäåò ïåðåíåñ¸í ñòîï ïîçèöèè ïîñëå òîãî, êàê å¸ ïðîôèò äîñòèãíåò óðîâíÿ LevelProfit â ïóíêòàõ. extern string _____5_____ = "Íàñòðîéêè ñîâåòíèêà"; extern double Fibo_StopLoss = 61.8; // Ðàçìåð ñòîïà â ïðîöåíòàõ extern double Fibo_TakeProfit = 161.8; // Ðàçìåð òåéêà â ïðîöåíòàõ extern int MagicNumber = 28081975; // Ìàãè÷åñêîå ÷èñëî îðäåðîâ extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû extern int NumberOfTry = 5; // Êîëè÷åñòâî òîðãîâûõ ïîïûòîê extern string _____6_____ = "Äðóãèå íàñòðîéêè"; extern bool Line = false; // Ïîêàçûâàòü ëèíèè êàíàëà extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà extern color clDelete = LightBlue; // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè extern color clOpenBuy = LightBlue; // Öâåò çíà÷êà îòêðûòèÿ ïîêóïêè extern color clOpenSell = LightCoral; // Öâåò çíà÷êà îòêðûòèÿ ïðîäàæè extern bool ShowComment = True; // Ïîêàçûâàòü êîììåíòàðèé //------- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------------+ int NumberAccount = 0; // Íîìåð òîðãîâîãî ñ÷¸òà bool gbDisabled = False; // Ôëàã áëîêèðîâêè ñîâåòíèêà bool gbNoInit = False; // Ôëàã íåóäà÷íîé èíèöèàëèçàöèè //------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé -----------------------------------------+ #include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4 string txt; double current_high = 0, current_low = 0; double ppB = 0, ppS = 0; int StopLoss = 0; int TakeProfit = 0; string comment = "yuriytokman@gmail.com"; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- gbNoInit=False; if (!IsTradeAllowed()) { Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+ "Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü"); gbNoInit=True; return; } if (!IsLibrariesAllowed()) { Message("Äëÿ íîðìàëüíîé ðàáîòû ñîâåòíèêà íåîáõîäèìî\n"+ "Ðàçðåøèòü èìïîðò èç âíåøíèõ ýêñïåðòîâ"); gbNoInit=True; return; } if (!IsTesting()) { if (IsExpertEnabled()) Message("Ñîâåòíèê áóäåò çàïóùåí ñëåäóþùèì òèêîì"); else Message("Îòæàòà êíîïêà \"Ðàçðåøèòü çàïóñê ñîâåòíèêîâ\""); } //---- string char[256]; int i; for (i = 0; i < 256; i++) char[i] = CharToStr(i); txt = char[121]+char[117]+char[114]+char[105]+char[121]+char[116]+char[111] +char[107]+char[109]+char[97]+char[110]+char[64]+char[103]+char[109] +char[97]+char[105]+char[108]+char[46]+char[99]+char[111]+char[109]; Label("label",txt); comment = txt; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- if (!IsTesting()) Comment(""); ObjectDelete("00"); ObjectDelete("high"); ObjectDelete("low"); //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- if(MovingInWL) MovingInWL( NULL, -1, MagicNumber); //---- if(!isTradeTimeInt(StartHour,StartMinute,StopHour,StopMinute)) { Comment("Ñîâåòíèê îñòàíîâëåí! Ìîæíî ïîéòè ïîñïàòü èëè ñäåëàòü ïîëåçíîå äåëî."); return(-1); } //---- if (gbDisabled) { Message("Êðèòè÷åñêàÿ îøèáêà! Ñîâåòíèê ÎÑÒÀÍÎÂËÅÍ!"); return; } if (gbNoInit) { Message("Íå óäàëîñü èíèöèàëèçèðîâàòü ñîâåòíèê!"); return; } if (!IsTesting()) { if (NumberAccount>0 && NumberAccount!=AccountNumber()) { Comment("Òîðãîâëÿ íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!"); return; } else Comment("");} //---- double Lotsi; if(Risk<=0)Lotsi=Lots; else Lotsi=GetLot(); //---- //---- double high = 0, low = 0; double room_0 = GetExtremumZZPrice(NULL, 0, 0, ExtDepth, ExtDeviation, ExtBackstep); double room_1 = GetExtremumZZPrice(NULL, 0, 1, ExtDepth, ExtDeviation, ExtBackstep); double room_2 = GetExtremumZZPrice(NULL, 0, 2, ExtDepth, ExtDeviation, ExtBackstep); if(room_1>room_2){high = room_1; low = room_2;}//íàõîäèì âåðõ è íèç else {high = room_2; low = room_1;} //íàõîäèì âåðõ è íèç double size_corridor = high - low ; //øèðèíà êîðèäîðà double STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;//Comment("STOPLEVEL=",STOPLEVEL); //------âû÷èñëÿåì ÑÒ è ÒÏ StopLoss = (size_corridor/100*Fibo_StopLoss)/Point; TakeProfit = ((size_corridor/100*Fibo_TakeProfit)-size_corridor)/Point; ppB = MathRound(high/Point + n_pips )*Point; ppS = MathRound(low/Point - n_pips )*Point; //------ïðîðèñîâêà ëèíèé äëÿ àíàëèçà if(Line){ SetHLine(Yellow, "00", room_0, 0, 2); SetHLine(Lime, "high", high, 0, 2); SetHLine(Red, "low", low, 0, 2);} //-----óäàëÿåì îòëîæêó åñëè åñòü ðûíî÷íûé îðäåð if(ExistPositions(NULL,-1,MagicNumber))//åñòü îòêðûòàÿ ïîçèöèÿ DeleteOrders(NULL, -1, MagicNumber);//óäàëÿåì îòëîæêè //--------------------------------------------- double sl=0, tp=0, ti=0; if(size_corridor>Min_Corridor*Point && size_corridor<Max_Corridor*Point //êîðèäîð äîïóñòèìîé âåëè÷èíû && high>room_0+STOPLEVEL && low<room_0-STOPLEVEL) //íóëåâàÿ òî÷êà çèãà íàõîäèòñÿ â êîðèäîðå { if(!ExistPositions(NULL,-1,MagicNumber))//íåò îòêðûòûõ ïîçèöèé { if(!ExistOrders(NULL,OP_BUYSTOP,MagicNumber))//íåò áàéñòîïà { if (StopLoss >0) sl=ppB-StopLoss*Point; else sl=0; if (TakeProfit>0) tp=ppB+TakeProfit*Point; else tp=0; SetOrder(NULL,OP_BUYSTOP,Lotsi,ppB,sl,tp,MagicNumber,0,txt);//óñòàíàâëèâàåì áàé ñòîï } else // åñòü áàéñòîï { if(GetOrderOpenPrice(NULL, OP_BUYSTOP, MagicNumber)!=ppB) {//ìîäèôèöèðóåì ti = TicketPos(NULL,OP_BUYSTOP,MagicNumber); if (OrderSelect(ti, SELECT_BY_TICKET)) { if (StopLoss >0) sl=ppB-StopLoss*Point; else sl=0; if (TakeProfit>0) tp=ppB+TakeProfit*Point; else tp=0; ModifyOrder(ppB,sl,tp,Turquoise); } } } if(!ExistOrders(NULL,OP_SELLSTOP,MagicNumber))//íåò ñåëëñòîïà { if (StopLoss >0) sl=ppS+StopLoss*Point; else sl=0; if (TakeProfit>0) tp=ppS-TakeProfit*Point; else tp=0; SetOrder(NULL,OP_SELLSTOP,Lotsi,ppS,sl,tp,MagicNumber,0,txt);// óñòàíàâëèâàåì } else // åñòü ñåëëñòîï { if(GetOrderOpenPrice(NULL, OP_SELLSTOP, MagicNumber)!=ppS) {//ìîäèôèöèðóåì ti = TicketPos(NULL,OP_SELLSTOP,MagicNumber); if (OrderSelect(ti, SELECT_BY_TICKET)) { if (StopLoss >0) sl=ppS+StopLoss*Point; else sl=0; if (TakeProfit>0) tp=ppS-TakeProfit*Point; else tp=0; ModifyOrder(ppS,sl,tp,Turquoise); } } } } } //----------------------------------------------------------------- if (ShowComment) { string st="CurTime="+TimeToStr(TimeCurrent(), TIME_MINUTES) +" Ñòàðò="+StartHour+":"+StartMinute +" Ñòîï="+StopHour+":"+StopMinute +" Øèðèíà êàíàëà="+DoubleToStr(size_corridor/Point,0)+"p" +" ÑË="+DoubleToStr(Fibo_StopLoss,0)+"%="+StopLoss+"p" +" ÒÏ="+DoubleToStr(Fibo_TakeProfit,0)+"%="+TakeProfit+"p" +" Lots="+DoubleToStr(Lotsi,2) //+"\n\n Áàëàíñ="+DoubleToStr(AccountBalance(), 2) //+"\n Ýêâèòè="+DoubleToStr(AccountEquity(), 2) //+"\n Ïðèáûëü="+DoubleToStr(AccountEquity()-AccountBalance(),3)+" $" //+"\n Ïðèáûëü="+DoubleToStr((AccountEquity()/AccountBalance()-1)*100,3)+" %" ; Comment(st); } else Comment(""); //------------------------------------------------------------------- return(0); } //+------------------------------------------------------------------+ //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 07.10.2006 | //| Îïèñàíèå : Âîçâðàùàåò ýêñòðåìóì ÇèãÇàãà ïî åãî íîìåðó. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) | //| tf - òàéìôðåéì ( 0 - òåêóùèé ÒÔ) | //| ne - íîìåð ýêñòðåìóìà ( 0 - ïîñëåäíèé) | //| dp - ExtDepth | //| dv - ExtDeviation | //| bs - ExtBackstep | //+----------------------------------------------------------------------------+ double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) { if (sy=="" || sy=="0") sy=Symbol(); double zz; int i, k=iBars(sy, tf), ke=0; for (i=0; i<k; i++) { zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i); if (zz!=0) { ke++; if (ke>ne) return(zz); } } Print("GetExtremumZZPrice(): Ýêñòðåìóì ÇèãÇàãà íîìåð ",ne," íå íàéäåí"); return(0); } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 30.03.2008 | //| Îïèñàíèå : Óñòàíîâêà îáúåêòà OBJ_HLINE ãîðèçîíòàëüíàÿ ëèíèÿ | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| cl - öâåò ëèíèè | //| nm - íàèìåíîâàíèå ("" - âðåìÿ îòêðûòèÿ òåêóùåãî áàðà) | //| p1 - öåíîâîé óðîâåíü (0 - Bid) | //| st - ñòèëü ëèíèè (0 - ïðîñòàÿ ëèíèÿ) | //| wd - øèðèíà ëèíèè (0 - ïî óìîë÷àíèþ) | //+----------------------------------------------------------------------------+ void SetHLine(color cl, string nm="", double p1=0, int st=0, int wd=1) { if (nm=="") nm=DoubleToStr(Time[0], 0); if (p1<=0) p1=Bid; if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_HLINE, 0, 0,0); ObjectSet(nm, OBJPROP_PRICE1, p1); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_STYLE , st); ObjectSet(nm, OBJPROP_WIDTH , wd); } //+----------------------------------------------------------------------------+ | //| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ îðäåðîâ. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, | //| NULL - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ (-1 - ëþáîé îðäåð) | //| mn - MagicNumber (-1 - ëþáîé ìàãèê) | //| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ óñòàíîâêè) | //+----------------------------------------------------------------------------+ bool ExistOrders(string sy="", int op=-1, int mn=-1, datetime ot=0) { int i, k=OrdersTotal(), ty; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { ty=OrderType(); if (ty>1 && ty<6) { if ((OrderSymbol()==sy || sy=="") && (op<0 || ty==op)) { if (mn<0 || OrderMagicNumber()==mn) { if (ot<=OrderOpenTime()) return(True); } } } } } return(False); } //| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, | //| NULL - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) | //| mn - MagicNumber (-1 - ëþáîé ìàãèê) | //| ot - âðåìÿ îòêðûòèÿ ( 0 - ëþáîå âðåìÿ îòêðûòèÿ) | //+----------------------------------------------------------------------------+ bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (ot<=OrderOpenTime()) return(True); } } } } } } return(False); } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 28.11.2006 | //| Îïèñàíèå : Óäàëåíèå îðäåðîâ | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà ( "" - ëþáîé ñèìâîë, | //| NULL - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ ( -1 - ëþáîé îðäåð) | //| mn - MagicNumber ( -1 - ëþáîé ìàãèê) | //+----------------------------------------------------------------------------+ void DeleteOrders(string sy="", int op=-1, int mn=-1) { bool fd; int err, i, it, k=OrdersTotal(), ot; if (sy=="0") sy=Symbol(); for (i=k-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { ot=OrderType(); if (ot>1 && ot<6) { if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) { if (mn<0 || OrderMagicNumber()==mn) { for (it=1; it<=NumberOfTry; it++) { if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break; while (!IsTradeAllowed()) Sleep(5000); fd=OrderDelete(OrderTicket(), clDelete); if (fd) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); Print("Error(",err,") delete order ",GetNameOP(ot), ": ",ErrorDescription(err),", try ",it); Sleep(1000*5); } } } } } } } } //+----------------------------------------------------------------------------+ //| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òàéìôðåéìà | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| TimeFrame - òàéìôðåéì (êîëè÷åñòâî ñåêóíä) (0 - òåêóùèé ÒÔ) | //+----------------------------------------------------------------------------+ string GetNameTF(int TimeFrame=0) { if (TimeFrame==0) TimeFrame=Period(); switch (TimeFrame) { case PERIOD_M1: return("M1"); case PERIOD_M5: return("M5"); case PERIOD_M15: return("M15"); case PERIOD_M30: return("M30"); case PERIOD_H1: return("H1"); case PERIOD_H4: return("H4"); case PERIOD_D1: return("Daily"); case PERIOD_W1: return("Weekly"); case PERIOD_MN1: return("Monthly"); default: return("UnknownPeriod"); } } //| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè | //+----------------------------------------------------------------------------+ string GetNameOP(int op) { switch (op) { case OP_BUY : return("Buy"); case OP_SELL : return("Sell"); case OP_BUYLIMIT : return("Buy Limit"); case OP_SELLLIMIT: return("Sell Limit"); case OP_BUYSTOP : return("Buy Stop"); case OP_SELLSTOP : return("Sell Stop"); default : return("Unknown Operation"); } } //+----------------------------------------------------------------------------+ //| Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| m - òåêñò ñîîáùåíèÿ | //+----------------------------------------------------------------------------+ void Message(string m) { Comment(m); if (StringLen(m)>0) Print(m); } //+----------------------------------------------------------------------------+ | //| Îïèñàíèå : Óñòàíîâêà îðäåðà. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ | //| ll - ëîò | //| pp - öåíà | //| sl - óðîâåíü ñòîï | //| tp - óðîâåíü òåéê | //| mn - Magic Number | //| ex - Ñðîê èñòå÷åíèÿ | //+----------------------------------------------------------------------------+ void SetOrder(string sy, int op, double ll, double pp, double sl=0, double tp=0, int mn=0, datetime ex=0, string com="") { color clOpen; datetime ot; double pa, pb, mp; int err, it, ticket, msl; string lsComm= com+" /"+ WindowExpertName()+" "+GetNameTF(Period()); if (sy=="" || sy=="0") sy=Symbol(); msl=MarketInfo(sy, MODE_STOPLEVEL); if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell; if (ex>0 && ex<TimeCurrent()) ex=0; for (it=1; it<=NumberOfTry; it++) { if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) { Print("SetOrder(): Îñòàíîâêà ðàáîòû ôóíêöèè"); break; } while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); ot=TimeCurrent(); if(ObjectFind("label")>-1) ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, ex, clOpen); if (ticket>0) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); if (err==128 || err==142 || err==143) { Sleep(1000*66); if (ExistOrders(sy, op, mn, ot)) { if (UseSound) PlaySound(NameFileSound); break; } Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it); continue; } mp=MarketInfo(sy, MODE_POINT); pa=MarketInfo(sy, MODE_ASK); pb=MarketInfo(sy, MODE_BID); // Íåïðàâèëüíûå ñòîïû if (err==130) { switch (op) { case OP_BUYLIMIT: if (pp>pa-msl*mp) pp=pa-msl*mp; if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp; if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp; break; case OP_BUYSTOP: if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp; if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp; if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp; break; case OP_SELLLIMIT: if (pp<pb+msl*mp) pp=pb+msl*mp; if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp; if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp; break; case OP_SELLSTOP: if (pp>pb-msl*mp) pp=pb-msl*mp; if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp; if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp; break; } Print("SetOrder(): Ñêîððåêòèðîâàíû öåíîâûå óðîâíè"); } Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it); Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op), " pp=",pp," sl=",sl," tp=",tp," mn=",mn); if (pa==0 && pb==0) Message("SetOrder(): Ïðîâåðüòå â îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy); // Áëîêèðîâêà ðàáîòû ñîâåòíèêà if (err==2 || err==64 || err==65 || err==133) { gbDisabled=True; break; } // Äëèòåëüíàÿ ïàóçà if (err==4 || err==131 || err==132) { Sleep(1000*300); break; } // Ñëèøêîì ÷àñòûå çàïðîñû (8) èëè ñëèøêîì ìíîãî çàïðîñîâ (141) if (err==8 || err==141) Sleep(1000*100); if (err==139 || err==140 || err==148) break; // Îæèäàíèå îñâîáîæäåíèÿ ïîäñèñòåìû òîðãîâëè if (err==146) while (IsTradeContextBusy()) Sleep(1000*11); // Îáíóëåíèå äàòû èñòå÷åíèÿ if (err==147) { ex=0; continue; } if (err!=135 && err!=138) Sleep(1000*7.7); } } } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 28.11.2006 | //| Îïèñàíèå : Âîçâðàùàåò öåíó óñòàíîâêè ïîñëåäíåãî îðäåðà èëè 0. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, | //| NULL - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) | //| mn - MagicNumber (-1 - ëþáîé ìàãèê) | //+----------------------------------------------------------------------------+ double GetOrderOpenPrice(string sy="", int op=-1, int mn=-1) { datetime t; double r=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()>1 && OrderType()<6) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderOpenTime()) { t=OrderOpenTime(); r=OrderOpenPrice(); } } } } } } } return(r); } //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 19.02.2008 | //| Îïèñàíèå : Âîçâðàùàåò òèêåò ïîñëåäíåé îòêðûòîé ïîçèöèè èëè -1 | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà ("" - ëþáîé ñèìâîë, | //| NULL - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ (-1 - ëþáàÿ ïîçèöèÿ) | //| mn - MagicNumber (-1 - ëþáîé ìàãèê) | //+----------------------------------------------------------------------------+ int TicketPos(string sy="", int op=-1, int mn=-1) { datetime o; int i, k=OrdersTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); r=OrderTicket(); } } } } } } } return(r); } //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 28.11.2006 | //| Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| pp - öåíà óñòàíîâêè îðäåðà | //| sl - öåíîâîé óðîâåíü ñòîïà | //| tp - öåíîâîé óðîâåíü òåéêà | //| cl - öâåò çíà÷êà ìîäèôèêàöèè | //+----------------------------------------------------------------------------+ void ModifyOrder(double pp=-1, double sl=0, double tp=0, color cl=CLR_NONE) { bool fm; double op, pa, pb, os, ot; int dg=MarketInfo(OrderSymbol(), MODE_DIGITS), er, it; if (pp<=0) pp=OrderOpenPrice(); if (sl<0 ) sl=OrderStopLoss(); if (tp<0 ) tp=OrderTakeProfit(); pp=NormalizeDouble(pp, dg); sl=NormalizeDouble(sl, dg); tp=NormalizeDouble(tp, dg); op=NormalizeDouble(OrderOpenPrice() , dg); os=NormalizeDouble(OrderStopLoss() , dg); ot=NormalizeDouble(OrderTakeProfit(), dg); if (pp!=op || sl!=os || tp!=ot) { for (it=1; it<=NumberOfTry; it++) { if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break; while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); fm=OrderModify(OrderTicket(), pp, sl, tp, 0, cl); if (fm) { if (UseSound) PlaySound(NameFileSound); break; } else { er=GetLastError(); pa=MarketInfo(OrderSymbol(), MODE_ASK); pb=MarketInfo(OrderSymbol(), MODE_BID); Print("Error(",er,") modifying order: ",ErrorDescription(er),", try ",it); Print("Ask=",pa," Bid=",pb," sy=",OrderSymbol(), " op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp); Sleep(1000*10); } } } } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 30.04.2009 | //| Îïèñàíèå : Âîçâðàùàåò ôëàã ðàçðåøåíèÿ òîðãîâëè ïî âðåìåíè. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| hb - ÷àñû âðåìåíè íà÷àëà òîðãîâëè | //| mb - ìèíóòû âðåìåíè íà÷àëà òîðãîâëè | //| he - ÷àñû âðåìåíè îêîí÷àíèÿ òîðãîâëè | //| me - ìèíóòû âðåìåíè îêîí÷àíèÿ òîðãîâëè | //+----------------------------------------------------------------------------+ bool isTradeTimeInt(int hb=0, int mb=0, int he=0, int me=0) { datetime db, de; // Âðåìÿ íà÷àëà è îêîí÷àíèÿ ðàáîòû int hc; // ×àñû òåêóùåãî âðåìåíè òîðãîâîãî ñåðâåðà db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+hb+":"+mb); de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+me); hc=TimeHour(TimeCurrent()); if (db>=de) { if (hc>=he) de+=24*60*60; else db-=24*60*60; } if (TimeCurrent()>=db && TimeCurrent()<=de) return(True); else return(False); } //+----------------------------------------------------------------------------+ //| Àâòîð : Þðèé Òîêìàíü , yuriytokman@gmail.com | //+----------------------------------------------------------------------------+ //| Îïèñàíèå : ðàñ÷¸ò ëîòà îò ïðîöåíòà äåïîçèòà | //+----------------------------------------------------------------------------+ double GetLot() { double metod = 0; if(Choice_method)metod = AccountBalance(); else metod = AccountFreeMargin(); double MinLot = MarketInfo(Symbol(),MODE_MINLOT); double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT); double Prots = Risk/100; double Lotsi=MathFloor(metod*Prots/MarketInfo(Symbol(),MODE_MARGINREQUIRED) /MarketInfo(Symbol(),MODE_LOTSTEP))*MarketInfo(Symbol(),MODE_LOTSTEP);// Ëîòû if(Lotsi<MinLot)Lotsi=MinLot; if(Lotsi>MaxLot)Lotsi=MaxLot; return(Lotsi); } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 11.09.2008 | //| Îïèñàíèå : Ïåðåíîñ óðîâíÿ ñòîïà â áåçóáûòîê | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà ( "" - ëþáîé ñèìâîë, | //| NULL - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ ( -1 - ëþáàÿ ïîçèöèÿ) | //| mn - MagicNumber ( -1 - ëþáîé ìàãèê) | //+----------------------------------------------------------------------------+ void MovingInWL(string sy="", int op=-1, int mn=-1) { double po, pp; int i, k=OrdersTotal(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { po=MarketInfo(OrderSymbol(), MODE_POINT); if (OrderType()==OP_BUY) { if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) { pp=MarketInfo(OrderSymbol(), MODE_BID); if (pp-OrderOpenPrice()>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1); } } } if (OrderType()==OP_SELL) { if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) { pp=MarketInfo(OrderSymbol(), MODE_ASK); if (OrderOpenPrice()-pp>LevelProfit*po) { ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1); } } } } } } //+----------------------------------------------------------------------+ //| Îïèñàíèå: Ñîçäàíèå òåêñòîâîé ìåòêè | //| Àâòîð: Þðèé Òîêìàíü | //| e-mail: yuriytokman@gmail.com | //+----------------------------------------------------------------------+ void Label(string name_label, //Èìÿ îáúåêòà. string text_label, //Òåêñò îáüåêòà. int corner = 2, //Hîìåð óãëà ïðèâÿçêè int x = 3, //Pàññòîÿíèå X-êîîðäèíàòû â ïèêñåëÿõ int y = 15, //Pàññòîÿíèå Y-êîîðäèíàòû â ïèêñåëÿõ int font_size = 10, //Ðàçìåð øðèôòà â ïóíêòàõ. string font_name = "Arial", //Íàèìåíîâàíèå øðèôòà. color text_color = LimeGreen //Öâåò òåêñòà. ) { if (ObjectFind(name_label)!=-1) ObjectDelete(name_label); ObjectCreate(name_label,OBJ_LABEL,0,0,0,0,0); ObjectSet(name_label,OBJPROP_CORNER,corner); ObjectSet(name_label,OBJPROP_XDISTANCE,x); ObjectSet(name_label,OBJPROP_YDISTANCE,y); ObjectSetText(name_label,text_label,font_size,font_name,text_color); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
ZigZag
Order Management characteristics:
Checks for the total of open orders
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