//+-----------------------------------------------------------------+
//| Block_err_130.mq4 |
//| Roll |
//+-----------------------------------------------------------------+
#property copyright "Roll"
#property link ""
#property library
#include <stdlib.mqh>
//-----Ïðîâåðêà êîððåêòíîñòè ëþáîé îïåðàöèè âñåõ òèïîâ îðäåðîâ------
bool Block_err_130(int M,int TypeOrder,double OP,double StopLoss,double TakeProfit,
double NewOpenPrice,double NewStopLoss,double NewTakeProfit)
{int Mode=0;int Type=-1;int J=0;
double OpenPrice=0;double TP=0;double SL=0;double OPnew=0;double TPnew=0;double SLnew=0;
double point=MarketInfo(Symbol(),MODE_POINT);
double StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL)*point;
double FreezeLevel=MarketInfo(Symbol(),MODE_FREEZELEVEL)*point;
Mode=M;Type=TypeOrder;J=Mode*10+Type;
if(Mode==1){OpenPrice=OP;TP=TakeProfit;SL=StopLoss;}
if(Mode==2){OPnew=NewOpenPrice;TPnew=NewTakeProfit;SLnew=NewStopLoss;}
if(Mode==3){OpenPrice=OP;TP=TakeProfit;SL=StopLoss;OPnew=NewOpenPrice;
TPnew=NewTakeProfit;SLnew=NewStopLoss;}
RefreshRates();
switch(J){ //----Çàêðûòèå/Óäàëåíèå îðäåðîâ èëè "Ìîäèôèêàöèÿ I"/ïîäãîòîâêà
case 10://Çàêðûòèå OP_BUY:Mode==1,Type==0
if((Bid-SL>FreezeLevel||SL==0)&&(TP-Bid>FreezeLevel||TP==0)&&Mode==1)return(true);break;
case 11://Çàêðûòèå OP_SELL:Mode==1,Type==1
if((SL-Ask>FreezeLevel||SL==0)&&(Ask-TP>FreezeLevel||TP==0)&&Mode==1)return(true);break;
case 12://Óäàëåíèå BuyLimit:Mode==1,Type==2
if((Ask-OpenPrice>FreezeLevel)&&(StopLevel<=OpenPrice-SL||SL==0)&&
(StopLevel<=TP-OpenPrice||TP==0)&&Mode==1)return(true);break;
case 13://Óäàëåíèå SellLimit:Mode==1,Type==3
if((OpenPrice-Bid>FreezeLevel)&&(StopLevel<=SL-OpenPrice||SL==0)&&
(StopLevel<=OpenPrice-TP||TP==0)&&Mode==1)return(true);break;
case 14://Óäàëåíèå BuyStop:Mode==1,Type==4
if((OpenPrice-Ask>FreezeLevel)&&(StopLevel<=OpenPrice-SL||SL==0)&&
(StopLevel<=TP-OpenPrice||TP==0)&&Mode==1)return(true);break;
case 15://Óäàëåíèå SellStop:Mode==1,Type==5
if((Bid-OpenPrice>FreezeLevel)&&(StopLevel<=SL-OpenPrice||SL==0)&&
(StopLevel<=OpenPrice-TP||TP==0)&&Mode==1)return(true);break;
//----Îòêðûòèå îðäåðîâ èëè "Ìîäèôèêàöèÿ II"/öåëü
case 20://Îòêðûòèå OP_BUY:Mode==2,Type==0
if((StopLevel<=Bid-SLnew||SLnew==0)&&(StopLevel<=TPnew-Bid||TPnew==0))return(true);break;
case 21://Îòêðûòèå OP_SELL:Mode==2,Type==1
if((StopLevel<=SLnew-Ask||SLnew==0)&&(StopLevel<=Ask-TPnew||TPnew==0))return(true);break;
case 22://Îòêðûòèå BuyLimit:Mode==2,Type==2
if((StopLevel<=Ask-OPnew)&&(StopLevel<=OPnew-SLnew||SLnew==0)&&
(StopLevel<=TPnew-OPnew||TPnew==0)&&Mode==2)return(true);break;
case 23://Îòêðûòèå SellLimit:Mode==2,Type==3
if((StopLevel<=OPnew-Bid)&&(StopLevel<=SLnew-OPnew||SLnew==0)&&
(StopLevel<=OPnew-TPnew||TPnew==0)&&Mode==2)return(true);break;
case 24://Îòêðûòèå BuyStop:Mode==2,Type==4
if((StopLevel<=OPnew-Ask)&&(StopLevel<=OPnew-SLnew||SLnew==0)&&
(StopLevel<=TPnew-OPnew||TPnew==0)&&Mode==2) return(true);break;
case 25://Îòêðûòèå SellStop:Mode==2,Type==5
if((StopLevel<=Bid-OPnew)&&(StopLevel<=SLnew-OPnew||SLnew==0)&&
(StopLevel<=OPnew-TPnew||TPnew==0)&&Mode==2)return(true);break;
case 30://Ìîäèôèêàöèÿ Buy îðäåðà
if((Bid-SL>FreezeLevel||SL==0)&&(TP-Bid>FreezeLevel||TP==0))
{if((StopLevel<=Bid-SLnew||SLnew==0)&&(StopLevel<=TPnew-Bid||TPnew==0))return(true);}break;
case 31://Ìîäèôèêàöèÿ Sell îðäåðà
if((SL-Ask>FreezeLevel||SL==0)&&(Ask-TP>FreezeLevel||TP==0))
{if((StopLevel<=SLnew-Ask||SLnew==0)&&(StopLevel<=Ask-TPnew||TPnew==0))return(true);}break;
case 32://Ìîäèôèêàöèÿ BuyLimit îðäåðà
if((Ask-OpenPrice>FreezeLevel)&&(StopLevel<=OpenPrice-SL||SL==0)&&
(StopLevel<=TP-OpenPrice||TP==0))
{if((StopLevel<=Ask-OPnew)&&(StopLevel<=OPnew-SLnew||SLnew==0)&&
(StopLevel<=TPnew-OPnew||TPnew==0))return(true);}break;
case 33://Ìîäèôèêàöèÿ SellLimit îðäåðà
if((OpenPrice-Bid>FreezeLevel)&&(StopLevel<=SL-OpenPrice||SL==0)&&
(StopLevel<=OpenPrice-TP||TP==0))
{if((StopLevel<=OPnew-Bid)&&(StopLevel<=SLnew-OPnew||SLnew==0)&&
(StopLevel<=OPnew-TPnew||TPnew==0))return(true);}break;
case 34://Ìîäèôèêàöèÿ BuyStop îðäåðà
if((OpenPrice-Ask>FreezeLevel)&&(StopLevel<=OpenPrice-SL||SL==0)&&
(StopLevel<=TP-OpenPrice||TP==0))
{if((StopLevel<=OPnew-Ask)&&(StopLevel<=OPnew-SLnew||SLnew==0)&&
(StopLevel<=TPnew-OPnew||TPnew==0))return(true);}break;
case 35://Ìîäèôèêàöèÿ SellStop îðäåðà
if((Bid-OpenPrice>FreezeLevel)&&(StopLevel<=SL-OpenPrice||SL==0)&&
(StopLevel<=OpenPrice-TP||TP==0))
{if((StopLevel<=Bid-OPnew)&&(StopLevel<=SLnew-OPnew||SLnew==0)&&
(StopLevel<=OPnew-TPnew||TPnew==0))return(true);}break;}return(0);}
//+---------ÍÎÐÌÀËÈÇÀÖÈß n/a-------------------+
double ND(double v){double digits=MarketInfo(Symbol(),MODE_DIGITS);
return(NormalizeDouble(v,digits));}
//+--------Function..:OrderError n/a -----------+
string OrderError(){int iError=GetLastError();
return(StringConcatenate("Order:",OrderTicket()," GetLastError()=",
iError," ",ErrorDescription(iError)));}
Comments