TradingBoxing

Author: PozitiF
Profit factor:
0.00
Price Data Components
Series array that contains close prices for each bar
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reached
Miscellaneous
It plays sound alerts
0 Views
0 Downloads
0 Favorites
TradingBoxing
//+------------------------------------------------------------------+
//|                                                TradingBoxing.mq4 |
//|                                                          PozitiF |
//|                                              mail: alex-w-@bk.ru |
//+------------------------------------------------------------------+
#property copyright "PozitiF"
#property link      "mail: alex-w-@bk.ru"

//------------------- Âõîäíûå ïàðàìåòðû ñîâåòíèêà -------------------+
extern int     StopLoss          = 0;
extern int     TakeProfit        = 0;
extern double  DisplayStartLots  = 0.01;                                                           // Ñ êàêîãî ëîòà íà÷èíàòü îòîáðàæàòü, íàáîð ëîòîâ â îêíå âûáîðà
extern double  DisplayStepLot    = 0.01; 
extern int     MagicNumber       = 0;
extern bool    UseSound          = true;           // Èñïîëüçîâàòü çâóêîâîé ñèãíàë                                                          // Ñ êàêèì øàãîì èçìåíÿòü çíà÷åíèÿ ëîòîâ â îêíå âûáîðà
//------------------ Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà ----------------+
int     Slippage          = 0;                     // Ìàêñèìàëüíî äîïóñòèìîå îòêëîíåíèå öåíû äëÿ ðûíî÷íûõ îðäåðîâ (îðäåðîâ íà ïîêóïêó èëè ïðîäàæó).
string  NameFileSound     = "news.wav";            // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
int     NumberOfTry       = 3;                     // Êîëè÷åñòâî ïîïûòîê ñîâåðøèòü îïåðàöèþ.

int DeviationX=20, DeviationY=5;                   // Äåâèàöèÿ êóðñîðà +-px òàê êàê èäåàëüíî íåâîçìîæíî ïåðåòÿíóòü êóðñîð íà íóæíûé îáúåêò

string   arrIdTl[3][9]={"HeaderDelete", "DeleteAll", "DeleteBuy", "DeleteSell", "DeleteBuyStop", "DeleteSellStop", "DeleteBuyLimit", "DeleteSellLimit", "HL_1",
                        "HeaderClose", "CloseAll", "CloseBuy", "CloseSell", "CloseBuyProfit", "CloseSellProfit", "CloseBuyLoss", "CloseSellLoss", "HL_2",
                        "HeaderOpen", "HL_3", "OpenBuy", "OpenSell", "HL_3.1", "HL_3.2", "NULL", "NULL", "NULL"};
string   arrTxTl[3][9]={"Delete Orders", "ALL", "Buy", "Sell", "Stop", "Stop", "Limit", "Limit", "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ",
                        "Close Orders", "ALL", "Buy", "Sell", "Profit", "Profit", "Loss", "Loss", "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ",
                        "Open Order", "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ", "Buy", "Sell", "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ", "Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä Ä", "NULL", "NULL", "NULL"};
string   arrFtTl[3][9]={"Times", "Georgia", "Georgia", "Georgia", "Georgia", "Georgia", "Georgia", "Georgia", "Terminal",
                        "Times", "Georgia", "Georgia", "Georgia", "Georgia", "Georgia", "Georgia", "Georgia", "Terminal",
                        "Times", "Terminal", "Georgia", "Georgia", "Terminal", "Terminal", "NULL", "NULL", "NULL"};
int      arrFsTl[3][9]={12, 10, 10, 10, 10, 10, 10, 10, 10,
                        12, 10, 10, 10, 10, 10, 10, 10, 10,
                        12, 10, 10, 10, 10, 10, , , };
color    arrClTl[3][9]={Black, Blue, Blue, Blue, Blue, Blue, Blue, Blue, Silver,
                        Black, Blue, Blue, Blue, Blue, Blue, Blue, Blue, Silver,
                        Black, Silver, Black, Black, Silver, Silver, , , , };
int      arrTl_X[3][9]={15, 60, 87, 28, 84, 23, 85, 24, 13,
                        20, 60, 87, 28, 83, 22, 86, 25, 13,
                        31, 13, 80, 22, 13, 13, , ,};
int      arrTl_Y[3][9]={28, 52, 70, 70, 90, 90, 110, 110, 45,
                        143, 167, 185, 185, 205, 205, 225, 225, 160,
                        258, 272, 280, 280, 294, 395, , ,};
int      arrBdTl[3][9]={1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1};
int      arrRtTl[3][9]={0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0};

//--------------- Ãðàôè÷åñêèå îáúåêòû ------------------

string   arrIdWs[3][5]={"CursorDelete","NULL","NULL","NULL","NULL",   "CursorClose","NULL","NULL","NULL","NULL",   "CursorBuy","CursorSell","PrevPageLots","NextPageLots","CursorList"};
string   arrFtWs[3][5]={"Wingdings","NULL","NULL","NULL","NULL",   "Wingdings","NULL","NULL","NULL","NULL",   "Wingdings","Wingdings","Wingdings","Wingdings","Wingdings"};
int      arrNmWs[3][5]={164, , , , ,   164, , , , ,   164, 164, 215, 216, 164};
int      arrWs_X[3][5]={110, , , , ,
                        110, , , , ,
                        110, 50, 95, 32, 63};
int      arrWs_Y[3][5]={30, , , , ,
                        145, , , , ,
                        280, 280, 403, 403, 403};
int      arrFsWs[3][5]={12, , , , ,   12, , , , ,   12, 12, 12, 12, 12};
color    arrClWs[3][5]={Blue, , , , ,   Blue, , , , ,   Blue, Blue, Green, Green, Blue};
int      arrBdWs[3][5]={1,1,1,1,1, 1,1,1,1,1, 1,1,1,1,1};
int      arrRtWs[3][5]={0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0,};

//----------------------- Ðàìêè äëÿ áîêñîâ -----------------------
string   FrId[3][1]={"FrameDelete", "FrameClose", "FrameOpen"};
int      Fr_X[3][1]={5,5,5};
int      Fr_Y[3][1]={20,135,250};
int      FrWh[3][1]={25,25,25};
int      FrHt[3][1]={9,9,14};
int      FrTy[3][1]={1,1,1};
color    FrCl[3][1]={Black,Black,Black};
int      FrBd[3][1]={1,1,1};
//---------------------- Êâàäðàò ôîí -----------------------------
string   BgId[3][1]={"NULL","NULL","NULL"};
int      Bg_X[3][1]={0,0,0};
int      Bg_Y[3][1]={0,0,0};
int      BgWh[3][1]={0,0,0};
int      BgHt[3][1]={0,0,0};
int      BgTy[3][1]={2,2,2};
color    BgCl[3][1]={Black, Black, Black};
//--------------------- Âåðòèêàëüíûå ëèíèè -----------------------
string   VlId[3][1]={"VL_1", "VL_2", "NULL"};
string   VlTx[3][1]={"³","³","NULL"};                                   //--- Òèï âåðòèêàëüíîé ëèíèè èç øðèôòà Terminal
int      Vl_X[3][1]={70,70,0};
int      Vl_Y[3][1]={75,188,0};
int      VlBd[3][1]={1,1,0};                                            //--- Óãîë ïðèâÿçêè ëèíèé (ê óãëó îêíà òåðìèíàëà)
int      VlHt[3][1]={4, 4, 0};                                        //--- Âûñîòà ëèíèé ñèìâîëîâ (1 ñèìâîë 12 px)
color    VlCl[3][1]={Silver, Silver, CLR_NONE};


//------------- Ëîòû ----------------
//--- Íàáîð ëîòîâ, ïðèíàäëåæèò áîêñó OpenOrder, ñîçäà¸òñÿ (ðèñóåòñÿ) â îòäåëüíîé ôóíêöèè, ðàñ÷èòûâàåòñÿ äèíàìè÷åñêè.
double   arrLots[10];                                                   // Ìàññèâ çàïîëíÿåòñÿ äèíàìè÷åñêè, Ýòî çíà÷åíèå ÿâëÿåòñÿ ID è òàê æå òåêñòîì ìåòêè TextLabel.
int      arrLotsX[10]={84,84,84,84,84,24,24,24,24,24};
int      arrLotsY[10]={300,320,340,360,380,300,320,340,360,380};

color    LtCl=Blue;
string   LtFt="Times";
int      LtFs=12;
int      LtBd=1;

//---------------- Íåîáõîäèìàÿ èíôîðìàöèÿ äëÿ ïðîãðàììû -------------
string   arrCursorId[]={"CursorDelete", "CursorClose", "CursorBuy", "CursorSell", "CursorList"};      //--- ID êóðñîðîâ (ãðàôè÷åñêèõ ìåòîê) ïåðåìåùåíèÿ êîòîðûõ íåîáõîäèìî îòñëåæèâàòü.
string   arrBoxDelete[]={"DeleteAll", "DeleteBuy", "DeleteSell", "DeleteBuyStop", "DeleteSellStop", "DeleteBuyLimit", "DeleteSellLimit"};      // Ýëåìåíòû íà êîòîðûå íåîáõîäèìî ïåðåòàùèòü êóðñîð, ýëåìåíòû ïðèâÿçàíû ê èíäåêñó ìàññèâà, âûáîð äåéñòâèÿ ïðîèñõîäèò ïî èíäåêñó !
string   arrBoxClose[]={"CloseAll", "CloseBuy", "CloseSell", "CloseBuyProfit", "CloseSellProfit", "CloseBuyLoss", "CloseSellLoss"};
string   arrBoxList[]={"PrevPageLots","NextPageLots"};
int      arrCursorPos_X[5];                                                                           // Çàïîëíÿåòñÿ ïåðâîíà÷àëüíûìè êîîðäèíàòàìè êóðñîðîâ, äëÿ îòñëåæèâàíèÿ èçìåíåíèé.
int      arrCursorPos_Y[5];
bool     arrShowBox[3]={true, true, true};                                                            // êàêèå áîêñû ïîêàçûâàòü íà ãðàôèêå
int      arrHightBox[3][1]={200, 200, 200};                                                           // Âûñîòà êàæäîãî áîêñà, íåîáõîäèìî ÷òîáû äèíàìè÷åñêè ïîìåùàòü îäèí ïîä äðóãèì


//--------------------- Ïîäêëþ÷àåìûå áèáëèîòåêè ---------------------+
#include      <stdlib.mqh>                                                 // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4

//+------------------------------------------------------------------+
//| #############--- expert initialization function ---############# |
//+------------------------------------------------------------------+
int init()
{
//----
   FillArrLots(arrLots, DisplayStartLots, DisplayStepLot, "+");
   SetLabelLots(arrLots, arrLotsX, arrLotsY, LtFt, LtFs, LtCl, LtBd);
   start();
//----
   return(0);
}
//+------------------------------------------------------------------+
//| ###########--- expert deinitialization function ---############# |
//+------------------------------------------------------------------+
int deinit()
{
//----
   ObjectsDeleteAll();
//----
   return(0);
}
//+------------------------------------------------------------------+
//| ##############---  expert start function ---#################### |
//+------------------------------------------------------------------+
int start()
{
//----------------- Variable Initialization -------------------------+
   static int posX, posY, point=-1;
   int i, objId=-1;
   static bool Checked;
   string id="NULL";
   double lot;
//----
   
   //--- Èñïîëüçóåòñÿ ïðè ïðîâåðêå çàïîëíåíèÿ ìàññèâà ñ ðàçìåðàìè ëîòîâ, ïðè ïåðâîì çàïóñêå.
   Checked=false;
   //--- Ïåðâîíà÷àëüíàÿ îòðèñîâêà áîêñîâ.
   DisplayBox(arrShowBox);
   
   
   while(!IsStopped()&&IsExpertEnabled()){
      RefreshRates();
      
      //------------------ Áëîê îáðàáîòêè ïðåìåùåíèé êóðñîðà çàäà÷ --------------------
      //----- Çàïîëíÿåì ìàññèâ êîîðäèíàòàìè ìåòîê êóðñîðîâ óêàçàòåëåé, òîëüêî îäèí ðàç --------
      if(!Checked){
         for(i=0; i<ArraySize(arrCursorPos_X); i++){
            if(ObjectFind(arrCursorId[i])>=0){
               arrCursorPos_X[i]=ObjectGet(arrCursorId[i], OBJPROP_XDISTANCE);             // X - êîîðäèíàòà
               arrCursorPos_Y[i]=ObjectGet(arrCursorId[i], OBJPROP_YDISTANCE);             // Y - êîîðäèíàòà
            }
         }
         Checked=true;
      }
      //-------- Ïðîâåðÿåì íå èçìåíèëîñü ëè ìåñòîïîëîæåíèå êàêîãî ëèáî êóðñîðà (ãðàôè÷åñêîé ìåòêè) ---------
      //--- Åñëè èçìåíèëîñü òî ïîìåùàåì â ïåðåìåííóþ "ID"- id êóðñîðà êîòîðûé èçìåíèë ñâî¸ ìåñòîïîëîæåíèå ------
      //-------------- Òàê æå çàïîëíÿåì ïåðåìåííûå posX è posY êîîðäèíàòàìè êóäà áûë ïåðåòàùåí êóðñîð ---------------
      if(Checked){
         for(i=0; i<ArraySize(arrCursorPos_X); i++){
            if(ObjectFind(arrCursorId[i])>=0){
               if((arrCursorPos_X[i] != ObjectGet(arrCursorId[i], OBJPROP_XDISTANCE)) || (arrCursorPos_Y[i] != ObjectGet(arrCursorId[i], OBJPROP_YDISTANCE))){
                  posX=ObjectGet(arrCursorId[i], OBJPROP_XDISTANCE);
                  posY=ObjectGet(arrCursorId[i], OBJPROP_YDISTANCE);
                  point=i;
                  Redraw();                 // Ïåðåðèñîâàòü ìåòêè.
               }
               else{
                  if(point==i){
                     id=arrCursorId[point];
                     point=-1;
                  }
               }
            }
         }
      }
      //--- Ñìîòðèì êàêîé áîêñ âûçâàë ñîáûòèå, è îòïðàâëÿåì äàííûå â íåîáõîäèìóþ ôóíêöèþ.
      if(posX>0||posY>0 && id != "NULL"){
         if(id=="CursorDelete"){
            objId=ObjectSearch(arrBoxDelete ,posX, posY, DeviationX, DeviationY);
            if(objId>=0){
               switch(objId){
                  case 0: Print("#Delete Orders, All"); DeleteOrders(); break;
                  case 1: Print("#Delete Orders, Buy"); DeleteOrders("", OP_BUYSTOP); DeleteOrders("", OP_BUYLIMIT); break;
                  case 2: Print("#Delete Orders, Sell"); DeleteOrders("", OP_SELLSTOP); DeleteOrders("", OP_SELLLIMIT); break;
                  case 3: Print("#Delete Orders, BuyStop"); DeleteOrders("", OP_BUYSTOP); break;
                  case 4: Print("#Delete Orders, SellStop"); DeleteOrders("", OP_SELLSTOP); break;
                  case 5: Print("#Delete Orders, BuyLimit"); DeleteOrders("", OP_BUYLIMIT); break;
                  case 6: Print("#Delete Orders, SellLimit"); DeleteOrders("", OP_SELLLIMIT); break;
               }
               objId=-1;
               posX=0;
               posY=0;
            }
         }
         if(id=="CursorClose"){
            objId=ObjectSearch(arrBoxClose, posX, posY, DeviationX, DeviationY);
            if(objId>=0){
               switch(objId){
                  case 0: Print("#Close Orders, All"); CloseOrders(); break;
                  case 1: Print("#Close Orders, Buy"); CloseOrders("", OP_BUY); break;
                  case 2: Print("#Close Orders, Sell"); CloseOrders("", OP_SELL); break;
                  case 3: Print("#Close Orders, Buy Profit"); CloseOrders("", OP_BUY, 1); break;
                  case 4: Print("#Close Orders, Sell Profit"); CloseOrders("", OP_SELL, 1); break;
                  case 5: Print("#Close Orders, Buy Loss"); CloseOrders("", OP_BUY, 0); break;
                  case 6: Print("#Close Orders, Sell Loss"); CloseOrders("", OP_SELL, 0); break;
               }
               objId=-1;
               posX=0;
               posY=0;
            }
         }
         if(id=="CursorBuy"){
            lot=GetLot(posX, posY, arrLots, DeviationX, DeviationY);
            if(lot>0){
               Print("#Open Order, Buy: "+DoubleToStr(lot, 2));
               OpenOrder("", OP_BUY, lot, StopLoss, TakeProfit, MagicNumber);
            }
            posX=0;
            posY=0;
         }
         if(id=="CursorSell"){
            lot=GetLot(posX, posY, arrLots, DeviationX, DeviationY);
            if(lot>0){
               Print("#Open Order, Sell: "+DoubleToStr(lot, 2));
               OpenOrder("", OP_SELL, lot, StopLoss, TakeProfit, MagicNumber);
            }
            posX=0;
            posY=0;
         }
         if(id=="CursorList"){
            objId=ObjectSearch(arrBoxList, posX, posY, DeviationX, DeviationY);
            if(objId>=0){
               if(objId==0){ 
                  ClearDisplayLots(arrLots);
                  FillArrLots(arrLots, DisplayStartLots, DisplayStepLot, "-");
                  SetLabelLots(arrLots, arrLotsX, arrLotsY, LtFt, LtFs, LtCl, LtBd);
               }
               if(objId==1){ 
                  ClearDisplayLots(arrLots);
                  FillArrLots(arrLots, DisplayStartLots, DisplayStepLot, "+");
                  SetLabelLots(arrLots, arrLotsX, arrLotsY, LtFt, LtFs, LtCl, LtBd);
               }
               objId=-1;
               posX=0;
               posY=0;
            }
         }
         id="NULL";
      }
   //------------------------------------------------------------------
   WindowRedraw();
   Sleep(50); 
   }
//----
   return(0);
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ôóíêöèÿ çàïîëíÿåò ìàññèâ ëîòàìè, âû÷èñëÿåò ïî 10 ëîò, ôóíêöèÿ    |
//| ïðèíèìàåò ñòàðò ëîò (íàïðèìåð 0.01) è íàïðàëåíèå, óâåëè÷èâàòü    |
//| çíà÷åíèÿ (0.01, 0.02, è.ò.ä) èëè óìåíüøàòü (0.09, 0.08, 0.07)    |
//| ïðè ýòîì, 0 èíäåêñ ìàññèâà âñåãäà èìååò íàèìåíüøèé ëîò.          |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   arr   - Ññûëêà íà ìàññèâ êîòîðû áóäåì íàïîëíÿòü.               |
//|   start - Ñ êàêîãî ëîòà íà÷èíàòü çàïîëíÿòü ìàññèâ èñïîëüçóåòñÿ   |
//|           òîëüêî ïðè ïåðâîì çàïîëíåíèè ìàññèâà.                  |
//|   kl    - Êëþ÷ + óâåëè÷èòü çíà÷åíèÿ â ìàññèâå, - óìåíüøèòü.      |  
//+------------------------------------------------------------------+
void FillArrLots(double& arr[], double start=0.01, double step=0.01, string kl="+"){
//---   
   double minLot, maxLot, stepLot, max, min, res;
//---   
   minLot=MarketInfo(Symbol(), MODE_MINLOT);
   maxLot=MarketInfo(Symbol(), MODE_MAXLOT);
   stepLot=MarketInfo(Symbol(), MODE_LOTSTEP);
   
   start=MathMax(minLot, start);
   step=MathMax(stepLot, step);
   
   start=NormalizeDouble(start, 2);
   step =NormalizeDouble(step, 2);
   
   if(arr[0]==0){
      res=start;
      for(int x=0; x<10; x++){
         arr[x]=NormalizeDouble(res, 2);
         res+=step;
      }
   }
   else{
      max=arr[9];
      min=arr[0];
      max+=step;
      min-=step;
      for(int i=0; i<10; i++){
         if(kl=="+"){
            if(max<maxLot){
               arr[i]=NormalizeDouble(max, 2);
               max+=step;
            }
         }
         if(kl=="-"){
            if(min>minLot){
               arr[9-i]=NormalizeDouble(min, 2);
               min-=step;
            }
         }
      }
   }
   //ArraySort(arr);
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ñðàâíèâàåò äâà îäíîìåðíûõ ìàññèâà òèïà bool.             |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   arr1 - ïåðâûé ìàññèâ äëÿ ñðàâíåíèÿ                             |
//|   arr2 - âòîðîé ìàññèâ                                           |
//+------------------------------------------------------------------+
bool ComparingArray(bool& arr1[], bool& arr2[]){
   if(ArraySize(arr1)!=ArraySize(arr2))return(false);
   for(int i=0; i<ArraySize(arr1); i++) if(arr1[i]!=arr2[i])return(false);
 return(true);
}
//+------------------------------------------------------------------+
//| Îáíîâèòü ìåòêè êóðñîðîâ.                                         |
//+------------------------------------------------------------------+
void Redraw(){
   for(int b=0; b<ArrayRange(arrShowBox, 0); b++){
      for(int ws=0; ws<ArrayRange(arrIdWs, 1); ws++){
         //--- Ñîçäà¸ì ãðàôè÷åñêèå ìåòêè.
         if(arrIdWs[b][ws]!="NULL")SetWingdings(arrIdWs[b][ws], arrNmWs[b][ws], arrWs_X[b][ws], arrWs_Y[b][ws], arrClWs[b][ws], arrBdWs[b][ws], arrFtWs[b][ws], arrFsWs[b][ws], 0, arrRtWs[b][ws]);
      }
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ðàçìåùàåò ìåòêè ëîòîâ, â îêíå.                           |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   lots- Ìàññèâ ðàçìåðà ëîòîâ                                     |
//|   pos_x - Ìàññèâ ñ êîîðäèíàòàìè, X                               |
//|   pos_y - Ìàññèâ ñ êîîðäèíàòàìè, Y                               |
//|   ft    - Øðèôò                                                  |
//|   fs    - Ðàçìåð øðèôòà                                          |
//|   cl    - öâåò                                                   |
//|   bd    - ïðèâÿçêà ê óãëó                                        |
//+------------------------------------------------------------------+
void SetLabelLots(double& lots[], int& pos_x[], int& pos_y[], string ft, int fs, color cl, int bd){
//---
   string stLot;
//---   
   for(int i=0; i<ArraySize(lots); i++){
      stLot=DoubleToStr(lots[i], 2);
      SetLabelText(stLot, stLot, pos_x[i], pos_y[i], cl, bd, ft, fs);
   }
}
//+------------------------------------------------------------------+
//| Ôóíêöèÿ îòîáðàæåíèÿ ðàçëè÷íûõ áîêñîâ, ïîêàçûâàòü íå ïîêàçûâàòü.  |
//| int 1-ïîêàçàòü ïåðâûé áîêñ, 2-âòîðîé... -1 âñå                   | 
//| vw true-ïîêàçàòü áîêñ, false ñêðûòü áîêñ                         |                  
//+------------------------------------------------------------------+
void DisplayBox(bool& arr[]){

   for(int b=0; b<ArraySize(arr); b++){
      if(arr[b]){
         for(int tx=0; tx<ArrayRange(arrIdTl,1); tx++) if(arrIdTl[b][tx]!="NULL")SetLabelText(arrIdTl[b][tx], arrTxTl[b][tx], arrTl_X[b][tx], arrTl_Y[b][tx], arrClTl[b][tx], arrBdTl[b][tx], arrFtTl[b][tx], arrFsTl[b][tx], 0, arrRtTl[b][tx]);
         for(int ws=0; ws<ArrayRange(arrIdWs,1); ws++) if(arrIdWs[b][ws]!="NULL")SetWingdings(arrIdWs[b][ws], arrNmWs[b][ws], arrWs_X[b][ws], arrWs_Y[b][ws], arrClWs[b][ws], arrBdWs[b][ws], arrFtWs[b][ws], arrFsWs[b][ws], 0, arrRtWs[b][ws]);
         for(int vl=0; vl<ArrayRange(VlId,1); vl++)if(VlId[b][vl]!="NULL")SetVerticalLine(VlId[b][vl], Vl_X[b][vl], Vl_Y[b][vl], VlTx[b][vl], VlHt[b][vl], VlBd[b][vl], VlCl[b][vl]);
         for(int fr=0; fr<ArrayRange(FrId,1); fr++)if(FrId[b][fr]!="NULL")CreateFrame(FrId[b][fr], FrTy[b][fr], Fr_X[b][fr], Fr_Y[b][fr], FrWh[b][fr], FrHt[b][fr], FrCl[b][fr], FrBd[b][fr]);
      }
      else{
         for(int dx=0; dx<ArrayRange(arrIdTl,1); dx++)if(ObjectFind(arrIdTl[b][dx])>=0)SetLabelText(arrIdTl[b][dx]);
         for(int ds=0; ds<ArrayRange(arrIdWs,1); ds++)if(ObjectFind(arrIdWs[b][ds])>=0)SetWingdings(arrIdWs[b][ds]);
         for(int dl=0; dl<ArrayRange(VlId,1); dl++)if(ObjectFind(VlId[b][dl])>=0)SetVerticalLine(VlId[b][vl]);
         for(int dr=0; dr<ArrayRange(FrId,1); dr++)if(ObjectFind(FrId[b][dr])>=0)CreateFrame(FrId[b][dr]);
      }
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ðèñóåò âåðòèêàëüíóþ ëèíèþ øðèôòîì Terminal.                      |
//| Åñëè êîîðäèíàòû X-Y íå ïåðåäàíû òî óäàëÿåò ëèíèþ.                |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   id       - ID                                                  |  
//|   x        - êîîðäèíàòà â ïèêñåëÿõ, ïî ãîðèçîíòàëè               |
//|   y        - êîîðäèíàòà â ïèêñåëÿõ ïî âåðòèêàëè                  |
//|   tx       - òåêñò (êîä ëèíèè èç øðèôòà Terminal)                |
//|   bd       - äëèíà ëèíèè â (â ñèìâîëàõ 1, ñèìâîë = 12 px)        |
//|   corner   - óãîë ïðèâÿçêè                                       |
//|   cl       - öâåò                                                |
//+------------------------------------------------------------------+
void SetVerticalLine(string id="", int x=0, int y=0, string tx="", int length=0, int bd=0, color cl=CLR_NONE){
   for(int i=0; i<length; i++){
      if(x>0 && y>0)SetLabelText(id+"_:"+i, tx, x, y+(i*12), cl, bd, "Terminal", 10);
      else if(ObjectFind(id+"_:"+i)>=0)ObjectDelete(id+"_:"+i);
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ðèñóåò çàêðàøåííûé êâàäðàò (äëÿ ôîíà)                            |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   id       - ID                                                  |
//|   ty       - Òèï ôîíà(îò 0 äî 3)                                 |
//|   x        - êîîðäèíàòà â ïèêñåëÿõ, ïî ãîðèçîíòàëè               |
//|   y        - êîîðäèíàòà â ïèêñåëÿõ ïî âåðòèêàëè                  |
//|   width    - øèðèíà êâàäðàòà Ñèìâîëîâ (1 ñèìâîë 5 px â øèðèíó)   |
//|   height   - âûñîòà êâàäðàòà Ñèìâîëîâ (1 ñèìâîë 12 px â âûñîòó)  |
//|   cl       - öâåò                                                |
//|   bd       - ïðèâÿçêà ê óãëó                                     |
//+------------------------------------------------------------------+
void CreateBackground(string id="", int ty=0, int x=0, int y=0, int width=0, int height=0, color cl=Black, int bd=0){
// øðèôò 12 = 12-ïèêñåëåé â âûñîòó (ïåðåíîñ ñòðîêè), è 5 ïèêñåëåé â øèðèíó (ïðîáåë)
//---
string line, type[]={"Û","²","±","°"};
//---
   for(int tb=0; tb<width; tb++)line=StringConcatenate(line, type[ty]);
   for(int vl=0; vl<height; vl++)SetLabelText(id+"bc"+vl, line, x-3, y+(vl*12), cl, bd, "Terminal", 12);
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ðèñóåò êâàäðàò (Ðàìêó)                                           |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   id       - ID                                                  |
//|   ty       - òèï ðàìêè (îò 0 äî 3)                               |
//|   x        - êîîðäèíàòà â ïèêñåëÿõ, ïî ãîðèçîíòàëè               |
//|   y        - êîîðäèíàòà â ïèêñåëÿõ ïî âåðòèêàëè                  |
//|   width    - øèðèíà êâàäðàòà Ñèìâîëîâ (1 ñèìâîë 5 px â øèðèíó)   |
//|   height   - âûñîòà êâàäðàòà Ñèìâîëîâ (1 ñèìâîë 12 px â âûñîòó)  |
//|   cl       - öâåò                                                |
//|   bd       - ïðèâÿçêà ê óãëó                                     |
//+------------------------------------------------------------------+   
void CreateFrame(string id="", int ty=0, int x=0, int y=0, int width=0, int height=0, color cl=Gold, int bd=0){
// øðèôò 12 = 12-ïèêñåëåé â âûñîòó (ïåðåíîñ ñòðîêè), è 5 ïèêñåëåé â øèðèíó (ïðîáåë)
//---
string top_ab, bot_cd;
//---
string arrA[]={"Ú", "É", "Õ", "Ö"};    // Ëåâûé âåðõíèé óãîë
string arrB[]={"¿", "»", "¸", "·"};    // Ïðàâûé âåðõíèé óãîë
string arrC[]={"Ù", "¼", "¾", "½"};    // Ïðàâûé íèæíèé óãîë
string arrD[]={"À", "È", "Ô", "Ó"};    // Ëåâûé íèæíèé óãîë
string arrH[]={"Ä", "Í", "Í", "Ä"};    // Ãîðèçîíòàëüíàÿ ëèíèÿ
string arrV[]={"³", "º", "³", "º"};    // Âåðòèêàëüíàÿ ëèíèÿ
//---
   top_ab=arrA[ty];
   bot_cd=arrD[ty];
   for(int tb=0; tb<width-1; tb++){
      top_ab=StringConcatenate(top_ab, arrH[ty]);
      bot_cd=StringConcatenate(bot_cd, arrH[ty]);
   }
   top_ab=StringConcatenate(top_ab, arrB[ty]);
   bot_cd=StringConcatenate(bot_cd, arrC[ty]);
   
   if(x!=0&&y!=0){
      SetLabelText(id+"_ab", top_ab, x, y, cl, bd, "Terminal", 12);
      SetLabelText(id+"_cd", bot_cd, x, y+height*12, cl, bd, "Terminal", 12);
   }else{
      if(ObjectFind(id+"_ab")>=0)ObjectDelete(id+"_ab");
      if(ObjectFind(id+"_cd")>=0)ObjectDelete(id+"_cd");
   }
   for(int vl=0; vl<height-1; vl++){
      if(x!=0&&y!=0){
         SetLabelText(id+"_bc:"+vl, arrV[ty], x, y+12+(vl*12), cl, bd, "Terminal", 12);
         SetLabelText(id+"_da:"+vl, arrV[ty], x+width*5, y+12+(vl*12), cl, bd, "Terminal", 12);
      }else{
         if(ObjectFind(id+"_bc:"+vl)>=0)ObjectDelete(id+"_bc:"+vl);
         if(ObjectFind(id+"_da:"+vl)>=0)ObjectDelete(id+"_da:"+vl);
      }
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ñîçäà¸ò òåêñòîâóþ ìåòêó                                          |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   id  - èäåíòèôèêàòîð ìåòêè (óíèêàëüíîå èìÿ)                     |
//|   tx  - òåêñò ìåòêè                                              |
//|   x   - êîîðäèíàòà â ïèêñåëÿõ, ïî ãîðèçîíòàëè                    |
//|   y   - êîîðäèíàòà â ïèêñåëÿõ ïî âåðòèêàëè                       |
//|   cl  - öâåò                                                     |
//|   bd  - Binding, óãîë ïðèâÿçêè îáúåêòà 0-3                       |
//|   ft  - øðèôò                                                    |
//|   sz  - ðàçìåð øðèôòà                                            |
//|   wd  - íîìåð îêíà â êîòîðîì ñîçäàâàòü ìåòêó                     |
//|   rt  - âðàùåíèå îáúåêòà â ãðàäóñàõ                              |
//+------------------------------------------------------------------+
void SetLabelText(string id, string tx="NULL", int x=0, int y=0, color cl=Black, int bd=0, string ft="Georgia", int sz=12, int wd=0, int rt=0){
   //--- Åñëè ìåòêà óæå åñòü íî íå ïåðåäàíû êîîðäèíàòû òî óäàëÿåì ---
   if(tx!="NULL"){
      if(ObjectFind(id)<0)ObjectCreate(id, OBJ_LABEL, wd, 0, 0);
      ObjectSetText(id, tx, sz, ft, cl);
      ObjectSet(id, OBJPROP_CORNER, bd);
      ObjectSet(id, OBJPROP_XDISTANCE, x);
      ObjectSet(id, OBJPROP_YDISTANCE, y);
      ObjectSet(id,OBJPROP_ANGLE,rt);
   }else{
      if(tx=="NULL"&&ObjectFind(id)>=0)ObjectDelete(id);
   }
}

//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ñîçäà¸ò ãðàôè÷åñêóþ ìåòêó èç øðèôòà Wingdings 2, 3.              |
//| Åñëè íîìåð ñèìâîëà =0 òî ìåòêà óäàëÿåòñÿ.                        |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   id  - èäåíòèôèêàòîð ìåòêè (óíèêàëüíîå èìÿ)                     |
//|   nm  - íîìåð ñèìâîëà èç øðèôòà Wingdings (èëè 0- óäàëèòü)       |
//|   x   - êîîðäèíàòà â ïèêñåëÿõ, ïî ãîðèçîíòàëè                    |
//|   y   - êîîðäèíàòà â ïèêñåëÿõ ïî âåðòèêàëè                       |
//|   cl  - öâåò                                                     |
//|   bd  - Binding, óãîë ïðèâÿçêè îáúåêòà 0-3                       |
//|   ft  - øðèôò                                                    |
//|   sz  - ðàçìåð øðèôòà                                            |
//|   wd  - íîìåð îêíà â êîòîðîì ñîçäàâàòü ìåòêó                     |
//|   rt  - âðàùåíèå îáúåêòà â ãðàäóñàõ                              |
//+------------------------------------------------------------------+
void SetWingdings(string id, int nm=0, int x=0, int y=0, color cl=Black, int bd=0, string ft="Wingdings", int sz=12, int wd=0, int rt=0){
   if(x!=0&&y!=0){
      if(ObjectFind(id)<0)ObjectCreate(id,OBJ_LABEL,wd,0,0,0,0);
      ObjectSetText(id, CharToStr(nm), sz, ft, cl);
      ObjectSet(id, OBJPROP_CORNER, bd);
      ObjectSet(id, OBJPROP_XDISTANCE, x);
      ObjectSet(id, OBJPROP_YDISTANCE, y);
      ObjectSet(id,OBJPROP_ANGLE,rt);
   }else{
      if(ObjectFind(id)>=0)ObjectDelete(id);
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ôóíêöèÿ âîçâðàùàåò ðàçìåð ëîòà.                                  |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   posX     - Ïîçèöèÿ êóðñîðà ïî ãîðèçîíòàëè                      |
//|   posY     - Ïîçèöèÿ êóðñîðà ïî âåðòèêàëè                        |
//|   masLot   - Ìàññèâ ðàçìåðà ëîòîâ                                |
//|   devX     - êîýôôèöèåíò äåâèàöèè êóðñîðà ïî ãîðèçîíòàëè         |
//|   devY     - êîýôôèöèåíò äåâèàöèè êóðñîðà ïî âåðòèêàëè           |
//+------------------------------------------------------------------+
double GetLot(int posX, int posY, double& masLot[], int devX, int devY){
//---   
   string stLot;
   int x, y, numId=-1;
//----
   for(int i=0; i<ArraySize(masLot); i++){
      stLot=DoubleToStr(masLot[i], 2);
      if(ObjectFind(stLot)>=0){
         x=ObjectGet(stLot, OBJPROP_XDISTANCE);
         y=ObjectGet(stLot, OBJPROP_YDISTANCE);
         if(((posX>=x && posX <= x+devX) || (posX<=x && posX>=x-devX))&&((posY>=y && posY<=y+devY) || (posY<=y && posY>=y-devY))){
            if(numId<0) numId=i;
            else{
               Print("#Error, ObjectSearch(): Íàéäåíî 2 îáúåêòà. Ïîïðîáóéòå åù¸ ðàç, èëè óìåíüøèòå êîýôôèöèåíò äåâèàöèè.");
               numId=-1;
               break;
            }
         }
      }
   }
return(masLot[numId]);
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Î÷èùàåò ýêðàí îò ìåòîê ñ ëîòàìè.                                 |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   lots - Ìàññèâ ñ ðàçìåðàìè ëîòîâ êîòîðûå îòîáðàæàþòñÿ íà ýêðàíå |
//+------------------------------------------------------------------+
void ClearDisplayLots(double& lots[]){
//---
   string stLot;
//---
   for(int i=0; i<ArraySize(lots); i++){
      stLot=DoubleToStr(lots[i], 2);
      if(ObjectFind(stLot)>=0)ObjectDelete(stLot);
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Âîçâðàùàåò ñòðîêîâîå îïèñàíèå òîðãîâûõ îïåðàöèé.                 |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   op - Êîíñòàíòà îïåðàöèè (OP_BUY .... è.ò.ä)                    |
//+------------------------------------------------------------------+
string GetOperation(int op){
//---
   string stOp=NULL;
//---
   switch(op){
      case 0: stOp="Buy"; break;
      case 1: stOp="Sell"; break;
      case 2: stOp="BuyLimit"; break;
      case 3: stOp="SellLimit"; break;
      case 4: stOp="BuyStop"; break;
      case 5: stOp="SellStop"; break;
      default: Print("#Error, GetOperation(): Íåâåðíûé çàïðîñ, òèï îïåðàöèè íå îïðåäåë¸í."); break;
   }
  return(stOp);
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Ôóíêöèÿ ÿâëÿåòñÿ îáðàáîò÷èêîì, åé ïåðåäàþòñÿ êîîðäèíàòû êóðñîðà  |
//| è ìàññèâ èì¸í îáúåêòîâ ïî êîòîðûì èñêàòü, ôóíêöèÿ âîçâðàùàåò     |
//| èíäåêñ íàéäåííîãî îáúåêòà.                                       |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   arrObj   - Ìàññèâ èì¸í îáúåêòîâ äëÿ ïîèñêà îáúåêòîâ.           |
//|   posX     - Êîîðäèíàòà êóðñîðà ïî ãîðèçîíòàëè                   |
//|   posY     - Êîîðäèíàòà êóðñîðà ïî âåðòèêàëè                     |
//|   devX     - êîýôôèöèåíò äåâèàöèè ïî ãîðèçîíòàëè                 |
//|   devY     - êîýôôèöèåíò äåâèàöèè ïî âåðòèêàëè                   |
//+------------------------------------------------------------------+
int ObjectSearch(string& arrObj[], int posX, int posY, int devX, int devY){
   int numId=-1, x, y;   
   for(int i=0; i<ArraySize(arrObj); i++){
      if(ObjectFind(arrObj[i])>=0){
         x=ObjectGet(arrObj[i], OBJPROP_XDISTANCE);
         y=ObjectGet(arrObj[i], OBJPROP_YDISTANCE);
         if(((posX>=x && posX <= x+devX) || (posX<=x && posX>=x-devX))&&((posY>=y && posY<=y+devY) || (posY<=y && posY>=y-devY))){
            if(numId<0) numId=i;
            else{
               Print("#Error, ObjectSearch(): Íàéäåíî 2 îáúåêòà. Ïîïðîáóéòå åù¸ ðàç, èëè óìåíüøèòå êîýôôèöèåíò äåâèàöèè.");
               numId=-1;
               break;
            }
         }
      }
   }
return(numId);
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Çàêðûâàåò îäèí îðäåð, èëè ãðóïïó îðäåðîâ.                        |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   sy - Symbol èëè("" - òåêóùèé ñèìâîë, "all"- ëþáîé ñèìâîë)      |
//|   op - òèï îðäåðà OP_BUY, OP_SELL (-1) ëþáîé òèï                 |
//|   pr - (1)-òîëüêî ïðîôèòíûå, (0)-óáûòî÷íûå, (-1) âñå.            |
//|   tk - òèêåò îðäåðà (0 åñëè îðäåð óæå âûáðàí,(-1) âñå îðäåðà)    |
//|   mn - Magic èëè (-1) ëþáîé ìàãèê                                |
//|   cl - Öâåò óêàçàòåëÿ çàêðûòèÿ îðäåðà                            |
//+------------------------------------------------------------------+
void CloseOrders(string sy="", int op=-1, int pr=-1, int tk=-1, int mn=-1, color cl=CLR_NONE){
//---
   int orCx, err, orType;
   double clPr, prBid, prAsk;
//---
   if(sy=="")sy=Symbol();
   if(tk>0||tk==0)orCx=1;
   else orCx=OrdersTotal();
   
   for(int i=orCx; i>0; i--){
      //--------------- Ñ÷¸ò÷èê ïîïûòîê ñîâåðøåíèÿ îïåðàöèè ïðè íåóäà÷å ----------
      for(int cx=0; cx<NumberOfTry; cx++){
         if(tk>0 && tk!=0){
            //--- åñëè ïåðåäàí òèêåò
            if(!OrderSelect(tk, SELECT_BY_TICKET, MODE_TRADES)){
               err = GetLastError();
               Print("Error(",err,") CloseOrders() -> OrderSelect(): ",ErrorDescription(err));
               continue;
            }
         }
         //-------------- Åñëè òèêåòà íåò ïðîõîäèìñÿ ïî âñåì îðäåðàì ---------
         if(tk<0){
            if(!OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES)){
               err = GetLastError();
               Print("Error(",err,"), CloseOrders() -> OrderSelect() ",ErrorDescription(err));
               continue;
            }
         }
         orType=OrderType();
         if((orType==OP_BUY)||(orType==OP_SELL)){
            if((sy==OrderSymbol()||sy=="all")&&(mn==OrderMagicNumber()||mn<0)){
               if((op<0)||(op==orType)){
                  if(((pr>0)&&(OrderProfit()>0))||((pr==0)&&(OrderProfit()<0))||(pr<0)){
            
                     prBid=MarketInfo(OrderSymbol(), MODE_BID);
                     prAsk=MarketInfo(OrderSymbol(), MODE_ASK);
            
                     if(OrderType()==OP_BUY)clPr=prBid;
                     if(OrderType()==OP_SELL)clPr=prAsk;
         
                     if(OrderClose(OrderTicket(), OrderLots(), clPr, 0, cl)){
                        if (UseSound) PlaySound(NameFileSound);
                        break;
                     }
                     else err=GetLastError();
                     Print("Error(",err,") CloseOrders() -> OrderClose(): ",ErrorDescription(err),", try ",cx);
      
                     if(err==1||err==2||err==3||err==5) break;                      // 1-Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí, 2-Îáùàÿ îøèáêà, 3-Íåïðàâèëüíûå ïàðàìåòðû, 5-Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà
                     if(err==64||err==65||err==133||err==139) break;                // 64-Ñ÷åò çàáëîêèðîâàí, 65-Íåïðàâèëüíûé íîìåð ñ÷åòà, 133-Òîðãîâëÿ çàïðåùåíà, 139-Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ,
                     if(err==4||err==131||err==132) Sleep(1000*60);                 // 4-Òîðãîâûé ñåðâåð çàíÿò, 131-Íåïðàâèëüíûé îáúåì, 132-Ðûíîê çàêðûò
                     if(err==141) Sleep(1000*10);                                   // 141-Ñëèøêîì ìíîãî çàïðîñîâ
                     if(err==146) while (IsTradeContextBusy()) Sleep(1000*10);      // 146-Ïîäñèñòåìà òîðãîâëè çàíÿòà
                     if(err==135) Sleep(500);                                       // 135-Öåíà èçìåíèëàñü
                  }
               }
            }
         }
      }
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Óäàëÿåò îòëîæåííûå îðäåð(à).                                     |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   sy - Symbol èëè("" - òåêóùèé ñèìâîë, "all"- ëþáîé ñèìâîë)      |
//|   op - òèï îðäåðà OP_BUYSTOP, OP_SELLLIMIT è.ò.ä (-1) ëþáîé òèï  |
//|   tk - òèêåò îðäåðà (èëè 0 åñëè îðäåð óæå âûáðàí,(-1) âñå îðäåðà)|
//|   mn - Magic èëè (-1) ëþáîé ìàãèê                                |
//|   cl - Öâåò óêàçàòåëÿ óäàëåíèÿ îðäåðà                            |
//+------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int tk=-1, int mn=-1, color cl=CLR_NONE){
//---
   int orCx, orType, err;
//---
   if(sy=="")sy=Symbol();
   if(tk>0||tk==0)orCx=1;
   else orCx=OrdersTotal();
//---
   for(int i=orCx; i>0; i--){
      //--------------- Ñ÷¸ò÷èê ïîïûòîê ñîâåðøåíèÿ îïåðàöèè ïðè íåóäà÷å ----------
      for(int cx=0; cx<NumberOfTry; cx++){
         if(tk>0 && tk!=0){
            //--- åñëè ïåðåäàí òèêåò
            if(!OrderSelect(tk, SELECT_BY_TICKET, MODE_TRADES)){
               err = GetLastError();
               Print("Error(",err,") DeleteOrders() -> OrderSelect(): ",ErrorDescription(err));
               continue;
            }
         }
         //-------------- Åñëè òèêåòà íåò ïðîõîäèìñÿ ïî âñåì îðäåðàì ---------
         if(tk<0){
            if(!OrderSelect(i-1, SELECT_BY_POS, MODE_TRADES)){
               err = GetLastError();
               Print("Error(",err,"), DeleteOrders() -> OrderSelect() ",ErrorDescription(err));
               continue;
            }
         }
         orType=OrderType();
         if((orType==OP_BUYSTOP)||(orType==OP_SELLSTOP)||(orType==OP_BUYLIMIT)||(orType==OP_SELLLIMIT)){
            if((sy==OrderSymbol()||sy=="all")&&(mn==OrderMagicNumber()||mn<0)){
               if((op<0)||(op==orType)){
                  if(OrderDelete(OrderTicket(), cl)){
                     if (UseSound) PlaySound(NameFileSound);
                     break;
                  }
                  else err=GetLastError();
                  Print("Error(",err,") DeleteOrders() -> OrderDelete(): ",ErrorDescription(err),", try ",cx);
      
                  if(err==1||err==2||err==3||err==5) break;                      // 1-Íåò îøèáêè, íî ðåçóëüòàò íåèçâåñòåí, 2-Îáùàÿ îøèáêà, 3-Íåïðàâèëüíûå ïàðàìåòðû, 5-Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà
                  if(err==64||err==65||err==133||err==139) break;                // 64-Ñ÷åò çàáëîêèðîâàí, 65-Íåïðàâèëüíûé íîìåð ñ÷åòà, 133-Òîðãîâëÿ çàïðåùåíà, 139-Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ,
                  if(err==4||err==132) Sleep(1000*60);                           // 4-Òîðãîâûé ñåðâåð çàíÿò, 132-Ðûíîê çàêðûò
                  if(err==141) Sleep(1000*10);                                   // 141-Ñëèøêîì ìíîãî çàïðîñîâ
                  if(err==146) while (IsTradeContextBusy()) Sleep(1000*10);      // 146-Ïîäñèñòåìà òîðãîâëè çàíÿòà
               }
            }
         }
      }
   }
}
//+------------------------------------------------------------------+
//|  àâòîð: Pozitif        mail: alex-w-@bk.ru                       |
//+------------------------------------------------------------------+
//| Îòêðûâàåò îðäåð ïî ðûíî÷íîé öåíå è âîçâðàùàåò òèêåò.             |
//+------------------------------------------------------------------+
//| ïàðàìåòðû:                                                       |
//|   sy - Symbol (èëè "" - òåêóùèé ñèìâîë)                          |
//|   op - îïåðàöèÿ                                                  |
//|   lt - ëîò                                                       |
//|   sl - óðîâåíü ñòîï â ïóíêòàõ                                    |
//|   tp - óðîâåíü òåéê â ïóíêòàõ                                    |
//|   mn - MagicNumber                                               |
//|   cl - Öâåò îòêðûâàþùåãî óêàçàòåëÿ.                              |
//+------------------------------------------------------------------+
int OpenOrder(string sy, int op, double lt, double sl=0, double tp=0, int mn=0, color cl=CLR_NONE){
//---
   int dg, ticket, err, orTotal, minLevel;
   double prAsk, prBid, opPr, pt;
   string comment;
//----
   if (sy=="")sy=Symbol();
   
   comment=StringConcatenate(Day(),".",Month(),Year()," ",Hour(),":",Minute(),":",Seconds());
   lt=MathMax(lt, MarketInfo(Symbol(), MODE_MINLOT));
   lt=MathMin(lt, MarketInfo(Symbol(), MODE_MAXLOT));
   NormalizeDouble(lt, 2);
   
   orTotal=OrdersTotal();
   pt=MarketInfo(sy, MODE_POINT);
   dg=MarketInfo(sy, MODE_DIGITS);
   minLevel=MarketInfo(sy, MODE_STOPLEVEL);
   
   for (int i=0; i<NumberOfTry; i++)
   {
      while(!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      
      prAsk=MarketInfo(sy, MODE_ASK);
      prBid=MarketInfo(sy, MODE_BID);
      
      if((sl<minLevel)&&(sl!=0))sl=minLevel;
      if((tp<minLevel)&&(tp!=0))tp=minLevel;
      
      if(op==OP_BUY){
         opPr=prAsk;
         if(sl>0)sl=prBid-sl*pt;
         if(tp>0)tp=prBid+tp*pt;
      }
      if(op==OP_SELL){
         opPr=prBid;
         if(sl>0)sl=prAsk+sl*pt;
         if(tp>0)tp=prAsk-tp*pt;
      }
      opPr=NormalizeDouble(opPr, dg);
      ticket=OrderSend(sy, op, lt, opPr, Slippage, sl, tp, comment, mn, 0, cl);
      
      if(ticket>0){
         if(UseSound)PlaySound(NameFileSound);
         break;
      }
      else{
         err=GetLastError();
         if (prAsk==0 && prBid==0)Print("Ïðîâåðüòå â Îáçîðå ðûíêà íàëè÷èå ñèìâîëà: "+sy);
         Print("Error(",err,"), OpenOrder(): ",ErrorDescription(err),", try: ",i);
         
         if (err==2||err==64||err==65||err==133) break;
         if (err==4||err==131||err==132) Sleep(1000*300); break;
         if (err==128||err==142||err==143){
            Sleep(1000*40);
            if (OrdersTotal()>orTotal){
               if (UseSound)PlaySound(NameFileSound);
               break;
            }
         }
         if (err==140||err==148||err==4110||err==4111) break;
         if (err==141) Sleep(1000*10);
         if (err==145) Sleep(1000*10);
         if (err==146) while(IsTradeContextBusy()) Sleep(1000*10);
         if (err==135||err==138) Sleep(1000*5);
      }
   }
  return (ticket);
}
//+------------------------------------------------------------------+

Comments