PipsingV2_BUY





//+---------------------------------------------------------------------------+ 
//| Èñïîëüçîâàí, èçìåíåí Sell Percent.mq4  Scriptor èç CodeBase MQL-4.com     |
//|                                 Aleksandr Pak, Alma-Ata, 03.2008          |
//+---------------------------------------------------------------------------+



#property copyright "ekr-ap@mail.ru"
#property copyright "mandorr@gmail.com" //ññûëêà íà èñõîäíûé Sell Percent.mq4
#include <WinUser32.mqh>

double y_pipsown;
int deinit()
{

 ObjectDelete("PipsWork");
}


void start()
{  int i,j,k,Slipp,Pop,Buy_tp,Buy_sl,Sell_tp,Sell_sl,Blank_buy,Blank_sell,err,crach,twoslash=1;
  double Lot,loss,profit;
  int ticket;
  
  string s,r="Parametrs??",p,x,ex;
  
  if (!IsCondition()) return;
  
  
 
 ObjectCreate("PipsWork",OBJ_TEXT,0,iTime(NULL,0,10),High[10]);
 ObjectSetText("PipsWork", "!!!", 60,"",Red);
 WindowRedraw();
 
  if(GlobalVariableCheck("P_Lot")==FALSE)           r=r+"1";
  if(GlobalVariableCheck("P_Slippage")==FALSE)      r=r+"2";
  if(GlobalVariableCheck("P_Repetitions")==FALSE)   r=r+"3";
  if(GlobalVariableCheck("P_Buy_tp")==FALSE)        r=r+"4";
  if(GlobalVariableCheck("P_Buy_sl")==FALSE)        r=r+"5";
  if(GlobalVariableCheck("P_Sell_tp")==FALSE)       r=r+"6";
  if(GlobalVariableCheck("P_Sell_sl")==FALSE)       r=r+"7";
  if(GlobalVariableCheck("P_Blank_buy")==FALSE)     r=r+"8";
  if(GlobalVariableCheck("P_Blank_sell")==FALSE)    r=r+"9";
  if(GlobalVariableCheck("P_Two_slash")==FALSE)    r=r+"10";
 
  if(StringLen(r)>11) {MessageBox(r,"",MB_OK|MB_ICONERROR);  return;}
 
 
 Lot       =GlobalVariableGet("P_Lot");
 Slipp     =GlobalVariableGet("P_Slippage");
 Pop       =GlobalVariableGet("P_Repetitions");
 Buy_tp    =GlobalVariableGet("P_Buy_tp");
 Buy_sl    =GlobalVariableGet("P_Buy_sl");
 Sell_tp   =GlobalVariableGet("P_Sell_tp");
 Sell_sl   =GlobalVariableGet("P_Sell_sl");
 Blank_buy =GlobalVariableGet("P_Blank_buy");
 Blank_sell=GlobalVariableGet("P_Blank_sell");
 twoslash  =GlobalVariableGet("P_Two_slash");
     
   ex="PiPsing= "+DoubleToStr(Lot,1)+" "+DoubleToStr(Slipp,0)+"  "+DoubleToStr(Pop,0)+
   "  "+DoubleToStr(Buy_tp,0)+"  "+DoubleToStr(Buy_sl,0)+
   "  "+DoubleToStr(Sell_tp,0)+"  "+DoubleToStr(Sell_sl,0)+
   "  "+DoubleToStr(Blank_buy,0)+"  "+DoubleToStr(Blank_sell,0)+"  "+DoubleToStr(twoslash,0);
   
   i=0.3*WindowBarsPerChart();  //place for text
   y_pipsown=0.95*(WindowPriceMax(0)-WindowPriceMin(0))+WindowPriceMin(0);
   if(ObjectFind("PipsOwn2")==-1) 
                           {ObjectCreate("PipsOwn2",OBJ_TEXT,0,iTime(NULL,0,i), y_pipsown);
                           //ObjectCreate("PipsOwn2",OBJ_TEXT,0,iTime(NULL,0,i),High[i]+40*Point);
   
                           ObjectSetText("PipsOwn2", ex  , 9,"",White);
                           } else 
                           {ObjectSetText("PipsOwn2", ex  , 9,"",White);
         if    (  iBarShift ( NULL,0,ObjectGet ( "PipsOwn2",OBJPROP_TIME1),FALSE )>0.5*WindowBarsPerChart())
               ObjectSet("PipsOwn2",OBJPROP_TIME1,iTime(NULL,0,i));  //åñëè çà êðàé ýêðàíà
                           }
   if (AccountLots(Lot)<=0)
   { 
      string title="Îøèáêà";
      string msg="Íåò ñâîáîäíûõ ñðåäñòâ     ";
      MessageBox(msg,title,MB_OK|MB_ICONERROR);
      return;
   }
  
  if(Blank_buy==0)
  {if (twoslash==1)
         {
            ticket = send_order(0,ticket,Lot,Slipp,Pop,0,0); //send empty
            if(ticket>0) 
               {//Sleep(1000); //Åñëè áðîêåð íå äàåò áûñòðî èçìåíÿòü, ñíÿòü //, ïîäîáðàòü çàäåðæêó
                  send_order(1,ticket,Lot,Slipp,Pop,Buy_tp,Buy_sl); //modify
               }
         }
         else send_order(0,ticket,Lot,Slipp,Pop,Buy_tp,Buy_sl); //send +tp/sl
   }
   ObjectDelete("PipsWork");
}
//....................................................

int send_order(int sm, int ticket, double Lot, int Slipp, int Pop,int _tp, int _sl)
//sm=0 - send tp/sl, sm=1  send tp=0,sl=0  sm=2 modify
{int err,k,crach;
 double loss,profit;
 bool result=TRUE;
err=1; k=0;
         
         while(err!=0||k>=Pop)
         { k+=1; RefreshRates(); 
                  if (_sl>0) loss  =Ask-_sl  *Point; else loss=0;
                  if (_tp>0) profit=Ask+_tp*Point; else profit=0;
                 if(sm==0) ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slipp,loss,profit,NULL,0,0,CLR_NONE);                       
                 else      result=OrderModify(ticket,0,loss,profit,0,CLR_NONE);                
         err=ShowError(Pop,k);
         if(err==0&&result==TRUE) break; else { Sleep(1000); }
         if(k>=Pop) break;
            //ïîâòîð òîëüêî ïðè 4 6 135 136 137 138 146 
            switch(err)
            {  
            case 6: crach=0;  //íåò ñâÿçè
            case 135: crach=0;//Öåíà èçìåíèëàñü
            case 136: crach=0;//Íåò öåí
            case 137: crach=0;//Áðîêåð çàíÿò
            case 138: crach=0;//Íîâûå öåíû
            case 145: crach=0;//Ñëèøêîì áëèçêî ê ðûíêó
            case 146: crach=0;//Ïîäñèñòåìà òîðãîâëè çàíÿòà
            default : crach=1;
            } 
            if(crach==1)break;  //new repeat is crazy  
        }
   if(err>1) ticket=-ticket;
 return (ticket);

}

double AccountLots(double Lot)
{
   double freemargin=AccountFreeMargin(); if (freemargin<=0) return (0);
   double lotmargin=0;
   string symbol=Symbol();
   string market=MarketType(symbol);
   if (market=="Forex"  ) lotmargin=LotMarginForex  (symbol);
   if (market=="Metalls") lotmargin=LotMarginCFD    (symbol);
   if (market=="CFD"    ) lotmargin=LotMarginCFD    (symbol);
   if (market=="Futures") lotmargin=LotMarginFutures(symbol);
   if (market=="") return (0);
   
   
  if(Lot*lotmargin>freemargin) return (-1); else   return (1);
   }

string MarketType (string symbol)
{
   int len=StringLen(symbol);
   string base;
   if (StringSubstr(symbol,0,1)=="_") return ("Indexes");
   if (StringSubstr(symbol,0,1)=="#")
   {
      base=StringSubstr(symbol,len-1,1);
      if (base=="0") return ("Futures");
      if (base=="1") return ("Futures");
      if (base=="2") return ("Futures");
      if (base=="3") return ("Futures");
      if (base=="4") return ("Futures");
      if (base=="5") return ("Futures");
      if (base=="6") return ("Futures");
      if (base=="7") return ("Futures");
      if (base=="8") return ("Futures");
      if (base=="9") return ("Futures");
      return ("CFD");
   }
   else
   {
      if (symbol=="GOLD"  ) return ("Metalls");
      if (symbol=="SILVER") return ("Metalls");
      if (len==6)
      {
         base=StringSubstr(symbol,0,3);
         if (base=="AUD") return ("Forex");
         if (base=="CAD") return ("Forex");
         if (base=="CHF") return ("Forex");
         if (base=="EUR") return ("Forex");
         if (base=="GBP") return ("Forex");
         if (base=="LFX") return ("Forex");
         if (base=="NZD") return ("Forex");
         if (base=="SGD") return ("Forex");
         if (base=="USD") return ("Forex");
      }
   }
   return ("");
}
double LotMarginForex (string symbol)
{
   double lotsize=MarketInfo(symbol,MODE_LOTSIZE);
   double leverage=AccountLeverage();
   double result=0; if (leverage>0) result=lotsize/leverage;
   string base=StringSubstr(symbol,0,3);
   string ñurrency=AccountCurrency();
   double rate_ñurrency=1; if (base!=ñurrency) rate_ñurrency=MarketInfo(base+ñurrency,MODE_BID);
   result=rate_ñurrency*result;
   return (result);
}
double LotMarginCFD (string symbol)
{
   double bid_symbol=MarketInfo(symbol,MODE_BID);
   double lotsize=MarketInfo(symbol,MODE_LOTSIZE);
   double leverage=10;
   double result=0; if (leverage>0) result=lotsize*bid_symbol/leverage;
   string ñurrency=AccountCurrency();
   double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_BID);
   result=rate_ñurrency*result;
   return (result);
}
double LotMarginFutures (string symbol)
{
   int len=StringLen(symbol);
   double result=0;
   string base=StringSubstr(symbol,0,len-2);
   if (base=="#ENQ" ) result=3750;
   if (base=="#EP"  ) result=3938;
   if (base=="#SLV" ) result=5063;
   if (base=="#GOLD") result=2363;
   if (base=="#CL"  ) result=4725;
   if (base=="#NG"  ) result=8100;
   if (base=="#W"   ) result= 608;
   if (base=="#S"   ) result=1148;
   if (base=="#C"   ) result= 473;
   string ñurrency=AccountCurrency();
   double rate_ñurrency=1; if (ñurrency!="USD") rate_ñurrency=MarketInfo(ñurrency+"USD",MODE_BID);
   result=rate_ñurrency*result;
   return (result);
}
bool IsCondition()
{
   bool result=true;
   string field="     ";
   string msg;
   string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title;
   if (!IsConnected())
   {
      msg=msg+"Ñâÿçü ñ ñåðâåðîì îòñóòñòâóåò"+field;
      result=false;
   }
   if (!IsTradeAllowed())
   {
      if (!result) msg=msg+"\n";
      msg=msg+"Òîðãîâëÿ çàïðåùåíà"+field;
      result=false;
   }
   if (!result) MessageBox(msg,title,MB_OK|MB_ICONERROR);
   return (result);
}
int ShowError(int Pop, int k)
{
   string description;
   int err=GetLastError(),crach; //3 129 130 131 134 139 140 
   switch (err)            //ïîâòîð òîëüêî ïðè 4, 6, 135, 136 137 138 146 
   {
      case   0: return;
      case   1: description="Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí"; break;
      case   2: description="Îáùàÿ îøèáêà"; break;
      case   3: description="Íåïðàâèëüíûå ïàðàìåòðû"; break;
      case   4: description="Òîðãîâûé ñåðâåð çàíÿò"; break;
      case   5: description="Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà"; break;
      case   6: description="Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì"; break;
      case   7: description="Íåäîñòàòî÷íî ïðàâ"; break;
      case   8: description="Ñëèøêîì ÷àñòûå çàïðîñû"; break;
      case   9: description="Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà"; break;
      case  64: description="Ñ÷åò çàáëîêèðîâàí"; break;
      case  65: description="Íåïðàâèëüíûé íîìåð ñ÷åòà"; break;
      case 128: description="Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè"; break;
      case 129: description="Íåïðàâèëüíàÿ öåíà"; break;
      case 130: description="Íåïðàâèëüíûå ñòîïû"; break;
      case 131: description="Íåïðàâèëüíûé îáúåì"; break;
      case 132: description="Ðûíîê çàêðûò"; break;
      case 133: description="Òîðãîâëÿ çàïðåùåíà"; break;
      case 134: description="Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè"; break;
      case 135: description="Öåíà èçìåíèëàñü"; break;
      case 136: description="Íåò öåí"; break;
      case 137: description="Áðîêåð çàíÿò"; break;
      case 138: description="Íîâûå öåíû"; break;
      case 139: description="Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ"; break;
      case 140: description="Ðàçðåøåíà òîëüêî ïîêóïêà"; break;
      case 141: description="Ñëèøêîì ìíîãî çàïðîñîâ"; break;
      case 145: description="Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó"; break;
      case 146: description="Ïîäñèñòåìà òîðãîâëè çàíÿòà"; break;
      case 147: description="Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì"; break;
      default : description="Íåèçâåñòíàÿ îøèáêà"; break;
   }
   
   
   
   switch(err)
   {   case 4: crach=0;
      case 6: crach=0;
      case 135: crach=0;
      case 136: crach=0;
      case 137: crach=0;
      case 138: crach=0;
      case 146: crach=0;
      default : crach=1;
    }
  
  string field="     ";
   string msg="Îøèáêà #"+err+" "+description+field;
   string title="Îøèáêà"; if (AccountNumber()>0)title=AccountNumber()+": "+title;
   if(crach==1)   MessageBox(msg,title,MB_OK|MB_ICONERROR);
     if(Pop-1==k) MessageBox(msg,title,MB_OK|MB_ICONERROR);
   
   return (err);
}
// End



Sample





Analysis



Market Information Used:

Series array that contains the highest prices of each bar


Indicator Curves created:


Indicators Used:



Custom Indicators Used:

Order Management characteristics:
It automatically opens orders when conditions are reached
It can change open orders parameters, due to possible stepping strategy

Other Features:

It opens Message Boxes to the user