//+------------------------------------------------------------------+
//| Ñêðèïò óñòàíàâëèâàåò èëè ïåðåíîñèò ñòîïû |
//| ïîä ìèíèìóì èëè íàä ìàêñèìóì áàðà |
//| íà êîòîðûé áðîøåí ñêðèïò |
//+------------------------------------------------------------------+
double StopProfit;
double OrdOp,OrdTP,OrdSL,OrdTyp,OrdProf;
int start()
{
int Filtr = 1;
int Ticket;
int Spread = MarketInfo(Symbol(),MODE_SPREAD);
datetime time=WindowTimeOnDropped();
double stop;
int s;
//+------------------------------------------------------------------+
while(Time[s]!=time)s++;
//+------------------------------------------------------------------+
for(int i=0;i<OrdersTotal();i++)
{//+------------------------------------------------------------------+for
OrderSelect(i,SELECT_BY_POS);
if(Symbol()!=OrderSymbol())continue;
if(OrderType()>1)continue;
//+------------------------------------------------------------------+
if(OrderType()==0)stop=Low[s]-Point*Filtr;
if(OrderType()==1)stop=High[s]+Point*(Filtr+Spread);
//+------------------------------------------------------------------+
Ticket = OrderTicket();
OrdOp = OrderOpenPrice();
OrdTP = OrderTakeProfit();
OrdSL = OrderStopLoss();
OrdTyp = OrderType();
OrdProf = OrderProfit();
if(OrdSL==stop){risk();continue;}
if(OrderModify(Ticket,OrdOp,stop,OrdTP,0)){OrdSL=stop;risk();continue;}else int error=GetLastError();
if(error==6){Alert("Íåò ñâÿçè");return;}
if(error==132){Alert("Ðûíîê çàêðûò");return;}
if(error==4051){Alert("Íóæíî ïåðåòàùèòü íà ãðàôèê");return;}
if(error==130){Alert("Íåïðàâèëüíûå ñòîïû");return;}
Alert("Îøèáêà: ",error);
}//+------------------------------------------------------------------+for
Comment(StopProfit,"$ <Ïðè ñðàáàòûâàíèè ñòîïîâ> ",NormalizeDouble(StopProfit/(AccountBalance()/100),2),"%");
//+------------------------------------------------------------------+
return(0);
}
//+--------------------------------------------------------------------+
//+--------------------------------------------------------------------+
void risk(){
double Pips;
int q;
if(Digits==2)q=100;else q=10000;
if(OrdTyp==0)Pips=MathAbs(OrdProf/((OrdOp-Bid)*q));else Pips=MathAbs(OrdProf/((OrdOp-Ask)*q)); //Ñòîèìîñòü ïóíêòà ïî îðäåðó
double prof=Pips*(MathAbs(OrdOp-OrdSL)*10000);
if((OrdTyp==0&&OrdSL<OrdOp)||(OrdTyp==1&&OrdSL>OrdOp)){prof=prof*(-1);StopProfit=StopProfit+prof;return;}
StopProfit=StopProfit+prof;
return;}
Comments