/* ñîâåòíèê ïîñòðîåí íà ïðèíöèïå "êà÷åëåé" âõîäèì â ðûíîê, åñëè öåíà èäåò â íàïðàâëåíèè ñäåëêè, òî ïîëó÷àåì ïðîôèò åñëè íåò, òî ÷åðåç koridor îòêðûâàåì ñäåëêó â ïðîòèâîïîëîæåííîì íàïðàâëåíèè îáúåìîì *mul è ò.ä. à âûõîäèòü ïî ðàçíîìó ìîæíî, ðåàëèçîâàíî íåñêîëüêî âàðèàíòîâ âîîáùåì ìàðòèíãåéë, íî â îòëè÷èå îò èëàíà çäåñü ñòðàøíî êîãäà ôëåò */ #property copyright "runik" #property link "ngb2008@mail.ru" //---- input parameters extern string g1="Îñíîâíûå ïàðàìåòðû"; extern int koridor=40; // øàã â ïóíêòàõ ÷åðåç êîòîðûé ýêñïåðò îòêðûâàåò ñäåëêè extern int sl=80; // ñòîïëîññ â ïóíêòàõ extern int tp=40; // òåéêïðîôèò â ïóíêòàõ extern double mul=4; // ìóëüòèïëèêàòîð ëîòîâ, êàæäàÿ ñëåäóþùàÿ ñäåëêà â ñåðèè áîëüøå ïðåäûäóùåé â mul ðàç(à) extern int last=1; // åñëè = 1 òî óìíîæàåì íå ïîñëåäíèé ëîò à âñå îòêðûòûå extern int nh1=10; // äíåâíûå ÷àñû ðàáîòû, íà÷àëî ðàáîòû extern int nh2=21; // êîíåö ðàáîòû, åñëè íå ðàâíû 0, òî îòêðûâàåì ñåðèè ñäåëîê òîëüêî ïî íî÷àì extern string gg="Óïðàâëåíèå äåíüãàìè"; extern double percent=0; // % îò ñ÷åòà êîòîðûì òîðãóåì, ïåðâàÿ ñäåëêà, åñëè 0, òî Lots=0.1 extern double Lots=0.1; // ðàçìåð ëîòà ïåðâîé ñäåëêè â ñåðèè, ïðîãðàììà ñàìà ñêîððåêòèðóåò çíà÷åíèå åñëè ñëèøêîì ìàëåíüêîå èëè ñëèøêîì áîëüøîå, ò.å. äö íå ïîääåðæèâàåò extern int maxtrades=10; // ìàêñèìàëüíîå êîëè÷åñòâî ñäåëîê â ñåðèè extern int LotLim=1000; // ìàêñèìàëüíûé ñóììàðíûé îáúåì ëîòîâ îòêðûòûõ ïîçèöèé int bezub=0; // åñëè 1, ïåðåíîñÿòñÿ ñòîïû â áåçóáûòîê, à ïîòîì âñå òðàëèòñÿ extern int TrailingStop=30; // òðåéëèíãñòîï 0 èëè >0 double SpeedCoeff=0; extern double profit=0; // â âàëþòå äåïîçèòà, åñëè ïî ñåðèè ñäåëîê ïðîôèò äîñòèã îïðåäåëåííîé âåëè÷èíû, òî âûõîäèì extern int locprofit=0; // â ïóíêòàõ, åñëè ïî ñåðèè ñäåëîê äîñòèãíóò óðîâåíü áåçóáûòêà + 15 ïóíêòîâ, âûõîäèì è çàêðûâàåìñÿ, åñëè =0 òî âûõîäèì ïî ñòîïó è ïðîôèòó extern int locprofitexpo=0; // â ïóíêòàõ, åñëè locprofit >0 (íàïðèìåð locprofit=40) è =5 ïóíêòîâ, ò.å. ÷åì áîëüøå ñäåëîê îòêðûòî òåì áûñòðåå íàì íàäî âûéòè !!! //ò.å. óìåíüøàåì locprofit íà ýòó âåëè÷èíó ïðè îòêðûòèè êàæäîé ñëåäóþùåé ñäåëêè extern int runotsuda=0; // åñëè ìû îòêðûëè íàïðèìåð 5 ñäåëêó, òî íàäî óõîäèòü ñ ðûíêà è çàêðûâàåìñÿ åñëè âûõîäèì â + extern double minsum=100; // åñëè íà äåïîçèòå ñóììà ìåíüøå, òî ýêñïåðò ïåðåñòàåò ðàáîòàòü extern string bb="Ìàëîçíà÷èìûå ïåðåìåííûå"; extern int mn=575; // ìàãè÷åñêîå ÷èñëî extern int slipage=2; // ïðîñêàëüçûâàíèå extern int clod=0; // ïðè =1 çàêðûâàþòñÿ âñå ñäåëêè, èñïîëüçóåòñÿ â ïðîãðàììå è áûâàåò íóæíî âñå çàêðûòü, à ðóêàìè ëåíü extern int NumberOfTries=10; // êîëè÷åñòâî ïîïûòîê ïîñòàíîâêè îðäåðà int BrokerDecimal = 1; double allb=0; double alls=0; double allbn=0; double allsn=0; double nulpoint=0; int onepoint=1; double LastSL=0; double LastTP=0; int opentrades=0; int lastok=0; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- // Åñëè áðîêåð äàåò êîòèðîâêè ïî âàëþòå ñ òî÷íîñòüþ â ïÿòü çíàêîâ - ïèïñ áóäåò ìåíüøå ñòàíäàðòíîãî â 10 ðàç - ââîäèì ìíîæèòåëü if(Digits==3 || Digits==5) BrokerDecimal=10; // Ïåðåìíîæèòü âñå óðîâíè â ïèïñàõ íà ìíîæèòåëü koridor = koridor * BrokerDecimal; sl = sl * BrokerDecimal; tp = tp * BrokerDecimal; slipage = slipage*BrokerDecimal; onepoint = onepoint*BrokerDecimal; TrailingStop = TrailingStop*BrokerDecimal; locprofit = locprofit*BrokerDecimal; locprofitexpo= locprofitexpo*BrokerDecimal; //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //if (sl<koridor || tp<koridor) return(0); if(DayOfWeek()==0 || DayOfWeek()==6) return(0);// íå ðàáîòàåò â âûõîäíûå äíè. if(AccountFreeMargin()<minsum) // äåíüãè êîí÷èëèñü {Print("We have no money. Free Margin = ", AccountFreeMargin());return(0);} int ot=MyOrdersTotal(mn); //îïðåäåëÿåì êîëè÷åñòâî îðäåðîâ äàííîãî ýêñïåðòà ïî èíñòðóìåíòó if (clod==1) {CloseOrders(mn);} if (ot<1) // íà÷èíàåì ! { if (nh1!=nh2 && nh1!=0 && (Hour()<nh1 || Hour()>nh2)) return(0); opentrades=0; clod=0; if (Close[0]>Close[1]) { if (percent>0) {Lots=AccountBalance()/1000*percent/100;} int ticket=OrderSend(Symbol(),OP_BUY,LotSiz(Lots),Ask,slipage,Ask-sl*Point,Ask+tp*Point,"1",mn,0,Green) ; if (ticket>0){lastok=0;opentrades=opentrades+1;} if (ticket<0){lastok=lastok+1;} return(0); } else { ticket=OrderSend(Symbol(),OP_SELL,LotSiz(Lots),Bid,slipage,Bid+sl*Point,Bid-tp*Point,"1",mn,0,Red); if (ticket>0){lastok=0;opentrades=opentrades+1;} if (ticket<0){lastok=lastok+1;} return(0); } } int cnt=0; int mode=0; double buylot=0;double buyprice=0;double buystoplot=0;double buystopprice=0;double buylimitlot=0;double buylimitprice=0; double selllot=0;double sellprice=0;double sellstoplot=0;double sellstopprice=0;double selllimitlot=0;double selllimitprice=0; string sstc=""; string bstc=""; double buysl=0;double buytp=0;double sellsl=0;double selltp=0; datetime buystoptime=0; datetime sellstoptime=0; int bt=-1;int bst=-1;int blt=-1;int st=-1;int sst=-1;int slt=-1; allb=0; alls=0; double ol=0; if (ot>0)//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// { for(cnt=0;cnt<OrdersTotal();cnt++) // çàïîìèíàåì ïàðàìåòðû îðäåðîâ { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); mode = OrderType(); if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue; if (mode==OP_BUY && OrderMagicNumber() == mn && OrderSymbol()==Symbol()) { ol=OrderLots(); allb=allb+ol; if (buylot<=ol) // çàïîìèíàåì ïàðàìåòðû ñàìîãî áîëüøîãî îòêðûòîãî îðäåðà èëè òàêîãî æå ðàçìåðà îðäåðà, íî ñ áîëüøèì íîìåðîì òèêåòà { buylot=ol; buyprice=OrderOpenPrice(); bt=OrderTicket(); buysl=OrderStopLoss(); buytp=OrderTakeProfit(); } } if (mode==OP_BUYSTOP && OrderMagicNumber() == mn && OrderSymbol()==Symbol() ) { buystoplot=OrderLots(); buystopprice=OrderOpenPrice(); bst=OrderTicket(); buystoptime=OrderOpenTime(); bstc=OrderComment(); } if (mode==OP_SELL && OrderMagicNumber() == mn && OrderSymbol()==Symbol() ) { ol=OrderLots(); alls=alls+ol; if (selllot<=ol) // çàïîìèíàåì ïàðàìåòðû ñàìîãî áîëüøîãî îòêðûòîãî îðäåðà èëè òàêîãî æå ðàçìåðà îðäåðà, íî ñ áîëüøèì íîìåðîì òèêåòà { selllot=ol; sellprice=OrderOpenPrice(); st=OrderTicket(); sellsl=OrderStopLoss(); selltp=OrderTakeProfit(); } } if (mode==OP_SELLSTOP && OrderMagicNumber() == mn && OrderSymbol()==Symbol() ) { sellstoplot=OrderLots(); sellstopprice=OrderOpenPrice(); sst=OrderTicket(); sellstoptime=OrderOpenTime(); sstc=OrderComment(); } } if (TrailingStop>0 && SpeedCoeff>0) { for(cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue; if (OrderMagicNumber() == mn && OrderSymbol()==Symbol()) { KillLoss(OrderTicket(),SpeedCoeff); } } } if (TrailingStop>0 && SpeedCoeff==0) { Tral(); } double SLotsBuy, SLotsSell; SLotsBuy = Balance("buy","Lot"); SLotsSell = Balance("sell","Lot"); if (ot<maxtrades && opentrades<maxtrades && LotLim>(SLotsBuy+SLotsSell) && buystoplot==0 && sellstoplot==0) { if (st<bt) // ïîñëåäíåé îòêðûòà ñäåëêà áàé { double ls1; if (last==1) ls1=LotSiz((SLotsBuy+SLotsSell)*mul); if (last!=1) ls1=LotSiz(buylot*mul); for(int c = 0 ; c < NumberOfTries ; c++) { ticket=OrderSend(Symbol(),OP_SELLSTOP,ls1,buyprice-koridor*Point,slipage,buyprice-koridor*Point+sl*Point,buyprice-koridor*Point-tp*Point,"STOPLIMIT",mn,0,Red); if (ticket>0){opentrades=opentrades+1;break;} if (ticket<0){lastok=lastok+1;} } return(0); } else { if (last==1) ls1=LotSiz((SLotsBuy+SLotsSell)*mul); if (last!=1) ls1=LotSiz(selllot*mul); for(c = 0 ; c < NumberOfTries ; c++) { ticket=OrderSend(Symbol(),OP_BUYSTOP,ls1,sellprice+koridor*Point,slipage,sellprice+koridor*Point-sl*Point,sellprice+koridor*Point+tp*Point,"BUYSTOP",mn,0,Green); if (ticket>0){lastok=0;opentrades=opentrades+1;break;} if (ticket<0){lastok=lastok+1;} } return(0); } } if (locprofit>0 && locprofitexpo==0) Close0(); if (locprofit>0 && locprofitexpo>0) CloseE0(); if (profit>0) CloseP(); if (runotsuda>0 && runotsuda<ot) CloseRun(); if (ot==1 && buylot==0 && selllot==0) // êîãäà âñå ñðàáîòàëî, íî âèñèò îòëîæåííûé { if (bst>0) {OrderDelete(bst); return(0); } if (sst>0) {OrderDelete(sst); return(0); } } } //if (OrdersTotal()>0) //---- return(0); } //+------------------------------------------------------------------+ double Balance(string OrdType, string inf) { double result=0, FProf = 0; int trade; for(trade=OrdersTotal()-1;trade>=0;trade--) { OrderSelect(trade, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=mn) continue; if(OrderSymbol()==Symbol()&&OrderMagicNumber()==mn) { if (OrdType == "buy") { if(OrderType()==OP_BUY) { if (inf=="Balance") result=result+OrderProfit()-OrderSwap()-OrderCommission(); if (inf=="Lot") result=result+OrderLots(); //if (inf=="FP") result=result + (OrderLots()*100000*(OrderTakeProfit()-OrderOpenPrice())/AccountLeverage()); } } if (OrdType == "sell") { if(OrderType()==OP_SELL ) { if (inf=="Balance") result=result+OrderProfit()-OrderSwap()-OrderCommission(); if (inf=="Lot") result=result+OrderLots(); //if (inf=="FP") result=result + (OrderLots()*100000*(-OrderTakeProfit()+OrderOpenPrice())/AccountLeverage()); } } } } return(result); } int CloseOrders(int mn) // ïðîöåäóðà çàêðûòèÿ âñåõ îðäåðîâ { int total = OrdersTotal(); for (int cnt = total-1 ; cnt >= 0 ; cnt--) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber() == mn && OrderSymbol()==Symbol()) { //Print(cnt); if (OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Green); } if (OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Red); } if (OrderType()==OP_BUYSTOP) { OrderDelete(OrderTicket()); } if (OrderType()==OP_SELLSTOP) { OrderDelete(OrderTicket()); } } } return(0); } int MyOrdersTotal(int mn) // ïðîöåäóðà ïîäñ÷åòà âñåõ îðäåðîâ äàííîãî ýêñïåðòà ïî äàííîìó èíñòðóìåíòó { int c=0; int total = OrdersTotal(); for (int cnt = 0 ; cnt < total ; cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if (OrderMagicNumber() == mn && OrderSymbol()==Symbol()) { c++; } } return(c); } double LotSiz(double ltt) { double ls=0; double minlot=MarketInfo(Symbol(), MODE_MINLOT); double maxlot=MarketInfo(Symbol(), MODE_MAXLOT); double steplot=MarketInfo(Symbol(), MODE_LOTSTEP); int LotsDigits = MathCeil(MathAbs(MathLog(steplot)/MathLog(10))); ls = NormalizeDouble(ltt,LotsDigits); if (ltt<minlot) { ls=minlot; } if (ltt>maxlot) { ls=maxlot; } //int LotsDigits = MathCeil(MathAbs(MathLog( MarketInfo(Symbol(),MODE_MINLOT))/MathLog(10))); //Êîëè÷åñòâî çíà÷àùèõ öèôð ïîñëå çàïÿòîé â ðàçìåðå ïîçèöèè. return(ls); } double nulfunc(int mn) // äëÿ ïîäñ÷åòà òî÷êè áåçóáûòî÷íîñòè âñåõ îòêðûòûõ îðäåðîâ (åñëè âñå èõ çàêðûòü ïî ýòîé öåíå òî ïîëó÷èì 0) { double np=0;double f=0; double p=0;double l=0; int m=0; for(int t1=0;t1<OrdersTotal();t1++) { OrderSelect(t1, SELECT_BY_POS, MODE_TRADES); m = OrderType();p=OrderOpenPrice();l=OrderLots();if (m==OP_BUY){l=-l;} if ((m==OP_BUY || m==OP_SELL) && OrderMagicNumber() == mn && OrderSymbol()==Symbol()) { np=np+l*p; f=f+l; } } if (f>0) np=NormalizeDouble(MathAbs(np/f), Digits); // Print(np); return (np); } double CalculateProfit(int mn) { double Profit=0; for(int cnt=OrdersTotal()-1;cnt>=0;cnt--) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=mn) continue; if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn) if(OrderType()==OP_BUY || OrderType()==OP_SELL) { Profit=Profit+OrderProfit(); } } return(Profit); } int Close0() { double nf=nulfunc(mn); double p=CalculateProfit(mn); if (p>0 && nf+locprofit*Point<Bid) CloseOrders(mn); if (p>0 && nf-locprofit*Point>Ask) CloseOrders(mn); } int CloseE0() { int nloc=locprofit-locprofitexpo*MyOrdersTotal(mn)-2; double nf=nulfunc(mn); double p=CalculateProfit(mn); if (p>0 && nf+nloc*Point<Bid) CloseOrders(mn); if (p>0 && nf-nloc*Point>Ask) CloseOrders(mn); } int CloseP() { double p=CalculateProfit(mn); if (p>profit) CloseOrders(mn); } int CloseRun() { double p=CalculateProfit(mn); if (p>0) CloseOrders(mn); } //+------------------------------------------------------------------+ //| ÒÐÅÉËÈÍà KillLoss | //| Ïðèìåíÿåòñÿ íà ó÷àñòêå ëîññîâ. Ñóòü: ñòîïëîññ äâèæåòñÿ íàâñòðå÷ó | //| êóðñó ñî ñêîðîñòüþ äâèæåíèÿ êóðñà õ êîýôôèöèåíò (dSpeedCoeff). | //| Ïðè ýòîì êîýôôèöèåíò ìîæíî "ïðèâÿçàòü" ê ñêîðîñòè óâåëè÷åíèÿ | //| óáûòêà - òàê, ÷òîáû ïðè áûñòðîì ðîñòå ëîññà ïîòåðÿòü ìåíüøå. Ïðè | //| êîýôôèöèåíòå = 1 ñòîïëîññ ñðàáîòàåò ðîâíî ïîñðåäèíå ìåæäó óðîâ- | //| íåì ñòîïëîññà è êóðñîì íà ìîìåíò çàïóñêà ôóíêöèè, ïðè êîýôô.>1 | //| òî÷êà âñòðå÷è êóðñà è ñòîïëîññà áóäåò ñìåùåíà â ñòîðîíó èñõîä- | //| íîãî ïîëîæåíèÿ êóðñà, ïðè êîýôô.<1 - íàîáîðîò, áëèæå ê èñõîäíî- | //| ìó ñòîïëîññó. I_D / Þðèé Äçþáàí http://www.mymmk.com/ | //+------------------------------------------------------------------+ void KillLoss(int iTicket,double dSpeedCoeff) { // ïðîâåðÿåì ïåðåäàííûå çíà÷åíèÿ if ((iTicket==0) || (!OrderSelect(iTicket,SELECT_BY_TICKET)) || (dSpeedCoeff<0.1)) { //Print("Òðåéëèíã ôóíêöèåé KillLoss() íåâîçìîæåí èç-çà íåêîððåêòíîñòè çíà÷åíèé ïåðåäàííûõ åé àðãóìåíòîâ."); return(0); } double dStopPriceDiff; // ðàññòîÿíèå (ïóíêòîâ) ìåæäó êóðñîì è ñòîïëîññîì double dToMove; // êîë-âî ïóíêòîâ, íà êîòîðîå ñëåäóåò ïåðåìåñòèòü ñòîïëîññ // òåêóùèé êóðñ double dBid = MarketInfo(OrderSymbol(),MODE_BID); double dAsk = MarketInfo(OrderSymbol(),MODE_ASK); // òåêóùåå ðàññòîÿíèå ìåæäó êóðñîì è ñòîïëîññîì if (OrderType()==OP_BUY) dStopPriceDiff = dBid - OrderStopLoss(); if (OrderType()==OP_SELL) dStopPriceDiff = (OrderStopLoss() + MarketInfo(OrderSymbol(),MODE_SPREAD)*MarketInfo(OrderSymbol(),MODE_POINT)) - dAsk; // ïðîâåðÿåì, åñëè òèêåò != òèêåòó, ñ êîòîðûì ðàáîòàëè ðàíüøå, çàïîìèíàåì òåêóùåå ðàññòîÿíèå ìåæäó êóðñîì è ñòîïëîññîì if (GlobalVariableGet("zeticket")!=iTicket) { GlobalVariableSet("sldiff",dStopPriceDiff); GlobalVariableSet("zeticket",iTicket); } else { // èòàê, ó íàñ åñòü êîýôôèöèåíò óñêîðåíèÿ èçìåíåíèÿ êóðñà // íà êàæäûé ïóíêò, êîòîðûé ïðîõîäèò êóðñ â ñòîðîíó ëîññà, // ìû äîëæíû ïåðåìåñòèòü ñòîïëîññ åìó íà âñòðå÷ó íà dSpeedCoeff ðàç ïóíêòîâ // (íàïðèìåð, åñëè ëîññ óâåëè÷èëñÿ íà 3 ïóíêòà çà òèê, dSpeedCoeff = 1.5, òî // ñòîïëîññ ïîäòÿãèâàåì íà 3 õ 1.5 = 4.5, îêðóãëÿåì - 5 ï. Åñëè ïîäòÿíóòü íå // óäà¸òñÿ (ñëèøêîì áëèçêî), íè÷åãî íå äåëàåì. // Print("dStopPriceDiff: ",dStopPriceDiff,", sldiff: ",GlobalVariableGet("sldiff")); // êîë-âî ïóíêòîâ, íà êîòîðîå ïðèáëèçèëñÿ êóðñ ê ñòîïëîññó ñ ìîìåíòà ïðåäûäóùåé ïðîâåðêè (òèêà, ïî èäåå) dToMove = (GlobalVariableGet("sldiff") - dStopPriceDiff) / MarketInfo(OrderSymbol(),MODE_POINT); // çàïèñûâàåì íîâîå çíà÷åíèå, íî òîëüêî åñëè îíî óìåíüøèëîñü if (dStopPriceDiff<GlobalVariableGet("sldiff")) GlobalVariableSet("sldiff",dStopPriceDiff); // äàëüøå äåéñòâèÿ íà ñëó÷àé, åñëè ðàññòîÿíèå óìåíüøèëîñü (ò.å. êóðñ ïðèáëèçèëñÿ ê ñòîïëîññó, óáûòîê ðàñòåò) if (dToMove>0) { // ñòîïëîññ, ñîîòâåòñòâåííî, íóæíî òàêæå ïåðåäâèíóòü íà òàêîå æå ðàññòîÿíèå, íî ñ ó÷åòîì êîýôô. óñêîðåíèÿ dToMove = MathRound(dToMove * dSpeedCoeff) * MarketInfo(OrderSymbol(),MODE_POINT); // Print("dToMove: ",dToMove); // òåïåðü ïðîâåðèì, ìîæåì ëè ìû ïîäòÿíóòü ñòîïëîññ íà òàêîå ðàññòîÿíèå if (OrderType()==OP_BUY) { if (dBid - (OrderStopLoss() + dToMove)>MarketInfo(OrderSymbol(),MODE_STOPLEVEL)* MarketInfo(OrderSymbol(),MODE_POINT)) OrderModify(iTicket,OrderOpenPrice(),OrderStopLoss() + dToMove,OrderTakeProfit(),OrderExpiration()); } if (OrderType()==OP_SELL) { if ((OrderStopLoss() - dToMove) - dAsk>MarketInfo(OrderSymbol(),MODE_STOPLEVEL) * MarketInfo(OrderSymbol(),MODE_POINT)) OrderModify(iTicket,OrderOpenPrice(),OrderStopLoss() - dToMove,OrderTakeProfit(),OrderExpiration()); } } } } int Tral() { if (Ask>TrailingStop*Point) // öåíà óøëà ââåðõ { for(int cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); int mode = OrderType(); if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue; if (mode==OP_BUY && OrderMagicNumber() == mn && OrderSymbol()==Symbol()) { if (Bid-OrderStopLoss()>TrailingStop*Point+onepoint*Point) { OrderModify(OrderTicket(),Bid,Bid-TrailingStop*Point,OrderTakeProfit(),0,Green);return(0); } } }// for }//Ask if (Bid<TrailingStop*Point) // öåíà óøëà âíèç { for(cnt=0;cnt<OrdersTotal();cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); mode = OrderType(); if (OrderMagicNumber() != mn || OrderSymbol()!=Symbol()) continue; if (mode==OP_SELL && OrderMagicNumber() == mn && OrderSymbol()==Symbol()) { if (OrderStopLoss()-Ask>TrailingStop*Point+onepoint*Point) { OrderModify(OrderTicket(),Ask,Ask+TrailingStop*Point,OrderTakeProfit(),0,Red);return(0); } } }// for }//Bid }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
It can change open orders parameters, due to possible stepping strategy
Other Features: