Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Trailing_By_Object_Block
//+------------------------------------------------------------------+
//| Trailing_By_Object_Block.mq4 |
//| Roll |
//+------------------------------------------------------------------+
#property copyright "Roll"
#property link "http://www.mql4.com/ru/users/Roll"
#include <Block_err_130.mqh>
//Sources: 1)Trailing_By_Object.mq4/author Evgeniy Trofimov/http://codebase.mql4.com/ru/6349
//2)Block_err_130/http://codebase.mql4.com/ru/7438
extern int Ticket=1;//Åñëè 1,òî ðàáîòà ñî âñåìè ïîçèöèÿìè èëè Ìàãèê-îðäåðàìè ïî òåêóùåìó èíñòðóìåíòó;åñëè Ticket>1,òî äëÿ îðäåðà ñ îïðåäåëåííûì òèêåòîì;åñëè Ticket=0,òî -STOP expert
extern int Magic=0;//Ìàãèê îðäåðà ïðè Ticket=1
extern bool OunlyPendOrders=true;//Åñëè false-ðàáîòà ñ ðûíî÷íûìè îðäåðàìè,åñëè true-ñ îòëîæåííûìè.
extern bool MarketSL_TP=true;//ïîñò.ðàáîòà ñ SL è TP ðûíî÷íûõ îðäåðîâ
extern bool DeleteObjectSL_TP_cross=true;//ðàçðåøåíèå íà óäàëåíèå cîîòâ.ëèíèè (SL èëè TP) ïîñëå ïåðåñå÷åíèÿ
extern int SleepPage=2;//ïðîñêàëüçûâàíèå â ïóíêòàõ
extern string m1="/==========OP===========/";
extern string NameObject_TREND="MyTrend_OP";//Íàèìåíîâàíèå ëèíèè äëÿ(OP)îòëîæåííîãî(ûõ)îðäåðà(îâ)
extern int SparePips_TREND=8;//Ðàññòîÿíèå îò ñîîòâ.ëèíèè äî ÎÐ îòëîæåííîãî(ûõ)îðäåðà(îâ)â ïóíêòàõ
extern string m2="/==========SL===========/";
extern string NameObject_SL="MyTrend_SL";//Íàèìåíîâàíèå ëèíèè äëÿ SL ðûíî÷íûõ îðäåðîâ
extern int SparePips_SL=8;//Ðàññòîÿíèå îò ñîîòâ.ëèíèè äî SL â ïóíêòàõ
extern bool CloseExtern_SL=false;//Çàêðûâàòü îòêðûòóþ ïîçèöèþ ïîñëå ïåðåñå÷åíèÿ ëèíèè NameObject_SL
extern string m3="/==========TP===========/";
extern string NameObject_TP="MyTrend_TP";//Íàèìåíîâàíèå ëèíèè äëÿ TakeProfit ðûíî÷íûõ îðäåðîâ
extern int SparePips_TP=8;//Ðàññòîÿíèå îò ñîîòâ.ëèíèè äî TakeProfit â ïóíêòàõ
extern bool CloseExtern_TP=false;//Çàêðûâàòü îòêðûòóþ ïîçèöèþ ïîñëå ïåðåñå÷åíèÿ ëèíèè NameObject_TP
double Spare_SL,Spare_TREND,Spare_TP,point,Spread;int digits;string Symb;
//+------------------------------------------------------------------+
int init(){Comment("");Symb=Symbol();point=MarketInfo(Symb,MODE_POINT);Spread=MarketInfo(Symb,MODE_SPREAD)*point;
digits=Digits;if(digits==3||digits==5){SleepPage=SleepPage*10;SparePips_TREND=SparePips_TREND*10;
SparePips_SL=SparePips_SL*10;SparePips_TP=SparePips_TP*10;}return(0);}
int deinit(){Comment("");return(0);}
int start()
{Comment("");if(Ticket==0||OrdersTotal()==0||Bars<200){Comment("STOP expert");return(0);}
double Price_TREND,Price_TP,Price_SL;string txt="";
Spare_TREND=SparePips_TREND*point;Spare_TP=SparePips_TP*point;Spare_SL=SparePips_SL*point;
if(ObjectFind(NameObject_TREND)==0||ObjectFind(NameObject_TP)==0)
{if(Ticket==1&&Magic==0){txt="All tickets";
for(int i=0;i<OrdersTotal();i++)
{if(OrderSelect(i,SELECT_BY_POS))
{Price_TREND=ObjectGetValueByShift(NameObject_TREND,0);Price_TP=ObjectGetValueByShift(NameObject_TP,0);
Price_SL=ObjectGetValueByShift(NameObject_SL,0);
if(OrderSymbol()==Symb)Move(OrderTicket(),Price_TREND,Price_TP,Price_SL);}}}
else if(Ticket==1&&Magic>0){txt="Magic = "+Magic;
for(i=0;i<OrdersTotal();i++)
{if(OrderSelect(i,SELECT_BY_POS))
{Price_TREND=ObjectGetValueByShift(NameObject_TREND,0);Price_TP=ObjectGetValueByShift(NameObject_TP,0);
Price_SL=ObjectGetValueByShift(NameObject_SL,0);
if(OrderSymbol()==Symb&&OrderMagicNumber()==Magic)Move(OrderTicket(),Price_TREND,Price_TP,Price_SL);}}
}else if(Ticket>1){txt="Ticket= "+Ticket;
if(OrderSelect(Ticket,SELECT_BY_TICKET))
{Price_TREND=ObjectGetValueByShift(NameObject_TREND,0);Price_TP=ObjectGetValueByShift(NameObject_TP,0);
Price_SL=ObjectGetValueByShift(NameObject_SL,0);Move(OrderTicket(),Price_TREND,Price_TP,Price_SL);}}
else txt="\nTicket "+Ticket+" not found";
Comment("\nLine Price TREND = "+DoubleToStr(Price_TREND,digits),"\n","Line Price TP = "+DoubleToStr(Price_TP,digits),
"\n","Line Price SL = "+DoubleToStr(Price_SL,digits),"\n",txt);}else Comment("Object not found");return(0);}
//+------------------------------------------------------------------+
int Move(int myTicket,double Price_TREND=0,double Price_TP=0,double Price_SL=0)
{bool err;double Delta,tp,sl,Closepos,PriceM=Price_TREND,PriceProfity=Price_TP,PriceSL=Price_SL,
StopLevel=MarketInfo(Symb,MODE_STOPLEVEL)*point;
if(OrderSelect(myTicket,SELECT_BY_TICKET)){int Tip=OrderType();double new_tp=0,new_Pos=0,
OPos=OrderOpenPrice(),SLpos=ND(OrderStopLoss()),TPpos=ND(OrderTakeProfit());
switch(Tip)
{case OP_BUY:if(OunlyPendOrders==false||MarketSL_TP==true)
{if(PriceSL!=0&&CloseExtern_SL)
{if(IsTradeAllowed()&&(PriceSL-Spare_SL>Bid)&&Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0))
{Closepos=ND(OrderClosePrice());err=OrderClose(myTicket,OrderLots(),Closepos,SleepPage,White);
if(!err)Print(OrderError());
else{if(DeleteObjectSL_TP_cross){if(ObjectDelete(NameObject_SL))Alert(Symb," ëèíèÿ SL ",NameObject_SL," óäàëåíà! ",
" : ñðàáîòàëî ïåðåñå÷åíèå BUY!"," Ticket: ",myTicket);}Sleep(1000);break;}}}
if(PriceProfity!=0&&CloseExtern_TP)
{if(IsTradeAllowed()&&PriceProfity<Bid&&Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0))
{Closepos=ND(OrderClosePrice());err=OrderClose(myTicket,OrderLots(),Closepos,SleepPage,White);
if(!err)Print(OrderError());
else{if(DeleteObjectSL_TP_cross){if(ObjectDelete(NameObject_TP))Alert(Symb," ëèíèÿ TP ",NameObject_TP," óäàëåíà! ",
" : ñðàáîòàëî ïåðåñå÷åíèå BUY!"," Ticket: ",myTicket);} Sleep(1000);break;}}}
if(PriceSL!=0&&(PriceSL<Bid-StopLevel)&&err==false)
{sl=ND(PriceSL-Spare_SL);if(PriceSL>SLpos+Spare_SL)sl=ND(PriceSL-Spare_SL);
if(PriceSL<SLpos+Spare_SL+2*Spread)sl=ND(PriceSL-Spare_SL);
if(IsTradeAllowed()&&(sl!=0)&&(MathAbs(sl-SLpos)>point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,OPos,sl,TPpos))
{err=OrderModify(myTicket,OPos,sl,TPpos,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}
if(PriceProfity!=0&&err==false)
{new_tp=ND(PriceProfity-Spare_TP);if(PriceProfity>TPpos+Spare_TP)new_tp=ND(PriceProfity-Spare_TP);
if(PriceProfity<TPpos+Spare_TP+2*Spread)new_tp=ND(PriceProfity-Spare_TP);
if(IsTradeAllowed()&&(new_tp!=0)&&(MathAbs(new_tp-TPpos)>point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,OPos,SLpos,new_tp))
{err=OrderModify(myTicket,OPos,SLpos,new_tp,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}}break;
case OP_SELL:if(OunlyPendOrders==false||MarketSL_TP==true)
{if(PriceSL!=0&&CloseExtern_SL)
{if(IsTradeAllowed()&&(Bid>PriceSL+Spare_SL)&&Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0))
{Closepos=ND(OrderClosePrice());err=OrderClose(myTicket,OrderLots(),Closepos,SleepPage,White);
if(!err)Print(OrderError());
else{if(DeleteObjectSL_TP_cross){if(ObjectDelete(NameObject_SL))Alert(Symb," ëèíèÿ SL ",NameObject_SL," óäàëåíà! ",
" : ñðàáîòàëî ïåðåñå÷åíèå SELL!"," Ticket: ",myTicket);}Sleep(1000);break;}}}
if(PriceProfity!=0&&CloseExtern_TP)
{if(IsTradeAllowed()&&(Bid<PriceProfity-Spread)&&Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0))
{Closepos=ND(OrderClosePrice());err=OrderClose(myTicket,OrderLots(),Closepos,SleepPage,White);
if(!err)Print(OrderError());
else{if(DeleteObjectSL_TP_cross){if(ObjectDelete(NameObject_TP))Alert(Symb," ëèíèÿ TP ",NameObject_TP," óäàëåíà! ",
" : ñðàáîòàëî ïåðåñå÷åíèå SELL!"," Ticket: ",myTicket);}Sleep(1000);break;}}}
if(PriceSL!=0&&(PriceSL>Ask+StopLevel)&&err==false)
{sl=ND(PriceSL+Spread+Spare_SL);if(SLpos>PriceSL+Spread+Spare_SL)sl=ND(PriceSL+Spread+Spare_SL);
if(SLpos<PriceSL-2*Spread+Spare_SL)sl=ND(PriceSL+Spread+Spare_SL);
if(IsTradeAllowed()&&(sl!=0)&&(MathAbs(sl-SLpos)>point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,OPos,sl,TPpos))
{err=OrderModify(myTicket,OPos,sl,TPpos,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}
if(PriceProfity!=0&&err==false)
{new_tp=ND(PriceProfity+Spare_TP+Spread);
if(TPpos>PriceProfity+Spread+Spare_TP)new_tp=ND(PriceProfity+Spread+Spare_TP);
if(TPpos<PriceProfity-2*Spread+Spare_TP)new_tp=ND(PriceProfity+Spread+Spare_TP);
if(IsTradeAllowed()&&(new_tp!=0)&&(MathAbs(TPpos-new_tp)>point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,OPos,SLpos,new_tp))
{err=OrderModify(myTicket,OPos,SLpos,new_tp,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}}break;
case OP_BUYSTOP:if(OunlyPendOrders==true&&err==false)
{Delta=OPos-(PriceM+Spread+Spare_TREND);new_Pos=ND(OPos-Delta);
if(TPpos>0)tp=ND(TPpos-Delta);else tp=0;if(SLpos>0)sl=ND(SLpos-Delta);else sl=0;
if(IsTradeAllowed()&&(MathAbs(Delta)>=point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,new_Pos,sl,tp))
{err=OrderModify(myTicket,new_Pos,sl,tp,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}break;
case OP_SELLSTOP:if(OunlyPendOrders==true&&err==false)
{Delta=(PriceM-Spare_TREND)-OPos;new_Pos=ND(OPos+Delta);
if(TPpos>0)tp=ND(TPpos+Delta);else tp=0;if(SLpos>0)sl=ND(SLpos+Delta);else sl=0;
if(IsTradeAllowed()&&(MathAbs(Delta)>=point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,new_Pos,sl,tp))
{err=OrderModify(myTicket,new_Pos,sl,tp,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}break;
case OP_BUYLIMIT:if(OunlyPendOrders==true&&err==false)
{Delta=(PriceM+Spread+Spare_TREND)-OPos;new_Pos=ND(OPos+Delta);
if(TPpos>0)tp=ND(TPpos+Delta);else tp=0;if(SLpos>0)sl=ND(SLpos+Delta);else sl=0;
if(IsTradeAllowed()&&(MathAbs(Delta)>=point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,new_Pos,sl,tp))
{err=OrderModify(myTicket,new_Pos,sl,tp,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}break;
case OP_SELLLIMIT :
if(OunlyPendOrders==true&&err==false){Delta=OPos-(PriceM-Spare_TREND);new_Pos=ND(OPos-Delta);
if(TPpos>0)tp=ND(TPpos-Delta);else tp=0;if(SLpos>0)sl=ND(SLpos-Delta);else sl=0;
if(IsTradeAllowed()&&(MathAbs(Delta)>=point)&&Block_err_130(3,Tip,OPos,SLpos,TPpos,new_Pos,sl,tp))
{err=OrderModify(myTicket,new_Pos,sl,tp,0);if(!err)Print(OrderError());else{Sleep(1000);break;}}}break;}}}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---