//-----------------------------------------------------------------------------+ //| Lock&&PipsingXR_2009.mq4 | //| Copyright © 2009, XrustSolution. | //| http://www.xrust.ucoz.net | //-----------------------------------------------------------------------------+ #property copyright "#Copyright © 2008, XrustSolution.#" #property link "#http://www.xrust.ucoz.net#" #include <stdlib.mqh> //-----------------------------------------------------------------------------+ extern string a="Part One = Skalper"; extern int IndSet1=3; extern int IndSet2=1; extern int F_T_treshold=8; extern int Stoploss=0; extern int Takeprofit=0; extern double Risk =1; extern int TimeFrame=0; extern bool OnBar=true; extern int WlMinute=0; extern string b="Part Two = Locker"; extern bool FullAuto=true; extern int LockMode=1; extern int TotalOrders=50; extern bool CloseLock=false; extern bool Martingale=true; extern string c="Part Three Time and Date "; extern bool TradeOfTime=false; extern string d="Hour start of trading"; extern int StartTrade=19; extern string e="Hour end of trading"; extern int EndTrade=5; extern string f="Date end of trading"; extern string EndTradeData="Enterting Date of End trading in eeee.mm.dd"; extern string h="Language: if true=engleesh,if false=russia"; extern bool EnglLang=false; extern bool SetInfotoDispl=true; extern int TextSize=12; extern string m="Text position to displ"; extern int TextPos =0; extern string n="text color to displ"; extern color TextColor=White; extern bool UseSound=false; extern bool TestInfo=false; extern int MagicFirstOrder=4642; extern int Magik=6559; //-----------------------------------------------------------------------------+ double lot; //----Variables for KimIV funcions --------------------------------------------+ bool print=true; string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà color clOpenBuy = Blue; // Öâåò çíà÷êà îòêðûòèÿ Buy color clOpenSell = Red; // Öâåò çíà÷êà îòêðûòèÿ Sell bool MarketWatch=false; bool gbDisabled = False; // Áëîêèðîâêà int Slippage=3; int NumberOfTry=3; int spread; double StartDepo; string gInf1rus,gInf1engl; string gInfBalansRus,ginfMargineRus,gInfProfitRus,gInfCurrProfitRus,gInfMaxOrdRus,gInfOpenOrdRus,gInfRiscRus; string gInfBalansEngl,ginfMargineEngl,gInfProfitEngl,gInfCurrProfitEngl,gInfMaxOrdEngl,gInfOpenOrdEngl,gInfRiscEngl; color gColor1=LimeGreen; int OpenOrdermax; string gTimeRus,gTimeEngl; bool SetArrow=false; bool Nastroika=true; static int Tpp=10,Sll=10;int Tf;int stoploss,takeprofit;static int PrewTime=0;int Trade=0; double asd1,asd2,asd3;bool arrow;int mno;string LM2=""; //-----------------------------------------------------------------------------+ void init(){ StartDepo=AccountBalance(); OpenOrdermax=TotalOrders; spread=MarketInfo(Symbol(),MODE_SPREAD); if(EndTradeData=="Enterting Date of End trading in eeee.mm.dd"){EndTradeData="";} if (TimeFrame==0) Tf=Period(); if (TimeFrame==1) Tf=30; if (TimeFrame==2) Tf=60; if (TimeFrame==3) Tf=240; if (TimeFrame==4) Tf=1440; if (TimeFrame>=5 && TimeFrame<15 ) Tf=5; if (TimeFrame>=15 && TimeFrame<30 ) Tf=15; if (TimeFrame>=30 && TimeFrame<60 ) Tf=30; if (TimeFrame>=60 && TimeFrame<240 ) Tf=60; if (TimeFrame>=240&& TimeFrame<1440) Tf=240; if (TimeFrame>=1440)Tf=1440; Average(); if(Stoploss==0)stoploss=Sll;else stoploss=Stoploss; if(Takeprofit==0)takeprofit=Tpp;else takeprofit=Takeprofit; if(Digits==3||Digits==5){mno=10;F_T_treshold=F_T_treshold*10;}else{mno=1;} return;} //-----------------------------------------------------------------------------+ void deinit(){return;} //-----------------------------------------------------------------------------+ void start(){static int max;Trade=0; Info(); WL(WlMinute); if(FullAuto){if(AccountBalance()+GrossProfit()<AccountBalance()*0.75){CloseLock=true;}else{CloseLock=false;}} if(Stoploss==0){Average();stoploss=Sll;}else{stoploss=Stoploss;} if(Takeprofit==0){Average();takeprofit=Tpp;}else{takeprofit=Takeprofit;} if(LockMode==0)LM2=" FullAuto"; if(LockMode==1)LM2=" FlatMode"; if(LockMode==2)LM2=" TrandMode"; if(LockMode==3)LM2=" ContrTrand"; string Comm=StringConcatenate("Sl=",stoploss," Tp=",takeprofit," X",PriseChanelWide()," ",LM2); if(SetInfotoDispl){ if(!EnglLang){ SetInfoRus(TextSize,TextPos,TextColor); }else{ SetInfoEngl(TextSize,TextPos,TextColor); } } if(max<OrdersTotal())max=OrdersTotal(); lot=CalcLotsAuto(); if(CountOpOrd("0")>0)if(GrossProfit()>=(takeprofit*CalcLotsAuto()*MarketInfo(Symbol(),MODE_LOTSIZE)/10000)/CountOpOrd("0"))CloseAll(); //if(CountOpOrd("0")>1)if(GrossProfit()>=0)CloseAll(); if(CountOpOrd("0")<1){OpenOrdermax=TotalOrders;} if(OpenOrdermax>AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto())){ OpenOrdermax=(AccountBalance()/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*CalcLotsAuto()));} //=============================================================================+ if(LockMode==1){// Ìîäåëü ïîâåäåíèÿ - ôëåò + //-----------------------------------------------------------------------------+ if(CloseLock){ CloseBy(); DelBigestLoss(); } if(CountOpOrd("0")>1&&CountOpOrd("0")<OpenOrdermax){ if(Martingale)lot=CalcLotsAuto()*PriseChanelWide(); if(OutOfPrise()){ if(PriseDist(stoploss*PriseChanelWide()))if(NearOrdDistanse(stoploss*PriseChanelWide())>0)OpenPosition("",0,lot,0,0,Magik); if(PriseDist(stoploss*PriseChanelWide()))if(NearOrdDistanse(stoploss*PriseChanelWide())<0)OpenPosition("",1,lot,0,0,Magik); }else{ if(PriseDist(stoploss/3))if(MidleOrders(stoploss/3)==0){OpenPosition("",0,lot,0,0,Magik);} if(PriseDist(stoploss/3))if(MidleOrders(stoploss/3)==1){OpenPosition("",1,lot,0,0,Magik);} } } //-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+ if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){ if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",0,OrdLot(),0,0,Magik,Comm); if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",1,OrdLot(),0,0,Magik,Comm); } //-----Óñòàíîâêà ïåðâîãî îðäåðà------------------------------------------------+ if(TradeTime()){ if(EndTradeForDateTime())return; if(CountOpOrd("",MagicFirstOrder,-1)<1){ FirstTrade(); if(Trade<0){OpenPosition("",1,lot,0,0,MagicFirstOrder,Comm);return;} if(Trade>0){OpenPosition("",0,lot,0,0,MagicFirstOrder,Comm);return;} } } //-----------------------------------------------------------------------------+ } //=============================================================================+ if(LockMode==2){// Ìîäåëü ïîâåäåíèÿ - òðåíä + //-----------------------------------------------------------------------------+ if(CountOpOrd("0")>1&&CountOpOrd("0")<OpenOrdermax){ if(CloseLock){ CloseBy(); DelBigestLoss(); } if(NevBar())if(SetArrow)SetArrow("NullProfitDot",4,1,0,NullDot(),White); if(Martingale)lot=CalcLotsAuto()*PriseChanelWide(); if(OutOfPrise()){ if(OutOfPrise())if(NearOrdDistanse(stoploss/PriseChanelWide())<0)if(PriseDist(stoploss/PriseChanelWide()))OpenPosition("",0,lot,0,0,Magik); if(OutOfPrise())if(NearOrdDistanse(stoploss/PriseChanelWide())>0)if(PriseDist(stoploss/PriseChanelWide()))OpenPosition("",1,lot,0,0,Magik); }else{ if(PriseDist(stoploss/PriseChanelWide()/2))if(MidleOrders(stoploss/PriseChanelWide()/2)==0){OpenPosition("",0,lot,0,0,Magik);} if(PriseDist(stoploss/PriseChanelWide()/2))if(MidleOrders(stoploss/PriseChanelWide()/2)==1){OpenPosition("",1,lot,0,0,Magik);} } } //-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+ if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){ if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",0,OrdLot(),0,0,Magik,Comm); if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",1,OrdLot(),0,0,Magik,Comm); } //-----Óñòàíîâêà ïåðâîãî îðäåðà------------------------------------------------+ if(TradeTime()){ if(EndTradeForDateTime())return; if(CountOpOrd("0",MagicFirstOrder)<1){ FirstTrade(); if(Trade<0){OpenPosition("",1,lot,0,0,MagicFirstOrder,Comm);return;} if(Trade>0){OpenPosition("",0,lot,0,0,MagicFirstOrder,Comm);return;} } } //-----------------------------------------------------------------------------+ } //=============================================================================+ if(LockMode==3){// Ìîäåëü ïîâåäåíèÿ - Êîíòð òðåíä + //-----------------------------------------------------------------------------+ if(CountOpOrd("0")>1&&CountOpOrd("0")<OpenOrdermax){ if(CloseLock){ CloseBy(); DelBigestLoss(); } if(NevBar())if(SetArrow)SetArrow("NullProfitDot",4,1,0,NullDot(),White); if(Martingale)lot=CalcLotsAuto()*PriseChanelWide(); if(OutOfPrise()){ if(OutOfPrise())if(NearOrdDistanse(stoploss*PriseChanelWide())>0)if(PriseDist(stoploss*PriseChanelWide()))OpenPosition("",0,lot,0,0,Magik); if(OutOfPrise())if(NearOrdDistanse(stoploss*PriseChanelWide())<0)if(PriseDist(stoploss*PriseChanelWide()))OpenPosition("",1,lot,0,0,Magik); }else{ if(PriseDist(stoploss/PriseChanelWide()/4))if(MidleOrders(stoploss/PriseChanelWide()/4)==0){OpenPosition("",0,lot,0,0,Magik);} if(PriseDist(stoploss/PriseChanelWide()/4))if(MidleOrders(stoploss/PriseChanelWide()/4)==1){OpenPosition("",1,lot,0,0,Magik);} } } //-----Óñòàíîâêà âòîðîãî îðäåðà------------------------------------------------+ if(CountOpOrd("0",MagicFirstOrder)==1&&CountOpOrd("0",Magik)<1){ if(IfOrdstoploss()<0)if(PriseDist(stoploss))OpenPosition("",0,OrdLot(),0,0,Magik,Comm); if(IfOrdstoploss()>0)if(PriseDist(stoploss))OpenPosition("",1,OrdLot(),0,0,Magik,Comm); } //-----Óñòàíîâêà ïåðâîãî îðäåðà------------------------------------------------+ if(TradeTime()){ if(EndTradeForDateTime())return; if(CountOpOrd("0",MagicFirstOrder)<1){ FirstTrade(); if(Trade<0){OpenPosition("",1,lot,0,0,MagicFirstOrder,Comm);return;} if(Trade>0){OpenPosition("",0,lot,0,0,MagicFirstOrder,Comm);return;} } } //-----------------------------------------------------------------------------+ } //=============================================================================+ if(TestInfo){ Testinfo(); if(IsTesting()){ if(arrow){ SetArrow("Ama1_",4,1,1,AMA(IndSet1,30,9,25,150,Tf,1),White); SetArrow("Ama2_",4,1,1,AMA(IndSet1+IndSet2,30,9,25,150,Tf,1),Red); } } } return;} double gPorog,gRes1,gRes2,gRes3; //+----------------------------------------------------------------------------+ // Òåñòîâàÿ èíôîðìàöèÿ | //-----------------------------------------------------------------------------+ void Testinfo(){ static double maxdrdn,maxprofit; static int maxord; int totalord,openord; if(GrossProfit()<maxdrdn){maxdrdn=GrossProfit();} if(GrossProfit()>maxprofit){maxprofit=GrossProfit();} if(OrdersTotal()>maxord){maxord=OrdersTotal();} string LM=""; if(LockMode==0)LM=" FullAuto"; if(LockMode==1)LM=" FlatMode"; if(LockMode==2)LM=" TrandMode"; if(LockMode==3)LM=" ContrTrand"; string Stl; if(CloseLock){Stl="TRUE";}else{ Stl="FALSE";} Comment( "Balanse =",DoubleToStr(AccountBalance()+GrossProfit(),1),"\n", "CurrDrdn =",GrossProfit(-1),"\n", "MaxDrdn =",maxdrdn,"\n", "CurrProfit =",GrossProfit(1),"\n", "MaxProfit =",maxprofit,"\n", "OpenOrders =",OrdersTotal(),"\n", "MaxOpenOrd =",maxord,"\n", "TotalOrders =",OrdersTotal()+OrdersHistoryTotal(),"\n", "TakeProfit =",takeprofit,"\n", "stoplos =",stoploss,"\n", "LockMode =",LockMode,LM,"\n", "CloseLock =",Stl,"\n", "PriseChanelWide =",PriseChanelWide(),"\n", "RelProfit =",histcount(),"\n", "Setporog =",F_T_treshold,"\n", "Porog =",gPorog,"\n", "Res1 =",gRes1,"\n", "Res2 =",gRes2,"\n", "Res3 =",gRes3 ); return; } //-----------------------------------------------------------------------------+ double histcount(){double count=0,counttotal=0; for(int i=0;i<OrdersHistoryTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){ if(OrderSymbol()==Symbol()){ counttotal++; if(OrderMagicNumber()==MagicFirstOrder){ count++; counttotal--; } } } } if(count==0){count=1;} if(counttotal==0){counttotal=1;} double res=count/counttotal; return(res); } //-----------------------------------------------------------------------------+ // Ñðåäíèå çíà÷åíèÿ Õàé-Ëîâ è Îïåí-Êëîçå | //-----------------------------------------------------------------------------+ void Average(){ Sll=(MathAbs(iHigh(Symbol(),60,1 )-iLow(Symbol(),60,1) )/Point +MathAbs(iHigh(Symbol(),60,24)-iLow(Symbol(),60,24))/Point +MathAbs(iHigh(Symbol(),60,48)-iLow(Symbol(),60,48))/Point +MathAbs(iHigh(Symbol(),60,72)-iLow(Symbol(),60,72))/Point +MathAbs(iHigh(Symbol(),60,96)-iLow(Symbol(),60,96))/Point)/5; //if(LockMode==2){Sll=Sll*2;} Tpp=(MathAbs(iOpen(Symbol(),60,1 )-iClose(Symbol(),60,1) )/Point +MathAbs(iOpen(Symbol(),60,24)-iClose(Symbol(),60,24))/Point +MathAbs(iOpen(Symbol(),60,48)-iClose(Symbol(),60,48))/Point +MathAbs(iOpen(Symbol(),60,72)-iClose(Symbol(),60,72))/Point +MathAbs(iOpen(Symbol(),60,96)-iClose(Symbol(),60,96))/Point)/5/2; //if(LockMode==2){Tpp=Tpp*2;} return; } //-----------------------------------------------------------------------------+ // Áåçóáûòîê | //-----------------------------------------------------------------------------+ void WL(int min=0){ if(min==0)return; if(OrdersTotal()<1)return; if(OrdersTotal()>1)return; double stop=MarketInfo(Symbol(),MODE_STOPLEVEL)+MarketInfo(Symbol(),MODE_SPREAD); for(int i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MagicFirstOrder){ if(TimeCurrent()-OrderOpenTime()>min*60){ if(OrderProfit()>0){ if(OrderStopLoss()!=OrderOpenPrice()){ if(MathAbs(OrderOpenPrice()-Bid)/Point>stop){ OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,White); return; } } } } } } } } return; } //-----------------------------------------------------------------------------+ void FirstTrade(){int period=(stoploss+takeprofit)/2;double Ma;static int napr=0; if(OnBar)if(PrewTime==iTime(NULL,Tf,0)) return(0); PrewTime=iTime(NULL,Tf,0); Trade=0; int x,p; double Ama1[3],Ama2[3];int res[3]; for(x=1;x<=3;x++){ Ama1[x-1]=AMA(IndSet1,30,9,25,150,Tf,x);//iCustom(Symbol(),Tf,"AMA STL",zxc,30,9,25,300,0,x);// Ama2[x-1]=AMA(IndSet1+IndSet2,30,9,25,150,Tf,x);//iCustom(Symbol(),Tf,"AMA STL",zxc+zxc2,30,9,25,300,0,x);// } res[0]=(Ama1[0]-Ama2[0])/Point; res[1]=(Ama1[1]-Ama2[1])/Point; res[2]=(Ama1[2]-Ama2[2])/Point; gPorog=res[0]-res[1]; gRes1=res[0]; gRes2=res[1]; gRes3=res[2]; if(IsTesting()){ if(TestInfo){ arrow=false; SetArrow("Ama1_",4,1,1,AMA(IndSet1,30,9,25,150,Tf,1),White); SetArrow("Ama2_",4,1,1,AMA(IndSet1+IndSet2,30,9,25,150,Tf,1),Red); arrow=true; } } //-----------------------------------------+ // Îïðåäåëèòåëüìîäåëè ïîâåäåíèÿ | //-----------------------------------------+ if(FullAuto){ if(Ama1[0]==Ama1[1]&&Ama1[1]==Ama1[2]){ if(res[0]==res[1]&&res[1]==res[2]){LockMode=1;} }else{ if(res[0]!=res[1]&&res[1]!=res[2]){LockMode=3;} if(res[0]==res[1]&&res[1]==res[2]){LockMode=2;} } } //-----------------------------------------+ // Ìîäåëü Êîíòð Òðåíä | //-----------------------------------------+ if(LockMode==3){ if(Ama1[0]>Ama1[1]&&Ama1[1]>Ama1[2]){ //if(res[0]>0&&res[1]>0&&res[2]>0){ if(res[0]>res[1]&&res[1]>res[2]){ if(iLow(Symbol(),Tf,1)>Ama1[0]){ Trade=1; return; } } //} } if(Ama1[0]<Ama1[1]&&Ama1[1]<Ama1[2]){ //if(res[0]<0&&res[1]<0&&res[2]<0){ if(res[0]<res[1]&&res[1]<res[2]){ if(iHigh(Symbol(),Tf,1)<Ama1[0]){ Trade=-1; return; } } //} } Trade=0; return; } //-----------------------------------------+ // Ìîäåëü Òðåíä | //-----------------------------------------+ if(LockMode==2){ if(Ama1[0]>Ama1[1]&&Ama1[1]>Ama1[2]){ if(res[0]>0&&res[1]>0&&res[2]>0){ if(res[0]>=res[1]&&res[1]>=res[2]){ if(iLow(Symbol(),Tf,1)>Ama1[0]){ Trade=1; return; } } } } if(Ama1[0]<Ama1[1]&&Ama1[1]<Ama1[2]){ if(res[0]<0&&res[1]<0&&res[2]<0){ if(res[0]<=res[1]&&res[1]<=res[2]){ if(iHigh(Symbol(),Tf,1)<Ama1[0]){ Trade=(-1); return; } } } } Trade=0; return; } //-----------------------------------------+ // Ìîäåëü Ôëåò | //-----------------------------------------+ if(LockMode==1){ if(Ama1[0]==Ama1[1]&&Ama1[1]==Ama1[2]){ if(res[0]==res[1]&&res[1]==res[2]){ if(res[0]>=0&&res[1]>=0&&res[2]>=0){ if(res[0]<=F_T_treshold){ if(iClose(Symbol(),Tf,1)<Ama2[0]){ Trade=1; return; } } } } if(res[0]==res[1]&&res[1]==res[2]){ if(res[0]<=0&&res[1]<=0&&res[2]<=0){ if(res[0]>=(-1*F_T_treshold)){ if(iClose(Symbol(),Tf,1)>Ama1[0]){ Trade=(-1); return; } } } } } } Trade=0; return; } //-----------------------------------------------------------------------------------------------------------+ double AMA(int FastMA = 2,int SlowMA = 30,int Range = 9,int filter = 25,int NBars = 300,int Tf = 0,int Chift=1){ double fAMA[]; double mAMA[]; int cb, i; double k1, k2, Noise, ER, SSC, AMA, sdAMA, dAMA; //----------------------------------------------------- ArrayResize(fAMA,NBars+1); ArrayResize(mAMA,NBars+1); ArrayInitialize(fAMA,0); ArrayInitialize(mAMA,0); ArrayIsSeries(fAMA); ArrayIsSeries(mAMA); k1 = 2.0 / (SlowMA + 1); k2 = 2.0 / (FastMA + 1) - k1; AMA = iClose(Symbol(),Tf,NBars-Range); mAMA[NBars-Range] = iClose(Symbol(),Tf,NBars-Range+1); //----------------------------------------------------- for(cb = NBars; cb >= 0; cb--){ Noise = 0; for(i=cb;i<=cb+Range-1;i++){Noise=Noise+MathAbs(iClose(Symbol(),Tf,i)-iClose(Symbol(),Tf,i+1));} if(Noise!=0){ER = MathAbs(iClose(Symbol(),Tf,cb) - iClose(Symbol(),Tf,cb+Range)) / Noise;}else{ER = 0;} SSC=(ER*k2 + k1); AMA=AMA+NormalizeDouble(SSC*SSC*(iClose(Symbol(),Tf,cb) - AMA), 4); mAMA[cb] = AMA; if(filter < 1){ fAMA[cb] = mAMA[cb]; if(cb==Chift)return(fAMA[cb]); }else{ for(i=cb;i<=cb+SlowMA-1;i++){sdAMA = sdAMA + MathAbs(mAMA[i] - mAMA[i+1]);} dAMA=mAMA[cb]-mAMA[cb+1]; if(dAMA>=0){ if(dAMA < NormalizeDouble(filter*sdAMA / (100*SlowMA), 4) && iHigh(Symbol(),Tf,cb) <= iHigh(Symbol(),Tf,iHighest(NULL, 0, MODE_HIGH, 4, cb)) + 10*Point){ fAMA[cb] = fAMA[cb+1]; if(cb==Chift)return(fAMA[cb]); }else{ fAMA[cb] = mAMA[cb]; if(cb==Chift)return(fAMA[cb]); }//if(dAMA < Normaliz }else{ if(MathAbs(dAMA) < NormalizeDouble(filter*sdAMA / (100*SlowMA), 4) && iLow(Symbol(),Tf,cb) > iLow(Symbol(),Tf,iLowest(NULL, 0, MODE_LOW, 4, cb)) - 10*Point){ fAMA[cb] = fAMA[cb+1]; if(cb==Chift)return(fAMA[cb]); }else{ fAMA[cb] = mAMA[cb]; if(cb==Chift)return(fAMA[cb]); } } sdAMA=0.0; }//for(i=cb;i<=cb+Range-1;i++) }//for(cb = NBars; cb >= 0; cb--){ return(fAMA[Chift]); } //-----------------------------------------------------------------------------+ // Âûâîäèò èíôîðìàöèþ íà ýêðàí íà ðóññêîì | //-----------------------------------------------------------------------------+ void SetInfoRus(int size=9,int pos=0,color col=Green){ int pos0=0,pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9; int sz=size/2; pos1=pos0+sz+size; pos2=pos1+sz+size; pos3=pos2+sz+size; pos4=pos3+sz+size; pos5=pos4+sz+size; pos6=pos5+sz+size; pos7=pos6+sz+size; pos8=pos7+sz+size; pos9=pos8+sz+size; SetLabel("LabRu0","Lock&&ScalpingXR_v_2009_Rus \xA9", Yellow, 5,pos0 , pos, size); SetLabel("LabRu1",gInfBalansRus, col, 5,pos1 , pos, size); SetLabel("LabRu2",ginfMargineRus, col, 5, pos2, pos, size); SetLabel("LabRu3",gInfProfitRus, col, 5, pos3, pos, size); SetLabel("LabRu4",gInfCurrProfitRus, col, 5, pos4, pos, size); SetLabel("LabRu5",gInfMaxOrdRus, col, 5, pos5, pos, size); SetLabel("LabRu6",gInfOpenOrdRus, col, 5, pos6, pos, size); SetLabel("LabRu7",gInfRiscRus, col, 5, pos7, pos, size); SetLabel("LabRu8",gInf1rus, gColor1, 5, pos8, pos, size); SetLabel("LabRu9",gTimeRus, gColor1, 5, pos9, pos, size); return; } //-----------------------------------------------------------------------------+ // Âûâîäèò èíôîðìàöèþ íà ýêðàí íà àíãëèéñêîì | //-----------------------------------------------------------------------------+ void SetInfoEngl(int size=9,int pos=0,color col=Green){ int pos0=0,pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9; int sz=size/2; pos1=pos0+sz+size; pos2=pos1+sz+size; pos3=pos2+sz+size; pos4=pos3+sz+size; pos5=pos4+sz+size; pos6=pos5+sz+size; pos7=pos6+sz+size; pos8=pos7+sz+size; pos9=pos8+sz+size; SetLabel("LabRu0","Lock&&ScalpingXR_v_2009_Rus \xA9", Yellow, 5,pos0 , pos, size); SetLabel("LabRu1",gInfBalansEngl, col, 5,pos1 , pos, size); SetLabel("LabRu2",ginfMargineEngl, col, 5, pos2, pos, size); SetLabel("LabRu3",gInfProfitEngl, col, 5, pos3, pos, size); SetLabel("LabRu4",gInfCurrProfitEngl, col, 5, pos4, pos, size); SetLabel("LabRu5",gInfMaxOrdEngl, col, 5, pos5, pos, size); SetLabel("LabRu6",gInfOpenOrdEngl, col, 5, pos6, pos, size); SetLabel("LabRu7",gInfRiscEngl, col, 5, pos7, pos, size); SetLabel("LabRu8",gInf1engl, gColor1, 5, pos8, pos, size); SetLabel("LabRu9",gTimeEngl, gColor1, 5, pos9, pos, size); return; } //-----------------------------------------------------------------------------+ // Âûâîäèò èíôîðìàöèþ íà ýêðàí | //-----------------------------------------------------------------------------+ void Info(){ gInfBalansRus="Âñåãî ñðåäñòâ ="+(DoubleToStr(AccountBalance()+GrossProfit(),1)); ginfMargineRus="Ñâîáîäíûõ ñðåäñâ ="+(DoubleToStr(AccountFreeMargin(),1)); gInfProfitRus="Òåêóùàÿ ïðèáûëü ="+(DoubleToStr(GrossProfit(),1)); gInfCurrProfitRus="Ïðèáûëü ñ íà÷àëà òîðãîâëè ="+(DoubleToStr(AccountBalance()-StartDepo,1)); gInfMaxOrdRus="Ìàêñèìàëüíî îðäåðîâ ="+DoubleToStr(OpenOrdermax,0)+" Øò"; gInfOpenOrdRus="Îòêðûòûõ îðäåðîâ ="+CountOpOrd("0")+"Pc."; gInfRiscRus="Ðèñê ="+DoubleToStr(Risk,1)+" %"; //-----------------------------------------------------------------------------+ gInfBalansEngl="Account balanse ="+(DoubleToStr(AccountBalance()+GrossProfit(),1)); ginfMargineEngl="Account free margine ="+(DoubleToStr(AccountFreeMargin(),1)); gInfProfitEngl="current profit ="+(DoubleToStr(GrossProfit(),1)); gInfCurrProfitEngl="profit from the start of trading ="+(DoubleToStr(AccountBalance()-StartDepo,1)); gInfMaxOrdEngl="Orders for open maximum ="+DoubleToStr(OpenOrdermax,0)+" Ps"; gInfOpenOrdEngl="Count open orders ="+CountOpOrd("0")+"Pc."; gInfRiscEngl="Risk = "+DoubleToStr(Risk,1)+" %"; } //-----------------------------------------------------------------------------+ // Îïðåäåëÿåò äàòó êîíöà òîðãîâëè | //-----------------------------------------------------------------------------+ bool EndTradeForDateTime(){ if(EndTradeData==""){ gInf1rus="Äàòà êîíöà òîðãîâëè íå îïðåäåëåíà "; gInf1engl="Date of the end of trading is not defined "; gColor1=LimeGreen; return(false); } int EndData=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)); int DataEnd=StrToTime(EndTradeData); if(EndData>=DataEnd){ gInf1rus="Òîðãîâëÿ îñòàíîâëåííà "+EndTradeData; gInf1engl="Trading stopped "+EndTradeData; gColor1=Red; return(true); } gInf1rus="Òîðãîâëÿ áóäåò îñòàíîâëåííà "+EndTradeData; gInf1engl="Trading will be stopped "+EndTradeData; gColor1=LimeGreen; return(false); } //-----------------------------------------------------------------------------+ // Òî÷êà ðàâíîâåñèÿ | //-----------------------------------------------------------------------------+ double NullDot(){double prise=0;int count=0,countlot=0; if(OrdersTotal()<1){return(Bid);} double MinLot=MarketInfo(Symbol(),MODE_MINLOT); for(int i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ countlot=(OrderLots()/MinLot); count=count+countlot; prise=prise+(OrderOpenPrice()*countlot); } } } prise=prise/count; return(prise); } //+------------------------------------------------------------------+ //| Óñòàíîâêà ñòðåëîê | //+------------------------------------------------------------------+ void SetArrow(string nm,int kod,int razm,int bar,double prs,color col){ //if(!DriveArrow)return; string Name=StringConcatenate(nm,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)); ObjectCreate(Name,OBJ_ARROW,0,0,0,0,0,0,0); ObjectSet(Name,OBJPROP_ARROWCODE,kod); ObjectSet(Name,OBJPROP_STYLE,DRAW_ARROW); ObjectSet(Name,OBJPROP_TIME1,Time[bar]); ObjectSet(Name,OBJPROP_PRICE1,prs); ObjectSet(Name,OBJPROP_WIDTH,razm); ObjectSet(Name,OBJPROP_COLOR,col); return;} //-----------------------------------------------------------------------------+ // Ôóíêöèÿ êîíòðîëÿ âðåìåíè òîðãîâëè | //-----------------------------------------------------------------------------+ bool TradeTime(){ int StartTradeHour=StartTrade; int EndTradeHour=EndTrade; if(!TradeOfTime){ if(DayOfWeek()==6||DayOfWeek()==0){ gTimeEngl="Start trade in 01:00 am"; gTimeRus="Íà÷àëî òîðãîâëè â ïîíåäåëüíèê â 01:00"; return(false);} return(true);} if(DayOfWeek()==6||DayOfWeek()==0){ gTimeEngl="Start trade in 01:00 am"; gTimeRus="Íà÷àëî òîðãîâëè â ïîíåäåëüíèê â 01:00"; return(false);} if(StartTradeHour<EndTradeHour){ if(TimeHour(TimeCurrent())>=StartTradeHour&&TimeHour(TimeCurrent())<EndTradeHour ||(CountOpOrd("0")>0)){ gTimeEngl=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours"); gTimeRus=StringConcatenate("Äî êîíöà òîðãîâîé ñåññèè :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," ÷àñîâ"); return(true);}} if(StartTradeHour>EndTradeHour){ if(TimeHour(TimeCurrent())>=StartTradeHour||TimeHour(TimeCurrent())<EndTradeHour ||(CountOpOrd("0")>0)){ gTimeEngl=StringConcatenate("By the end of trading session :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," hours"); gTimeRus=StringConcatenate("Äî êîíöà òîðãîâîé ñåññèè :",DoubleToStr((EndTradeHour-TimeHour(TimeCurrent())),0)," ÷àñîâ"); return(true);}} gTimeEngl=StringConcatenate("resting to : ",StartTradeHour,": 00"); gTimeRus=StringConcatenate("îòäûõàåì äî : ",StartTradeHour,": 00"); return(false); } //+----------------------------------------------------------------------------+ // Äàò÷èê Øèðèíû êîðèäîðà óñòàíîâëåííûõ îðäåðîâ + //-----------------------------------------------------------------------------+ int PriseChanelWide(){double minprise=100000,maxprise=0; for(int n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){ if(minprise>OrderOpenPrice()){minprise=OrderOpenPrice();} if(maxprise<OrderOpenPrice()){maxprise=OrderOpenPrice();} } } } } int x=MathRound(((maxprise-minprise)/Point)/stoploss); if(x<1)x=1; return(x); } //+----------------------------------------------------------------------------+ // Ôóíêöèÿ âîçâðàùàåò ñðåäíþþ öåíó ìåæäó áëèçæàéøèìè îðäåðàìè + //-----------------------------------------------------------------------------+ int MidleOrders(int OrdDist=10){ if(OrdersTotal()<2){return(-1);} double dist1=100000,dist2=1000000;int typ1,typ2,magik1,magik2; for(int n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderOpenPrice()-Bid>0){ if(OrderOpenPrice()-Bid<dist1){ dist1=OrderOpenPrice()-Bid; typ1=OrderType(); magik1=OrderMagicNumber(); } } } } } for(n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(Bid-OrderOpenPrice()>0){ if(Bid-OrderOpenPrice()<dist2){ dist2=Bid-OrderOpenPrice(); typ2=OrderType(); magik2=OrderMagicNumber(); } } } } } dist1=NormalizeDouble(dist1/Point,Digits); dist2=NormalizeDouble(dist2/Point,Digits); if(MathAbs(dist1+dist2)<OrdDist)return(-1); if(typ1==typ2){ if(MathAbs(dist1-dist2)<3){ if(magik1==MagicFirstOrder&&magik2==MagicFirstOrder)return(-1); if(typ1==0){return(0);} if(typ1==1){return(1);} } }else{ if(LockMode==1){ //if(typ1==0){return(0);} //if(typ1==1){return(1);} } } return(-1); } //+----------------------------------------------------------------------------+ // Ïîäñ÷èòûâàåò Îáùóþ íå ðåàëèçîâàííóþ ïðèáûëü íà äàííîì èíñòðóìåíòå + //-----------------------------------------------------------------------------+ double GrossProfit(int prls=0){double grpr=0; if(OrdersTotal()<1){return(-1);} for(int n=OrdersTotal()+1;n>=0;n--){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(IsOrder("",MagicFirstOrder)||IsOrder("",Magik)){ if(prls==0)grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission(); if(prls>0)if(OrderProfit()>0)grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission(); if(prls<0)if(OrderProfit()<0)grpr=grpr+OrderProfit()+OrderSwap()+OrderCommission(); } } } return(grpr); } //+----------------------------------------------------------------------------+ // Çàäàåò äèñòàíöèþ äëÿ ëîêà + //-----------------------------------------------------------------------------+ int NearOrdDistanse(int dist =20){double prise=1000000; if(CountOpOrd("0")<2){return(0);} for(int n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){ if(MathAbs(Bid-OrderOpenPrice())<prise){prise=OrderOpenPrice();} } } } } if(MathAbs(Bid-prise)>dist*Point){ if(Bid-prise>0){return(-1);} if(Bid-prise<0){return(1);} } return(0); } //+----------------------------------------------------------------------------+ // Çàïðåùàåò óñòàíîâêó äâàæäû íà îäíó öåíó + //-----------------------------------------------------------------------------+ bool PriseDist(int dist=20,int older=3){double prise=100000; //if(CountOpOrd("0")<2){return(false);} for(int n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){ if(MathAbs(Bid-OrderOpenPrice())<dist*Point){ if(OrderOpenTime()>Time[older]*OrdersTotal()){return(false);} } } } } } return(true);} //+----------------------------------------------------------------------------+ // Äàò÷èê ïîëîæåíèÿ öåíû âíå êîðèäîðà óñòàíîâëåííûõ îðäåðîâ + //-----------------------------------------------------------------------------+ bool OutOfPrise(){double minprise=100000,maxprise=0; if(OrdersTotal()<2){return(true);} for(int n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){ if(minprise>OrderOpenPrice()){minprise=OrderOpenPrice();} if(maxprise<OrderOpenPrice()){maxprise=OrderOpenPrice();} } } } } if(Bid>minprise&&Bid<maxprise){return(false);} return(true); } //+----------------------------------------------------------------------------+ // Äåòåêòîð Ëîòà ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà | //-----------------------------------------------------------------------------+ double OrdLot(){return(OrderLots());} //+----------------------------------------------------------------------------+ // Äåòåêòîð äîñòèæåíèÿ óðîâíÿ âèðò ñòîïà äëÿ ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà | //-----------------------------------------------------------------------------+ int IfOrdstoploss(){ if(OrderType()==0){if(OrderOpenPrice()-Bid>=stoploss*Point){return(-1);}} if(OrderType()==1){if(Ask-OrderOpenPrice()>=stoploss*Point){return(1);}} return(0); } //-----------------------------------------------------------------------------+ //| Ïîäñ÷èòûâàåò êîëè÷åñòâî îòêðûòûõ îðäåðîâ ñîãëàñíî óñëîâèÿì | //-----------------------------------------------------------------------------+ int CountOpOrd(string Sy="",int Magik=-1,int Typ=-1){int count=0; for(int i=0;i<OrdersTotal();i++){ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(IsOrder(Sy,Magik,Typ))count++; } } return(count); } //-----------------------------------------------------------------------------+ //| ïðîâåðÿåò ðûíî÷íûé îðäåð íà ïðèíàäëåæíîñòü ñîãëàñíî óñëîâèÿì | //-----------------------------------------------------------------------------+ bool IsOrder(string Sy="",int Magik=-1,int Typ=-1){ if(Sy=="0"||Sy==""){Sy=Symbol();} if(OrderSymbol()==Sy){ if(Magik==(-1)||OrderMagicNumber()==Magik){ if(Typ==(-1)||OrderType()==Typ){ if(OrderCloseTime()==0){ return(true); } } } } return(false); } //-----------------------------------------------------------------------------+ //| Ðàñ÷åò ëîòà ñîîòâ ðèñêó è áàëàíñó | //-----------------------------------------------------------------------------+ double CalcLotsAuto(){double LotOpt,LotNeOpt,Zalog; if(IsTesting()||IsOptimization()){if(TestInfo){return(0.1);}} RefreshRates(); //double bs=AccountBalance()+GrPorfit(); double Set=GlobalVariableGet("multi")-GlobalVariableGet("disable"); double Sredstwa =GlobalVariableGet("sredstva"); double lott=MarketInfo(Symbol(),MODE_MARGINREQUIRED)/1000; double Marga=AccountFreeMargin(); double Balans=AccountBalance(); double LotMin=MarketInfo(Symbol(),MODE_MINLOT); double LotMax=MarketInfo(Symbol(),MODE_MAXLOT); double StepLot=MarketInfo(Symbol(),MODE_LOTSTEP); double StopLv=AccountStopoutLevel(); int PrsMinLot=1000*LotMin; if(Sredstwa==0){Sredstwa=Balans;GlobalVariableSet("sredstva",Balans);} if(GlobalVariableGet("multi")>1){Risk=GlobalVariableGet("Risc");} if(Risk<0)Risk=0; if(Risk>100)Risk=100; if(StepLot==0.01){int step=2;}else{step=1;} if(Set<1){Set=1;} //--------------------------- Zalog=(Balans*(Risk/100))/Set; LotOpt=NormalizeDouble((Zalog/1000),step); if(LotOpt>LotMax)LotOpt=LotMax; if(LotOpt<LotMin)LotOpt=LotMin; return(LotOpt); } //+----------------------------------------------------------------------------+ // îäèíî÷íîå Âñòðå÷íîå çàêðûòèå + //-----------------------------------------------------------------------------+ void CloseBy(){ if(CountOpOrd("0")<3)return; if(OutOfPrise())return; double dist1=100000,dist2=100000; double minprise=1000000,maxprise=0; double profit1,profit2,prise1,prise2; int n,ticket1,ticket2,typ1,typ2; //-----Íàõîäèì áëèçæàéøèå ê öåíå 2 îðäåðà--------------------------------------+ for(n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(IsOrder("",MagicFirstOrder)||IsOrder("",Magik)){ if(OrderOpenPrice()-Bid>0&&OrderOpenPrice()-Bid<dist1){ dist1=OrderOpenPrice()-Bid; ticket1=OrderTicket(); typ1=OrderType(); profit1=OrderProfit(); prise1=OrderOpenPrice(); } if(Bid-OrderOpenPrice()>0&&Bid-OrderOpenPrice()<dist2){ dist2=Bid-OrderOpenPrice(); ticket2=OrderTicket(); typ2=OrderType(); profit2=OrderProfit(); prise2=OrderOpenPrice(); } } } } //-----Íàõîäèì êðàéíèå öåíû----------------------------------------------------+ for(n=0;n<OrdersTotal();n++){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ if(OrderMagicNumber()==MagicFirstOrder||OrderMagicNumber()==Magik){ if(minprise>OrderOpenPrice()){minprise=OrderOpenPrice();} if(maxprise<OrderOpenPrice()){maxprise=OrderOpenPrice();} } } } } prise1 =NormalizeDouble(prise1,Digits); prise2 =NormalizeDouble(prise2,Digits); minprise =NormalizeDouble(minprise,Digits); maxprise =NormalizeDouble(maxprise,Digits); profit1 =NormalizeDouble(profit1,2); profit2 =NormalizeDouble(profit2,2); if(typ1==typ2){ if(profit1-profit2==0){ del(ticket1); del(ticket2); //OrderCloseBy(ticket1,ticket2,White); } } return; } //+----------------------------------------------------------------------------+ // Óäàëåíèå ñàìîãî áîëüøîãî ëîñÿ íà ëåòó + //-----------------------------------------------------------------------------+ void DelBigestLoss(){ if(OrdersTotal()<2)return; double lossprofit; int lossticket; double profit[50][2],loss[50][2],prom[50][2]; double pr;int countprofit=0,countloss=0; for(int n=OrdersTotal()+1;n>=0;n--){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ if(IsOrder("",MagicFirstOrder)||IsOrder("",Magik)){ if(OrderProfit()<0){ loss[countloss][0]=OrderProfit(); loss[countloss][1]=OrderTicket(); countloss++; } if(OrderProfit()>0){ profit[countprofit][0]=OrderProfit(); profit[countprofit][1]=OrderTicket(); countprofit++; } } } } countprofit=countprofit-1; countloss=countloss-1; if(countprofit<1)return; if(countloss<1)return; //--Ñîðòèðîâêà ìàññèâà ïðîôèòíûõ îðäåðîâ â ïîðÿäêå âîçðàñòàíèÿ ArrayResize(profit,countprofit); ArrayResize(prom,countprofit); for(n=0;n<countloss;n++){ prom[n][0]=0; prom[n][1]=0; } for(n=0;n<countprofit;n++){ int index=ArrayMaximum(profit); prom[n][0]=profit[index][0]; prom[n][1]=profit[index][1]; profit[index][0]=0; profit[index][1]=0; } for(n=0;n<countloss;n++){ profit[n][0]=0; profit[n][1]=0; } for(n=0;n<countprofit;n++){ profit[n][0]=prom[n][0]; profit[n][1]=prom[n][1]; } //--Ñîðòèðîâêà ëîñåâûõ îðäåðîâ â ïîðÿäêå óáûâàíèÿ index=0; ArrayResize(prom,countloss); ArrayResize(loss,countloss); for(n=0;n<countloss;n++){ prom[n][0]=0; prom[n][1]=0; } for(n=0;n<countloss;n++){ index=ArrayMinimum(loss); prom[n][0]=loss[index][0]; prom[n][1]=loss[index][1]; loss[index][0]=0; loss[index][1]=0; } for(n=0;n<countloss;n++){ loss[n][0]=0; loss[n][1]=0; } for(n=0;n<countloss;n++){ loss[n][0]=prom[n][0]; loss[n][1]=prom[n][1]; } //-----Íàõîæäåíèå ïîäõîäÿùåé êîìáèíàöèè----------------------------------------+ int count;double prpr;bool close=false; for(int x=0;x<countloss/2;x++){ if(loss[x][0]<0){ lossprofit=loss[x][0]; lossticket=loss[x][1]; } for(n=0;n<countprofit;n++){ prpr=prpr+profit[n][0]; count++; if(NormalizeDouble(prpr,2)+NormalizeDouble(lossprofit,2)>=0 &&NormalizeDouble(prpr,2)+NormalizeDouble(lossprofit,2)<1.5)close=true;break; } } if(close){ del(lossticket); for(n=0;n<count;n++){int tick=profit[n][1];del(tick);} return; } return; } //-----------------------------------------------------------------------------+ // Ôóíêöèÿ êîíòðîëÿ íîâîãî áàðà | //-----------------------------------------------------------------------------+ bool NevBar(){ static int PrevTime=0; if (PrevTime==Time[0]) return(false); PrevTime=Time[0]; return(true);} //+----------------------------------------------------------------------------+ // Çàêðûâàåò âñå îðäåðà íà äàííîì èíñòðóìåíòå + //-----------------------------------------------------------------------------+ void CloseAll(){ while(OrdersTotal()>0){ for(int n=OrdersTotal()+1;n>=0;n--){ if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES)){ del(OrderTicket()); } } } return; } //-----------------------------------------------------------------------------+ //Óäàëÿåò ðûíî÷íûé îðäåð ñ óêàçàííûì åé òèêåòîì | //+----------------------------------------------------------------------------+ void del(int ticket){int err; for(int i=0;i<1;i++){ GetLastError();//îáíóëÿåì îøèêó OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES); string symbol = OrderSymbol(); if(OrderType()==OP_BUY){RefreshRates(); double prise = MarketInfo(symbol,MODE_BID); if(!OrderClose(ticket,OrderLots(),prise,3,Green)){err = GetLastError();}} if(OrderType()==OP_SELL){RefreshRates(); prise = MarketInfo(symbol,MODE_ASK); if(!OrderClose(ticket,OrderLots(),prise,3,Green)){err = GetLastError();}} if(err == 0){PlaySound("expert.wav");break;} if(err != 0){PlaySound("timeout.wav");Print("Error for Close Funtion =",err);} while(!IsTradeAllowed()){Sleep(5000);}// åñëè ðûíîê çàíÿò òî ïîäîæäåì 5 ñåê if (err==146) while (IsTradeContextBusy()) Sleep(1000*11); } } //-----------------------------------------------------------------------------+ //___________________ÊÈÌÓ_______ÐÅÑÏÅÊÒ________È_____ÓÂÀÆÓÕÀ___________________| //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 12.10.2007 | //| Îïèñàíèå : Óñòàíîâêà òåêñòîâîé ìåòêè, îáúåêò OBJ_LABEL. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| nm - íàèìåíîâàíèå îáúåêòà | //| tx - òåêñò | //| cl - öâåò ìåòêè | //| xd - êîîðäèíàòà X â ïèêñåëàõ | //| yd - êîîðäèíàòà Y â ïèêñåëàõ | //| cr - íîìåð óãëà ïðèâÿçêè (0 - ëåâûé âåðõíèé, | //| 1 - ïðàâûé âåðõíèé, | //| 2 - ëåâûé íèæíèé, | //| 3 - ïðàâûé íèæíèé ) | //| fs - ðàçìåð øðèôòà (9 - ïî óìîë÷àíèþ ) | //+----------------------------------------------------------------------------+ void SetLabel(string nm, string tx, color cl, int xd, int yd, int cr=0, int fs=9) { if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_LABEL, 0, 0,0); ObjectSetText(nm, tx, fs); ObjectSet(nm, OBJPROP_COLOR , cl); ObjectSet(nm, OBJPROP_XDISTANCE, xd); ObjectSet(nm, OBJPROP_YDISTANCE, yd); ObjectSet(nm, OBJPROP_CORNER , cr); ObjectSet(nm, OBJPROP_FONTSIZE , fs); } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 01.09.2005 | //| Îïèñàíèå : Âûâîä ñîîáùåíèÿ â êîììåíò è â æóðíàë | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| m - òåêñò ñîîáùåíèÿ | //+----------------------------------------------------------------------------+ void Message(string m) { //Comment(m); if (StringLen(m)>0) Print(m); } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 28.11.2006 | //| Îïèñàíèå : Ìîäèôèêàöèÿ îäíîãî ïðåäâàðèòåëüíî âûáðàííîãî îðäåðà. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| pp - öåíà óñòàíîâêè îðäåðà | //| sl - öåíîâîé óðîâåíü ñòîïà | //| tp - öåíîâîé óðîâåíü òåéêà | //| ex - äàòà èñòå÷åíèÿ | //+----------------------------------------------------------------------------+ void ModifyOrder(double pp=-1, double sl=0, double tp=0, datetime ex=0) { bool fm; color cl=White; 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){return;} if ((sl==os&&(os!=0||sl!=0))&& (tp==ot&&(ot!=0||tp!=0))) {return;} for (it=1; it<=NumberOfTry; it++) { //if ((!IsExpertEnabled() || IsStopped())) break; while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); fm=OrderModify(OrderTicket(), pp, sl, tp, ex, cl); if (fm) { if (UseSound) PlaySound(NameFileSound); break; } else { er=GetLastError(); pa=MarketInfo(OrderSymbol(), MODE_ASK); pb=MarketInfo(OrderSymbol(), MODE_BID); if(print){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 | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 06.03.2008 | //| Îïèñàíèå : Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèé | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| 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 | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 01.09.2005 | //| Îïèñàíèå : Âîçâðàùàåò íàèìåíîâàíèå òîðãîâîé îïåðàöèè | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| op - èäåíòèôèêàòîð òîðãîâîé îïåðàöèè | //+----------------------------------------------------------------------------+ string GetNameOP(int op) { switch (op) { case OP_BUY : return("Buy"); case OP_SELL : return("Sell"); case OP_BUYLIMIT : return("BuyLimit"); case OP_SELLLIMIT: return("SellLimit"); case OP_BUYSTOP : return("BuyStop"); case OP_SELLSTOP : return("SellStop"); default : return("Unknown Operation"); } } //+----------------------------------------------------------------------------+ //| Àâòîð : Êèì Èãîðü Â. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Âåðñèÿ : 10.04.2008 | //| Îïèñàíèå : Îòêðûâàåò ïîçèöèþ ïî ðûíî÷íîé öåíå. | //+----------------------------------------------------------------------------+ //| Ïàðàìåòðû: | //| sy - íàèìåíîâàíèå èíñòðóìåíòà (NULL èëè "" - òåêóùèé ñèìâîë) | //| op - îïåðàöèÿ | //| ll - ëîò | //| sl - óðîâåíü ñòîï | //| tp - óðîâåíü òåéê | //| mn - MagicNumber | //+----------------------------------------------------------------------------+ void OpenPosition(string sy, int op, double ll, double Sl=0, double Tp=0, int mn=0,string com="") { color clOpen; datetime ot; double pp, pa, pb, tp ,sl; int dg, err, it, ticket=0; string lsComm=""; if (sy=="" || sy=="0") sy=Symbol(); int stoplevel=MarketInfo(sy,MODE_STOPLEVEL); int spread=MarketInfo(sy,MODE_SPREAD); if(Tp!=0&&Tp<stoplevel+spread){Tp=stoplevel;} if (op<1){ if (Sl>0) {sl=MarketInfo(Symbol(),MODE_ASK)-Sl*Point; }else {sl=0;} if (Tp>0) {tp=MarketInfo(Symbol(),MODE_ASK)+Tp*Point; }else{ tp=0;} }else{ if (Sl>0) {sl=MarketInfo(Symbol(),MODE_BID)+Sl*Point; }else{ sl=0;} if (Tp>0) {tp=MarketInfo(Symbol(),MODE_BID)-Tp*Point;} else {tp=0;}} if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell; for (it=1; it<=NumberOfTry; it++) { if (IsStopped()) { Print("OpenPosition(): Îñòàíîâêà ðàáîòû ôóíêöèè"); break;} while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); dg=MarketInfo(sy, MODE_DIGITS); pa=MarketInfo(sy, MODE_ASK); pb=MarketInfo(sy, MODE_BID); if (op==OP_BUY) pp=pa; else pp=pb; pp=NormalizeDouble(pp, dg); ot=TimeCurrent(); if (MarketWatch) ticket=OrderSend(sy, op, ll, pp, Slippage, 0, 0, com, mn, 0, clOpen); else ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, com, mn, 0, clOpen); if (ticket>0) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); if(err==148){OpenOrdermax=OrdersTotal()-1;return;} if(err==134){OpenOrdermax=OrdersTotal()-1;return;} if (pa==0 && pb==0) Message("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà "+sy); // Âûâîä ñîîáùåíèÿ îá îøèáêå if(print){ Print("Error(",err,") opening position: ",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 (err==2 || err==64 || err==65 || err==133) { gbDisabled=True; break; } // Äëèòåëüíàÿ ïàóçà if (err==4 || err==131 || err==132) { Sleep(1000*300); break; } if (err==128 || err==142 || err==143) { Sleep(1000*66.666); if (ExistPositions(sy, op, mn, ot)) { if (UseSound) PlaySound(NameFileSound); break; } } if (err==140 || err==148 || err==4110 || err==4111) break; if (err==141) Sleep(1000*100); if (err==145) Sleep(1000*17); if (err==146) while (IsTradeContextBusy()) Sleep(1000*11); if (err!=135) Sleep(1000*7.7); } } if (MarketWatch && ticket>0 && (sl>0 || tp>0)) { if (OrderSelect(ticket, SELECT_BY_TICKET)) ModifyOrder(-1, sl, tp); } } //+----------------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains open prices of each bar
Series array that contains close prices for each bar
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
Checks for the total of closed orders
It can change open orders parameters, due to possible stepping strategy
It Closes Orders by itself
It automatically opens orders when conditions are reached
Other Features:
It plays sound alerts