//+------------------------------------------------------------------+
//| Exp-SetSL&TP.mq4 |
//| Copyright © 2009, Expforex |
//| http://expforex.at.ua |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Expforex"
#property link "http://expforex.at.ua"
#property show_inputs
extern string Ðàçðàáîò÷èê="http://expforex.at.ua";
extern string a="Ñêðèïò óñòàíàâëèâàåò TP è SL ïî âûáîðó äëÿ îðäåðîâ";
extern string new="Ñèìâîë óñòàíîâêè 0-âñå 1-âàëþòà ãðàôèêà";
extern int ttt=0;
extern string d="0-áåç ñòîïà,-1-ìèíèìàëüíûé ñòîï";
extern int SL=0;
extern int TP=0;
extern string b="Òèï îðäåðîâ äëÿ êîòîðûõ ñëåäóåò óñòàíîâèòü ñòîïû:";
extern string ò="0-óñòàíîâèòü äëÿ âñåõ îðäåðà";
extern string ò2="1-óñòàíîâèòü äëÿ âñåõ îðäåðà Buy";
extern string ò3="2-óñòàíîâèòü äëÿ âñåõ îðäåðà Sell";
extern string ò4="3-óñòàíîâèòü äëÿ âñåõ îðäåðà BuyStop BuyLimit";
extern string ò5="4-óñòàíîâèòü äëÿ âñåõ îðäåðà Sellstop SellLimit";
extern int ÒèïÎðäåðà=0;
bool Ans=false;
string sym;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void init()
{
Stamp();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Stamp()
{
ObjectCreate("Original",OBJ_LABEL,0,0,0);
ObjectSetText("Original"," ---http://Expforex.at.ua---",10,"Arial Bold",Red);
ObjectSet("Original",OBJPROP_CORNER,2);
ObjectSet("Original",OBJPROP_XDISTANCE,200);
ObjectSet("Original",OBJPROP_YDISTANCE,10);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
//----
for(int i=1;i<=OrdersTotal();i++) // Öèêë ïåðåáîðà îðäåðîâ
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // Åñëè åñòü ñëåäóþùèé ïðîâåðÿåì åãî
{ // Àíàëèç îðäåðîâ:
int Tip=OrderType();
int Tickett=OrderTicket(); // Òèï îðäåðà
double Price=OrderOpenPrice();
double SLt;
double TPt;
sym=OrderSymbol();
if(ttt==1 && OrderSymbol()!=Symbol())continue;
if(SL<0)SL=MarketInfo(sym,MODE_STOPLEVEL);
if(TP<0)TP=MarketInfo(sym,MODE_STOPLEVEL);
// ----------------------------------------------------------
if(ÒèïÎðäåðà==1 || ÒèïÎðäåðà==0)
{
if(Tip==OP_BUY)
{
if(SL!=0){SLt=MarketInfo(sym,MODE_BID)-(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
if(TP!=0){TPt=MarketInfo(sym,MODE_BID)+(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
MOr(-1,SLt,TPt,CLR_NONE);
}
}
//---------------------------------------------------------------
if(ÒèïÎðäåðà==2 || ÒèïÎðäåðà==0)
{
if(Tip==OP_SELL)
{
if(SL!=0){SLt=MarketInfo(sym,MODE_ASK)+(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
if(TP!=0){TPt=MarketInfo(sym,MODE_ASK)-(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
MOr(-1,SLt,TPt,CLR_NONE);
}
}
//-----------------------------------------------------------------
if(ÒèïÎðäåðà==3 || ÒèïÎðäåðà==0)
{
if(Tip==OP_BUYSTOP)
{
if(SL!=0){SLt=Price-(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
if(TP!=0){TPt=Price+(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
MOr(-1,SLt,TPt,CLR_NONE);
}
if(Tip==OP_BUYLIMIT)
{
if(SL!=0){SLt=Price-(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
if(TP!=0){TPt=Price+(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
MOr(-1,SLt,TPt,CLR_NONE);
}
}
//------------------------------------------------------------------
if(ÒèïÎðäåðà==4 || ÒèïÎðäåðà==0)
{
if(Tip==OP_SELLSTOP)
{
if(SL!=0){SLt=Price+(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
if(TP!=0){TPt=Price-(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
MOr(-1,SLt,TPt,CLR_NONE);
}
if(Tip==OP_SELLLIMIT)
{
if(SL!=0){SLt=Price+(SL*MarketInfo(sym,MODE_POINT));}else SLt=0;
if(TP!=0){TPt=Price-(TP*MarketInfo(sym,MODE_POINT));}else TPt=0;
MOr(-1,SLt,TPt,CLR_NONE);
}
}
//--------------------------------------------------------------------
}
}
return(0);
}
//+------------------------------------------------------------------+
void MOr(double pp=-1,double sl=0,double tp=0,color cl=CLR_NONE)
{
bool fm;
double pa=MarketInfo(OrderSymbol(), MODE_ASK);
double pb=MarketInfo(OrderSymbol(), MODE_BID);
double op,os,ot;
int dg,err,it;
if(pp<=0) pp=OrderOpenPrice();
if(sl<0) sl=OrderStopLoss();
if(tp<0) tp=OrderTakeProfit();
dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
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<=3;it++)
{
if(!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while(!IsTradeAllowed()) Sleep(5000);
RefreshRates();
fm=OrderModify(OrderTicket(),pp,sl,tp,0,cl);
if(fm)
{
break;
} else {
Sleep(1000*2);
}
}
}
}
//+------------------------------------------------------------------+
Comments