Author: Copyright � 2012, Elmare
Orders Execution
Checks for the total of open ordersIt can change open orders parameters, due to possible stepping strategyIt Closes Orders by itself
0 Views
0 Downloads
0 Favorites
a_informer
//+------------------------------------------------------------------+
//|                                                   a_informer.mq4 |
//|                                         Copyright © 2010, Elmare |
//|                                        http://elmare.webnode.ru  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Elmare"
#property link      "http://elmare.webnode.ru"



color ordcolor[]={Olive,DodgerBlue,Orange,Green,Yellow,Gray,Chocolate,Blue,Lime,White,Red};
double dstop=0; // stop for current order (USD)
string sdstop="0"; // stop for current order (USD)(string)
double sl=0; // Stop loss level
double tp=0; // Take profit level
double psl=0; // Stop loss in points
double ptp=0; // Take profit in points

double op=0; // Open price level
int corner=3; // informer corner
int yoffset=30; // Y axe offset
int yshift=20;  // Y shift between lines
int xoffset=80; // Left column X axe offset
int xoffset2=10; // Right column X axe offset
int yk=0; // Y offset factor




int ot=0; // Order ticket
int i=0; //var for counters
double profUSD=0; //Profit in USD
double profPTS=0; //Profit in points
string sprofUSD="";//String of Profit in USD
string sprofPTS="";//String of Profit in points
color pcol=White;


extern int stop=300;// Stop to exe
extern int take=1000;// Take to exe
extern string symbol = "EURUSD";
int ord=1;
int slip=5; //Slippage
string silots="";
string siTP="";
string sstop="";
string stake="";
string name1="";
string name2="";
string st="";
int ordtot=0;
string tmp="";
extern int lotdecimals=2;
extern int ppr = 0;
int dk = 0;





//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {


if (Digits == 5) dk = 10000;
else if(Digits == 3) dk = 100;
start(); 

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete("Buy"); 
   ObjectDelete("Sell");
   ObjectDelete("Order1");
   ObjectDelete("Lots");
   ObjectDelete("Profit");
   ObjectDelete("Profit2");
   ObjectDelete("Stop");
   ObjectDelete("Stopv"); 
   ObjectDelete("Take");
   ObjectDelete("Takev");
   ObjectDelete("Exe");
   ObjectDelete("Close");
   ObjectDelete("Sep");
   
   ObjectDelete("iStopv");
   ObjectDelete("iStop");
   ObjectDelete("iTPcount"); 
   ObjectDelete("iTP");
   ObjectDelete("iProfit");
   ObjectDelete("iLots");
   
   
   
   JunkObjects("OI");
   JunkObjects("SL");
   JunkObjects("OL");
   JunkObjects("OT");
   JunkObjects("OI");
   JunkObjects("OI");
   JunkObjects("SL");
   JunkObjects("OL");
   JunkObjects("OT");
   JunkObjects("OI");
   JunkObjects("OI");
   JunkObjects("SL");
   JunkObjects("OL");
   JunkObjects("OT");
   JunkObjects("OI");
   JunkObjects("OI");
   JunkObjects("SL");
   JunkObjects("OL");
   JunkObjects("OT");
   JunkObjects("OI");
   JunkObjects("TL");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
 



while(true)
{

RefreshRates();
WindowRedraw();

JunkObjects("#");


ModStopIfSL();//Stop loss modifuying if Stop line dragging


   /* if orders */
ordtot=OrdersTotal(); 




if(ordtot>0)
{
 
   for(i=0;i<OrdersTotal();i++)
   {
   OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()== symbol)
{
   
   sl=OrderStopLoss();
   tp=OrderTakeProfit();
   op=OrderOpenPrice();
   ot=OrderTicket();
   if(OrderStopLoss()==0) CreateStopTake(ot,stop,take);
   if(OrderType()==OP_BUY) profPTS=(Bid-OrderOpenPrice())*dk;
   else profPTS=(OrderOpenPrice()-Ask)*dk;
 
   
   profUSD=OrderProfit();
   if(profPTS>0) pcol=Green; else pcol=Red;
   sprofPTS=DoubleToStr(profPTS,1);
   sprofUSD=DoubleToStr(profUSD,2);
  
   CreateSL(sl,ot,i);
   CreateTL(tp,ot,i);
   CreateOL(op,ot,i);
   CreateOI(ot);
   CreateOI2(ot);
   
     ord=OrdersTotal()+1;
 
   name1="OI_"+DoubleToStr(ot,0);
   if(OrderType()==OP_BUY)
   {
   //tmp=OrderSymbol();
    tmp="Bought";
    psl=(op-sl)*dk;
    ptp=(tp-op)*dk;

   }
   if(OrderType()==OP_SELL)
   {

    tmp="Sold";
    psl=(sl-op)*dk;
    ptp=(op-tp)*dk;

   }

   string f="";
   if (ptp<100) f="  "; else f="";
   st = tmp+" "+DoubleToStr(OrderLots(),lotdecimals)+": "+"          "+DoubleToStr(psl,0)+" / "+f+DoubleToStr(ptp,0);
   ObjectSet(name1,OBJPROP_CORNER,corner);
   ObjectSet(name1,OBJPROP_XDISTANCE,xoffset2);
   ObjectSet(name1,OBJPROP_YDISTANCE,yoffset*1+yshift*i);
   ObjectSetText(name1,st,10,"Microsoft Sans Serif",ordcolor[i]);
   

   name2="OI2_"+DoubleToStr(ot,0);
   st=" "+sprofPTS+"  "; 
   ObjectSet(name2,OBJPROP_CORNER,corner);
   ObjectSet(name2,OBJPROP_XDISTANCE,xoffset2+65+ppr);
   ObjectSet(name2,OBJPROP_YDISTANCE,yoffset*1+yshift*i);
   ObjectSetText(name2,st,10,"Microsoft Sans Serif",pcol);
 

   }
   }


}
  
   /* end if orders */
 /* begin of no orders */  
if(OrdersTotal()==0)
{

   JunkObjects("SL");
   JunkObjects("OL");
   JunkObjects("OT");
   JunkObjects("OI");
   JunkObjects("TL");
 }

     /* End of no orders */


        Sleep(500);            // Íåáîëüøàÿ ïàóçà

     }
//----


   return(0);
  }
//FUNCTION DEFINITION


  
void CreateSL(double sl,int ot,int i)
{
      color oc=ordcolor[i];
      string name="SL_"+DoubleToStr(ot,0);

      ObjectCreate(name,OBJ_HLINE,0,0,0);
      ObjectSet(name,OBJPROP_PRICE1,sl);
      ObjectSet(name,OBJPROP_COLOR,oc);
      ObjectSet(name,OBJPROP_STYLE,4);
      ObjectSet(name,OBJPROP_WIDTH,1);

}
void CreateTL(double tp,int ot,int i)
{
      color oc=ordcolor[i];
      string name="TL_"+DoubleToStr(ot,0);

      ObjectCreate(name,OBJ_HLINE,0,0,0);
      ObjectSet(name,OBJPROP_PRICE1,tp);
      ObjectSet(name,OBJPROP_COLOR,oc);
      ObjectSet(name,OBJPROP_STYLE,3);
      ObjectSet(name,OBJPROP_WIDTH,1);

}

void CreateOL(double op,int ot,int i)
{
      color oc=ordcolor[i];
      string name="OL_"+DoubleToStr(ot,0);
      ObjectCreate(name,OBJ_HLINE,0,0,0);
      ObjectSet(name,OBJPROP_PRICE1,op);
      ObjectSet(name,OBJPROP_COLOR,oc);
      ObjectSet(name,OBJPROP_STYLE,0);
      ObjectSet(name,OBJPROP_WIDTH,1);

}


void CreateOI(int ot)
{
      string name="OI_"+DoubleToStr(ot,0);
      ObjectCreate(name,OBJ_LABEL,0,0,0);
     
}
void CreateOI2(int ot)
{
      string name="OI2_"+DoubleToStr(ot,0);
      ObjectCreate(name,OBJ_LABEL,0,0,0);
     
}



void CreateStopTake(int ot,double stop,double take)
{
     double sl=0;
     double tp=0;
     if(OrderType()==OP_BUY)
     {

        sl=OrderOpenPrice()-stop*Point;
        tp=OrderOpenPrice()+take*Point;
     
        
        OrderModify(ot,OrderOpenPrice(),sl,tp,0,0);
     }
     if(OrderType()==OP_SELL)
     {
        sl=OrderOpenPrice()+stop*Point;
        tp=OrderOpenPrice()-take*Point;

        OrderModify(ot,OrderOpenPrice(),sl,tp,0,0);
     }

}

void ModStopIfSL()
{
   string name = "";
   int objtot=ObjectsTotal();
   string sorder;
   int order;
   double stopl;
   double takep;
   double takepx;
   double takepy;
   for(i=0;i<objtot;i++)
   {
      name = ObjectName(i);
      int td=StringLen(name);
      if(StringFind(name,"SL",0)!=-1)
      {
         sorder=StringSubstr(name,3,0);
         order=StrToDouble(sorder);
         OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES);
         ObjectSet(name,OBJPROP_PRICE1,OrderStopLoss());
         stopl=ObjectGet(name,OBJPROP_PRICE1);
         OrderModify(order,OrderOpenPrice(),stopl,OrderTakeProfit(),0,0);
      }
      if(StringFind(name,"TL",0)!=-1)
      {
         sorder=StringSubstr(name,3,0);
         order=StrToDouble(sorder);
         OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES);
         ObjectSet(name,OBJPROP_PRICE1,OrderTakeProfit());
         takep=ObjectGet(name,OBJPROP_PRICE1);
         OrderModify(order,OrderOpenPrice(),OrderStopLoss(),takep,0,0);
      }
      if(StringFind(name,"OI",0)!=-1)
      {
         sorder=StringSubstr(name,3,0);
         order=StrToDouble(sorder);
         OrderSelect(order,SELECT_BY_TICKET,MODE_TRADES);
         ObjectSet(name,OBJPROP_PRICE1,OrderTakeProfit());
         takepx=ObjectGet(name,OBJPROP_XDISTANCE);
         takepy=ObjectGet(name,OBJPROP_YDISTANCE);
         //if((takepy<yexe+25)&&(takepy>yexe)&&(takepx>xexe)&&(xsell<xexe+150))
         if(takepx>200)
         {
            double price=0;
            if(OrderType()==OP_BUY) price=Bid;
            else            price=Ask;
            OrderClose(order,OrderLots(),price,3,0);
            JunkObjects(sorder);
         }

      }
      
      
   }

}

void JunkObjects(string substr)
{
  int    obj_total=ObjectsTotal();
  string name;
  for(int i=0;i<obj_total;i++)
    {
     name=ObjectName(i);
     if (StringFind(name,substr,0)!=-1) ObjectDelete(name);
    }
}









    

Comments