//+------------------------------------------------------------------+
//|                                          VisualTrading_Block.mq4 |
//|                                                             Roll |
//+------------------------------------------------------------------+
#property copyright "Roll"
#include <Block_err_130.mqh>
//ñòðàòåãèÿ,íà÷àëüíàÿ âåðñèÿ Dmitry Yakovlev (22.04.2009 05:32)http://codebase.mql4.com/ru/5533
extern bool Trade=false;//ðàçðåøåíèå òîðãîâëè/èíäèêàöèÿ
extern bool lShowTargets=true; 
extern color OpenColor=Aqua;//Color Op
extern color TakeProfitColor=Lime;//Color TakeProfit
extern color StopLossColor=Gold;//Color StopLoss
extern bool AL=true;//ðàçðåøåíèå alert
extern bool UseSound=true;//ðàçðåøåíèå çâóê
string var_188="expert.wav";
int i,j,t,Tip,awh[],cnt=0;
string Symb,n,Text;
//----
int init(){rezet();Symb=Symbol();return(0);} 
int deinit()
{i=0;j=0;             
 for(i=0;i<OrdersTotal();i++)
 if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&&(OrderSymbol()==Symb))
 {n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
  if(ObjectFind(n+"open")!=-1)ObjectDelete(n+"open");     
  if(ObjectFind(n+"stop")!=-1)ObjectDelete(n+"stop");
  if(ObjectFind(n+"take")!=-1)ObjectDelete(n+"take");}
 DeleteHistory();
 for(i=0;i<30;i++)
 {ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"topen"+i); 
  ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"ttake"+i); 
  ObjectDelete(Symbol()+DoubleToStr(Period(),0)+"tstop"+i);}
 DeleteLabels();return(0);}
//-------------------------------------------------------------------------------------------
int start()
{i=0;j=0;double popen,ptake,pstop,Closepos;
 DeleteHistory();
 if(cnt!=OrdersTotal())rezet();
 DeleteLabels();
 for(i=0;i<OrdersTotal();i++)  
 {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&&(OrderSymbol()==Symb))
 {Tip=-1;int myTicket=0;double OPos=0,SLpos=0,TPpos=0;
  Tip=OrderType();
  myTicket=OrderTicket();    
  OPos=OrderOpenPrice();
  SLpos=ND(OrderStopLoss());
  TPpos=ND(OrderTakeProfit());
   n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
if(ObjectFind(n+"open")==-1)
{if(Trade)
 {int ret=MessageBox("Çàêðûòü îðäåð "+OrderTicket()+"?","Çàêðûòü?",4);
 if(ret==6)
  {Closepos=ND(OrderClosePrice()); 
  if(Block_err_130(1,Tip,OPos,SLpos,TPpos,0,0,0))
  {if(OrderType()<2)
   {if(!OrderClose(myTicket,OrderLots(),Closepos,3,CLR_NONE))
    {if(AL)Alert("Îøèáêà çàêðûòèÿ  ¹ ",GetLastError());
     Print("Îøèáêà çàêðûòèÿ îðäåðà ¹",
     OrderTicket(),". Îøèáêà: ",GetLastError());Sleep(1000);
    }else {PlaySound("expert.wav");
         ObjectDelete(n+"take");
         ObjectDelete(n+"stop");}}
  if(OrderType()>1)
  {if(!OrderDelete(myTicket,White)) 
    {if(AL)Alert("Îøèáêà óäàëåíèÿ  ¹ ",GetLastError());
     Print("Îøèáêà óäàëåíèÿ îòëîæåííîãî îðäåðà ¹",
     OrderTicket(),". Îøèáêà: ",GetLastError());Sleep(1000);
    }else{PlaySound("expert.wav");
         ObjectDelete(n+"take");
         ObjectDelete(n+"stop");}}}}}}
 if((ObjectFind(n+"open")==-1&&!Trade)||ret==7)
  {ObjectCreate(n+"open",OBJ_HLINE,awh[j],Time[0],OPos);
   ObjectSet(n+"open",OBJPROP_COLOR,OpenColor);
   ObjectSet(n+"open",OBJPROP_WIDTH,2);}
  if((ObjectFind(n+"stop")==-1)&&(SLpos!=0))
  {ObjectCreate(n+"stop",OBJ_HLINE,awh[j],Time[0],SLpos);
   ObjectSet(n+"stop",OBJPROP_COLOR,StopLossColor);
   ObjectSet(n+"stop",OBJPROP_WIDTH,2);}
  if((ObjectFind(n+"take")==-1)&&(TPpos!=0))
  {ObjectCreate(n+"take",OBJ_HLINE,awh[j],Time[0],TPpos);
   ObjectSet(n+"take",OBJPROP_COLOR,TakeProfitColor);
   ObjectSet(n+"take",OBJPROP_WIDTH,2);}
  popen=ND(ObjectGet(n+"open",OBJPROP_PRICE1));
  ptake=ND(ObjectGet(n+"take",OBJPROP_PRICE1));
  pstop=ND(ObjectGet(n+"stop",OBJPROP_PRICE1));
if((popen!=OPos)||(pstop!=SLpos)||(ptake!=TPpos))
 {if(Tip<2&&ND(popen)!=OPos)   
   ObjectSet(n+"open",OBJPROP_PRICE1,OPos);
  if(!Trade)
   {if(Tip<2)
    {if(ND(popen)!=OPos)  
      ObjectSet(n+"open",OBJPROP_PRICE1,OPos);
     if(ND(pstop)!=SLpos)ObjectSet(n+"stop",OBJPROP_PRICE1,SLpos);
     if(ND(ptake)!=TPpos)ObjectSet(n+"take",OBJPROP_PRICE1,TPpos);}
     if(Tip>1)
      {if(ND(popen)!=OPos)ObjectSet(n+"open",OBJPROP_PRICE1,OPos); 
       if(ND(ptake)!=TPpos)ObjectSet(n+"take",OBJPROP_PRICE1,TPpos); 
        if(ND(pstop)!=SLpos) ObjectSet(n+"stop",OBJPROP_PRICE1,SLpos);}}
   if(Tip==OP_BUY)Text=" Buy "; 
  else if(Tip==OP_SELL)Text=" SELL ";  
  else if(Tip>1)Text=" îòëîæåííûé ";
  bool err=0;
 while(Trade)  
 {if(IsTradeAllowed()&&(ND(popen)!=ND(OPos))&&Tip>1&&ND(popen)!=0&&
   Block_err_130(3,Tip,OPos,SLpos,TPpos,popen,SLpos,TPpos))//ìîäèôèêàöèÿ öåíû îòëîæ
  {if(AL)Alert("Ìîäèôèêàöèÿ öåíû",Text,myTicket,". Æä¸ì îòâåò..",", ",ND(popen),", ",OPos);
   if(ND(popen)==OPos)break;
   err=OrderModify(myTicket,popen,SLpos,TPpos,0,CLR_NONE);
   Sleep(1000);
   if(err==0)Print(OrderError());
   else if(err==true)
   {if(UseSound)PlaySound(var_188);
    if(AL)Alert("Îðäåð ",Text,myTicket," ìîäèôèöèðîâàí:)");break;}}
  if(IsTradeAllowed()&&(ND(ptake)!=TPpos)&&(TPpos!=0)&&(ptake!=0)
      &&Block_err_130(3,Tip,OPos,SLpos,TPpos,OPos,SLpos,ptake))
    {if(AL)Alert("Ìîäèôèêàöèÿ  ïðîôèòà",Text,myTicket,". Æä¸ì îòâåò..");
     if(ptake==TPpos)break;
     err=OrderModify(myTicket,OPos,SLpos,ptake,0,CLR_NONE);Sleep(1000);
     if(!err)Print(OrderError());
     else if(err==true)
      {if(UseSound)PlaySound(var_188);
       if(AL)Alert("Îðäåð ",Text,myTicket," ìîäèôèöèðîâàí:)");break;}}
  if(IsTradeAllowed()&&(ND(pstop)!=SLpos)&&(SLpos!=0)&&(pstop!=0)
   &&Block_err_130(3,Tip,OPos,SLpos,TPpos,OPos,pstop,TPpos))
    {if(AL)Alert("Ìîäèôèêàöèÿ ëîññà ",Text,myTicket,". Æä¸ì îòâåò..");
     if(pstop==SLpos)break;
     err=OrderModify(myTicket,OPos,pstop,TPpos,0,CLR_NONE);Sleep(1000);
     if(!err)Print(OrderError());
     else if(err==true)
     {if(UseSound)PlaySound(var_188);
      if(AL)Alert("Îðäåð ",Text,myTicket," ìîäèôèöèðîâàí:)");break;}}
   if(err==0)break;}//while(Trade) 
 }}}ShowLabels();if(lShowTargets)fShowTargets();return(0);}
//----------------------------------------------------
void rezet()
{i=0;j=0;DeleteHistory();
 for(i=0;i<OrdersTotal();i++) 
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&&(OrderSymbol()==Symbol()))
  {n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
   if(ObjectFind(n+"open")==-1)                        
    {ObjectCreate(n+"open",OBJ_HLINE,awh[j],Time[0],OrderOpenPrice());
     ObjectSet(n+"open",OBJPROP_COLOR,OpenColor);
     ObjectSet(n+"open",OBJPROP_WIDTH,2);}
   if(OrderStopLoss()!=0 && ObjectFind(n+"stop")==-1)
    {ObjectCreate(n+"stop",OBJ_HLINE,awh[j],Time[0],OrderStopLoss());
     ObjectSet(n+"stop",OBJPROP_COLOR,StopLossColor);
     ObjectSet(n+"stop",OBJPROP_WIDTH,2);}
   if(OrderTakeProfit()!=0&&ObjectFind(n+"take")==-1)
    {ObjectCreate(n+"take",OBJ_HLINE,awh[j],Time[0],OrderTakeProfit());
     ObjectSet(n+"take",OBJPROP_COLOR,TakeProfitColor);
     ObjectSet(n+"take",OBJPROP_WIDTH,2);}
  }DeleteLabels();
   ShowLabels(); 
   cnt=OrdersTotal();}
//------
void DeleteHistory(){i=0;j=0;
 for(i=0;i<OrdersHistoryTotal();i++)
 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&(OrderSymbol()==Symbol()))
 {n=OrderSymbol()+"_"+DoubleToStr(OrderTicket(),0)+"_"+DoubleToStr(Period(),0);
  if(ObjectFind(n+"open")!=-1)ObjectDelete(n+"open");
  if(ObjectFind(n+"stop")!=-1)ObjectDelete(n+"stop");
  if(ObjectFind(n+"take")!=-1)ObjectDelete(n+"take");}}
//-----------
void fShowTargets()      
{i=0;Tip=-1;
 int period=Period(),prof_pts=0,ticket=0,FS=14;
 double dist_stop_pts,dist_stop,dist_take_pts,dist_take,SL,TP,Price;
 double point=MarketInfo(Symbol(),MODE_POINT);
 double pr=(Ask+Bid)/2,prof=0;             
 datetime CT=Time[0]+Period()*60*(WindowBarsPerChart()/20+2);
 double CP=5*point;
 color  prof_clr=Blue;
 string txt="";
 for(i=0;i<10;i++)
 {ObjectDelete(Symb+DoubleToStr(period,0)+"topen"+i);
  ObjectDelete(Symb+DoubleToStr(period,0)+"ttake"+i);
  ObjectDelete(Symb+DoubleToStr(period,0)+"tstop"+i);}
 for(i=0;i<OrdersTotal();i++)
 {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  {Tip=OrderType();
   Price=OrderOpenPrice();
   TP=OrderTakeProfit();
   SL=OrderStopLoss();
   prof=OrderProfit();
  if(Tip==0){pr=Bid;prof_pts=ND((pr-Price)/point);}//"ïðîôèò â ïóíêòàõ"
  if(Tip==2){pr=Ask;prof_pts=ND((pr-Price)/point);}
  if(Tip==4){pr=Ask;prof_pts=ND((pr-Price)/point);}
  if(Tip==1){pr=Ask;prof_pts=ND((Price-pr)/point);}
  if(Tip==3){pr=Bid;prof_pts=ND((Price-pr)/point);}
  if(Tip==5){pr=Bid;prof_pts=ND((Price-pr)/point);}
  prof_clr=Blue;                   //öâåò ïðîôèòà ãîëóáîé
  if(prof_pts<0)prof_clr=OrangeRed;//åñëè ïðîôèò â óáûòêå öâåò ïðîôèòà êðàñíûé
  if(prof_pts>0)prof_clr=Lime;     //åñëè ïðîôèò â ïðèáûëè öâåò ïðîôèòà çåëåíûé
  ObjectCreate(Symb+DoubleToStr(period,0)+"topen"+i,OBJ_TEXT,0,CT,Price+CP);//îáðàçîâàòü òåêñòîâûé îáúåêò.ãäå i - íîìåð îðäåðà
  txt=""; 
  if(Tip==0||Tip==1) 
   txt="("+DoubleToStr(MathAbs(prof),2)+"$)";
  ObjectSetText(Symb+DoubleToStr(period,0)+"topen"+i,DoubleToStr(MathAbs(prof_pts),0)+txt,FS,"Arial Black",prof_clr);
  dist_take_pts=0;dist_take=0;
  if(Tip==0)pr=Bid;
  if(Tip==2)pr=Bid;
  if(Tip==4)pr=Bid;
  if(Tip==1)pr=Ask;
  if(Tip==3)pr=Ask;
  if(Tip==5)pr=Ask;
  if(TP!=0) 
  {dist_take_pts=MathAbs(ND((pr-TP)/point));
   txt=DoubleToStr(dist_take_pts,0); 
   dist_take_pts=MathAbs(ND((Price-TP)/point));
   txt=txt+"("+DoubleToStr(dist_take_pts,0)+"/"+DoubleToStr(dist_take_pts*OrderLots()*10,0)+"$ )";
   ObjectCreate(Symb+DoubleToStr(period,0)+"ttake"+i,OBJ_TEXT,0,CT,TP+CP);
   ObjectSetText(Symb+DoubleToStr(period,0)+"ttake"+i,txt,FS,"Arial Black",Lime);}
  dist_stop_pts=0;dist_stop=0;
  if(SL!=0)
  {dist_stop_pts=MathAbs(ND((pr-SL)/point));
   txt=DoubleToStr(dist_stop_pts,0);
   dist_stop_pts=MathAbs(ND((Price-SL)/point));
   txt=txt+"("+DoubleToStr(dist_stop_pts,0)+"/"+DoubleToStr(dist_stop_pts*OrderLots()*10,0)+"$)";
   ObjectCreate(Symb+DoubleToStr(period,0)+"tstop"+i,OBJ_TEXT,0,CT,SL+CP);
   ObjectSetText(Symb+DoubleToStr(period,0)+"tstop"+i,txt,FS,"Arial Black",OrangeRed);}}}}
//----------------------------------------------------------------------------
void DeleteLabels()
{i=0;n="";t=Time[WindowFirstVisibleBar()];
for(i=0;i<OrdersHistoryTotal();i++)
 {if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol())
  {n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
   ObjectDelete(n+"stoplbl");
   ObjectDelete(n+"takelbl");}}
for(i=0;i<OrdersTotal();i++)
 {if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&&OrderSymbol()==Symbol())
  {n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
   ObjectDelete(n+"stoplbl");
   ObjectDelete(n+"takelbl");}}}
//----------------------------------------------------------------------------
void ShowLabels()  
{i=0;n="";int t=Time[WindowFirstVisibleBar()-(WindowBarsPerChart()/20)];
for(i=0;i<OrdersTotal();i++)
{if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&&OrderSymbol()==Symbol())
 {n=OrderSymbol()+Period()+DoubleToStr(OrderTicket(),0);
  ObjectDelete(n+"stoplbl");
  ObjectCreate(n+"stoplbl",OBJ_TEXT,0,t,OrderStopLoss()); 
  ObjectSetText(n+"stoplbl","#"+DoubleToStr(OrderTicket(),0)+"  stop",12,"Arial Black",StopLossColor);
  ObjectDelete(n+"takelbl");
  ObjectCreate(n+"takelbl",OBJ_TEXT,0,t,OrderTakeProfit()); 
  ObjectSetText(n+"takelbl","#"+DoubleToStr(OrderTicket(),0)+"  take",12,"Arial Black",TakeProfitColor);}}}
//----------------------------------------------------------------------------
             
            
            
            
Comments