mt_terminal

Author: Copyright � 2011, albr
Price Data Components
Series array that contains open time of each bar
Orders Execution
It automatically opens orders when conditions are reachedIt Closes Orders by itself Checks for the total of open ordersChecks for the total of closed orders
0 Views
0 Downloads
0 Favorites
mt_terminal
//+------------------------------------------------------------------+
//|                                                  mt_terminal.mq4 |
//|                                           Copyright © 2011, albr |
//|                                                     albr@ukr.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, albr"
#property link      "albr@ukr.net"
#include <stderror.mqh>


extern bool ShowArrow4NewOrders = false; // îòîáðàæàòü ñòðåëêè ïðè ïîêóïêå/ïðîäàæå/çàêðûòèè îðäåðîâ
extern int order_slippage = 3; // ìàêñèìàëüíîå îòêëîíåíèå îò çàïðîøåííîé öåíû

int magicnumber = 123; // èäåíòèôèêàòîð îðäåðîâ îòêðûòûõ ñ ïîìîùüþ ñîâåòíèêà

/* Âíóòðåííèå ïåðåìåííûå (íå ìîäèôèöèðîâàòü) */
int g_accMaxLotSize = 0; // ìàêñèìàëüíîå êîë-âî îòêðûâàåìûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
double g_accMaxLotValue = 0; // ìàêñèìàëüíîå çíà÷åíèå îáúåìà îòêðûòûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
int g_currentLotSize = 0; // òåêóùåå êîë-âî îòêðûâàåìûõ îðäåðîâ.
double g_currentLotValue = 0; // òåêóùåå çíà÷åíèå îáúåìà îòêðûòûõ îðäåðîâ.
string g_set_curr = ""; // òåêóùàÿ âàëþòà

int g_totalordersH = 0; // êîë-âî îðäåðîâ â èñòîðèè
int g_FirstOrderTicketH = -1; // ïåðâûé îðäåð â èñòîðèè

#import "mt_dll.dll"
   int init_dll(); 
   int deinit_dll();
   int prepare_write_dll();
   int write_dll(string);
   int commit_dll();   
   int get_orders_count_dll();
   string get_order_dll(int);
   int send_order_dll(string);   
#import


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{  
  init_dll();  
  g_totalordersH = 0; 
  g_FirstOrderTicketH = -1; 
  send_order_dll("hclear");
    
  return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
{
  deinit_dll();
  g_totalordersH = 0; 
  g_FirstOrderTicketH = -1; 
  return(0);
}
/*
aOrder:  OO LLLLL TTTTTTTTTT SSSSSSSSSSSSSSS PPPPPPPPPPPPPPP CCCCCCCC
         01 23456 7890123456 789012345678901 234567890123456 78901234
         

O 02[00 .. 01]: BN - buy now; SN - sell now; CN - Close now; BL - Buy Limit; BS - Buy Stop; SL - Sell Limit; SS - Sell Stop; CO - cancel order; MO - Modify Order;
                LS - max lots size; LV - max lots value;
L 05[02 .. 06]: lot size 5,2;
T 10[07 .. 16]: ticket no
S 15[17 .. 31]: stop lose 15
                max lot size; max lot value 
P 15[32 .. 46]: take profit 15
C 8 [47 .. 54]: currency
*/
int ParseOrder (string aOrder, int& aOrderType, double& aOrderValue, int& aOrderTicket, int& aOrderTP, int& aOrderSL, string& aCurrency)
{ 
  
  if (StringLen(aOrder)  < 7) return (1);
  
  int res = 0;
  
  string ordType = StringSubstr(aOrder, 0, 2);
  
  if (ordType == "BN")
  { 
    aOrderType = OP_BUY;
    aOrderValue = StrToDouble(StringTrimRight(StringSubstr(aOrder, 2, 5)))/100;    
    
    aOrderSL = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));    
    aOrderTP = StrToInteger(StringTrimRight(StringSubstr(aOrder, 32, 15))); 
    aCurrency = StringTrimRight(StringSubstr(aOrder, 47, 8));
    
  } else

  if (ordType == "SN")
  {
    aOrderType = OP_SELL;
    aOrderValue = StrToDouble(StringTrimRight(StringSubstr(aOrder, 2, 5)))/100;

    aOrderSL = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));    
    aOrderTP = StrToInteger(StringTrimRight(StringSubstr(aOrder, 32, 15)));        
    aCurrency = StringTrimRight(StringSubstr(aOrder, 47, 8));
  } else
  
  if (ordType == "CO")
  {
    aOrderType = -1;
    aOrderTicket = StrToInteger(StringTrimLeft(StringSubstr(aOrder, 7, 10)));
  } else
 
  if (ordType == "LS")
  {    // ìàêñèìàëüíîå êîë-âî îòêðûâàåìûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
    g_accMaxLotSize = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));
   
    res = 1;
  } else    
  
  if (ordType == "LV")
  {    // ìàêñèìàëüíîå çíà÷åíèå îáúåìà îòêðûòûõ îðäåðîâ. óñòàíàâëèâàåòñÿ èç ìîíèòîðà. ñîõðàíÿåòñÿ äëÿ êàæäîãî ñ÷åòà îòäåëüíî.
    g_accMaxLotValue = StrToInteger(StringTrimRight(StringSubstr(aOrder, 17, 15)));        
    g_accMaxLotValue = g_accMaxLotValue / 100;
    res = 1;
  } else    
  
  if (ordType == "SC")
  {    // Set Currency
    g_set_curr = StringTrimRight(StringSubstr(aOrder, 7, 10));
    if (MarketInfo(g_set_curr, MODE_ASK) == 0) 
    {
      g_set_curr = "";   
    }
    
    res = 1;
  } else    
  
  if (ordType == "UH")
  {   
    g_totalordersH = 0; 
    g_FirstOrderTicketH = -1;     
        
    res = 1;
  } else    
  
  
  
  {
    res = 1;
  }
  return (res);
}

/* getCurrency - òåêóùàÿ âàëþòà*/
string getCurrency(string aCCY)
{
  if (aCCY != "") {return (aCCY);}
  if (g_set_curr == "") {return (Symbol());}
  return (g_set_curr);  
}

double getCurrencyBid(string aCCY)
{
  return (MarketInfo(getCurrency(aCCY), MODE_BID));
}

double getCurrencyAsk(string aCCY)
{
  return (MarketInfo(getCurrency(aCCY), MODE_ASK));
}

double getCurrencyPoint(string aCCY)
{
  return (MarketInfo(getCurrency(aCCY), MODE_POINT));
}

void PrintError(string aErrM)
{
  if (StringLen(aErrM) > 0)
  {
    Print("err:",aErrM,".");
    send_order_dll("m"+aErrM);
  }
  
  return;
}

/*CheckOrder - ïðîâåðêà îãðàíè÷åíèé ïî ìàêñèìàëüíîìó êîë-âó ëîòîâ
  albr
*/
bool CheckOrder(int aOrderType, double aOrderValue)
{
  string l_last_error_message = "";

  if (g_accMaxLotSize > 0) 
  {
    if  (g_currentLotSize+1 > g_accMaxLotSize) 
    {
      l_last_error_message = "[" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS ) + "] Íàðóøåíî îãðàíè÷åíèå ïî ìàêñèìàëüíîìó êîë-âó îòêðûòûõ îðäåðîâ. Ìàêñèìóì = "+g_accMaxLotSize+". Òåêóùåå êîë-âî = "+g_currentLotSize;
      PrintError(l_last_error_message);
      return (false);
    }
  }
  
  if (g_accMaxLotValue > 0) 
  {
    if  (NormalizeDouble(g_currentLotValue+aOrderValue,2) > NormalizeDouble(g_accMaxLotValue,2)) 
    {
      
      l_last_error_message = "[" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS ) + "] Íàðóøåíî îãðàíè÷åíèå ïî ìàêñèìàëüíîìó îáúåìó îòêðûòûõ îðäåðîâ. Ìàêñèìóì = "+DoubleToStr(NormalizeDouble(g_accMaxLotValue ,2),2)
              +". Òåêóùèé îáúåì = "+DoubleToStr(NormalizeDouble(g_currentLotValue,2),2);
      PrintError(l_last_error_message);
      return (false);
    }
  }

  return (true);
}

/* apply_new_orders - îáðàáîòàòü íîâûå îðäåðà
  albr
*/
int apply_new_orders(string acc_num)
{
  int new_orders = get_orders_count_dll();
  int ticket = 0;
  string l_last_error_message = "";
  
  string lOrder;    
  if (new_orders > 0)
  {
    for (int i = 0; i<new_orders; i++)
    {
      RefreshRates();
      lOrder = get_order_dll(i);  
      
      int lOrderType; 
      double lOrderValue; 
      int lOrderTP;
      int lOrderSL;
      double lOrderTP_;
      double lOrderSL_;      
      int lOrderTicket;
      int lColorB = Green;
      int lColorS = Violet;
      string lCCY = "";
      string sOrd = "";      
      
      if (ShowArrow4NewOrders == false)
      {
        lColorB = CLR_NONE;
        lColorS = CLR_NONE;
      }
      
      if (ParseOrder (lOrder, lOrderType, lOrderValue, lOrderTicket, lOrderTP, lOrderSL, lCCY) == 0)
      {       
        
        if (lOrderType == OP_BUY && lOrderValue > 0) 
        {  
          if (CheckOrder(lOrderType, lOrderValue) == false) return (0);
          
          if (lOrderTP <= 0) 
            {lOrderTP_ = NULL;} else
            {lOrderTP_ = getCurrencyAsk(lCCY) + lOrderTP*getCurrencyPoint(lCCY);}
            
          if (lOrderSL <= 0) 
            {lOrderSL_ = NULL;} else
            {lOrderSL_ = getCurrencyAsk(lCCY) - lOrderSL*getCurrencyPoint(lCCY);}    
        
          ticket = OrderSend(getCurrency(lCCY), OP_BUY, lOrderValue, getCurrencyAsk(lCCY), order_slippage, lOrderSL_, lOrderTP_, NULL, magicnumber, 0, lColorB);
          sOrd = DoubleToStr(NormalizeDouble(lOrderValue ,2),2) + " BUY (#"+ticket+") "+getCurrency(lCCY);
        }
        else 
        if (lOrderType == OP_SELL && lOrderValue > 0) 
        {
          if (CheckOrder(lOrderType, lOrderValue) == false) return (0);
          
          if (lOrderTP <= 0) 
            {lOrderTP_ = NULL;} else
            {lOrderTP_ = getCurrencyBid(lCCY) - lOrderTP*getCurrencyPoint(lCCY);}
            
          if (lOrderSL <= 0) 
            {lOrderSL_ = NULL;} else
            {lOrderSL_ = getCurrencyBid(lCCY) + lOrderSL*getCurrencyPoint(lCCY);}    

          ticket = OrderSend(getCurrency(lCCY), OP_SELL, lOrderValue, getCurrencyBid(lCCY), order_slippage, lOrderSL_, lOrderTP_, NULL, magicnumber, 0, lColorB);
          sOrd = DoubleToStr(NormalizeDouble(lOrderValue ,2),2) + " SELL (#"+ticket+") "+getCurrency(lCCY);
        }
        else
        if (lOrderType == -1 && lOrderTicket > 0) 
        {         
            if(OrderSelect(lOrderTicket, SELECT_BY_TICKET, MODE_TRADES)==true)
            {              
              if(OrderType()==OP_BUY) 
              {    
                sOrd = DoubleToStr(NormalizeDouble(OrderLots() ,2),2) + " CLOSE BUY (#"+lOrderTicket+") "+DoubleToStr(NormalizeDouble(OrderProfit()+OrderSwap(),2),2)+" "+OrderSymbol();
                if (OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_BID),order_slippage,lColorS)) PrintLastHistoryOrder(lOrderTicket);
              }
              else
              if(OrderType()==OP_SELL) 
              {
                sOrd = DoubleToStr(NormalizeDouble(OrderLots() ,2),2) + " CLOSE SELL (#"+lOrderTicket+") "+DoubleToStr(NormalizeDouble(OrderProfit()+OrderSwap(),2),2)+" "+OrderSymbol();
                if (OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(), MODE_ASK),order_slippage,lColorS)) PrintLastHistoryOrder(lOrderTicket);
              }            
            }    
        }
        
        int err=GetLastError();
        if (StringLen(l_last_error_message) > 0) l_last_error_message = l_last_error_message + ";%%%";
        
        l_last_error_message = l_last_error_message + "[" + TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS ) + "] ";        
        
        if (err != ERR_NO_ERROR)
        {
          l_last_error_message = l_last_error_message + ErrorDescription(err);
        } 
          else
        {
          l_last_error_message = l_last_error_message + sOrd;          
         }

      }
    }
  }  
  
  PrintError(l_last_error_message);
  
  return (0);    
}

/* upload_account_info - âûãðóçèòü èíôîðìàöèþ î òåêóùåì ñ÷åòå
  albr
*/  
int upload_account_info(string acc_num)
{  
  prepare_write_dll();
  write_dll("[ACCOUNT]="+acc_num);    
  write_dll("[BALANCE]="+DoubleToStr(NormalizeDouble(AccountBalance(),2),2));
  write_dll("[EQUITY]="+DoubleToStr(NormalizeDouble(AccountEquity(),2),2));
  write_dll("[PROFIT]="+DoubleToStr(NormalizeDouble(AccountEquity()-AccountBalance(),2),2));
  double lpoint = getCurrencyPoint("");
  if (lpoint == 0) 
  {    
    write_dll("[SPREAD]=0"); 
    write_dll("[DEFCCYASK]=0");
    write_dll("[DEFCCYBID]=0");
  
  } else
  {
    write_dll("[SPREAD]="+DoubleToStr((getCurrencyAsk("") - getCurrencyBid(""))/lpoint,0));
    write_dll("[DEFCCYASK]="+DoubleToStr(getCurrencyAsk("")/lpoint,0));
    write_dll("[DEFCCYBID]="+DoubleToStr(getCurrencyBid("")/lpoint,0));
  }
  write_dll("[DEFCCY]="+getCurrency(""));  
  
  
  
    
  int totalorders = OrdersTotal();
  g_currentLotSize = totalorders;
  g_currentLotValue = 0; 
  
  write_dll("[ORDERS]="+DoubleToStr(NormalizeDouble(totalorders,0),0));
    
  for (int i=0; i < totalorders; i++)
  { 
    if (OrderSelect(i, SELECT_BY_POS)) 
    {
      write_dll("[ORDER_"+i+"_TICKET]="+OrderTicket()); 
      write_dll("[ORDER_"+i+"_SYMBOL]="+OrderSymbol());           
      write_dll("[ORDER_"+i+"_TYPE]="+GetOrderTypeStr(OrderType()));        
      write_dll("[ORDER_"+i+"_LOTS]="+DoubleToStr(NormalizeDouble(OrderLots(),2),2));      
      g_currentLotValue = NormalizeDouble(g_currentLotValue + OrderLots(),2);
      write_dll("[ORDER_"+i+"_OPENTIME]="+TimeToStr(OrderOpenTime(),TIME_DATE|TIME_SECONDS));        
      write_dll("[ORDER_"+i+"_PROFIT]="+DoubleToStr(NormalizeDouble(OrderProfit(),2),2));
      write_dll("[ORDER_"+i+"_SWAP]="+DoubleToStr(NormalizeDouble(OrderSwap() ,2),2));
      write_dll("[ORDER_"+i+"_MAGIC]="+DoubleToStr(NormalizeDouble(OrderMagicNumber() ,0),0));
      
      write_dll("[ORDER_"+i+"_OPENPRICE]="+DoubleToStr(NormalizeDouble(OrderOpenPrice(), 5), 5));
    }       
  }    
  commit_dll(); 
  PrintHistoryOrders();  
  return (0);      
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{      
  apply_new_orders(AccountNumber());
  upload_account_info(AccountNumber());  
  return(0);
}
//+------------------------------------------------------------------+
string ErrorDescription(int err_code)
  {
   switch(err_code)
     {
      case 1: return("Ïîïûòêà èçìåíèòü óæå óñòàíîâëåííûå çíà÷åíèÿ òàêèìè æå çíà÷åíèÿìè");
      case 2: return("Îáùàÿ îøèáêà. Ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé äî âûÿñíåíèÿ îáñòîÿòåëüñòâ");
      case 3: return("Â òîðãîâóþ ôóíêöèþ ïåðåäàíû íåïðàâèëüíûå ïàðàìåòðû ");
      case 4: return("Òîðãîâûé ñåðâåð çàíÿò");
      case 5: return("Ñòàðàÿ âåðñèÿ êëèåíòñêîãî òåðìèíàëà");
      case 6: return("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì");
      case 7: return("Íåäîñòàòî÷íî ïðàâ");
      case 8: return("Ñëèøêîì ÷àñòûå çàïðîñû");
      case 9: return("Íåäîïóñòèìàÿ îïåðàöèÿ íàðóøàþùàÿ ôóíêöèîíèðîâàíèå ñåðâåðà");
      case 64: return("Ñ÷åò çàáëîêèðîâàí. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé");
      case 65: return("Íåïðàâèëüíûé íîìåð ñ÷åòà. Íåîáõîäèìî ïðåêðàòèòü âñå ïîïûòêè òîðãîâûõ îïåðàöèé");
      case 128: return("Èñòåê ñðîê îæèäàíèÿ ñîâåðøåíèÿ ñäåëêè");
      case 129: return("Íåïðàâèëüíàÿ öåíà bid èëè ask, âîçìîæíî, íåíîðìàëèçîâàííàÿ öåíà");
      case 130: return("Ñëèøêîì áëèçêèå ñòîïû èëè íåïðàâèëüíî ðàññ÷èòàííûå èëè íåíîðìàëèçîâàííûå öåíû â ñòîïàõ (èëè â öåíå îòêðûòèÿ îòëîæåííîãî îðäåðà)");
      case 131: return("Íåïðàâèëüíûé îáúåì, îøèáêà â ãðàíóëÿöèè îáúåìà");
      case 132: return("Ðûíîê çàêðûò");
      case 133: return("Òîðãîâëÿ çàïðåùåíà");
      case 134: return("Íåäîñòàòî÷íî äåíåã äëÿ ñîâåðøåíèÿ îïåðàöèè");
      case 135: return("Öåíà èçìåíèëàñü");
      case 136: return("Íåò öåí");
      case 137: return("Áðîêåð çàíÿò");
      case 138: return("Çàïðîøåííàÿ öåíà óñòàðåëà, ëèáî ïåðåïóòàíû bid è ask");
      case 139: return("Îðäåð çàáëîêèðîâàí è óæå îáðàáàòûâàåòñÿ");
      case 140: return("Ðàçðåøåíà òîëüêî ïîêóïêà. Ïîâòîðÿòü îïåðàöèþ SELL íåëüçÿ");
      case 141: return("Ñëèøêîì ìíîãî çàïðîñîâ");
      case 142: return("Îðäåð ïîñòàâëåí â î÷åðåäü");
      case 143: return("Îðäåð ïðèíÿò äèëåðîì ê èñïîëíåíèþ");
      case 144: return("Îðäåð àííóëèðîâàí ñàìèì êëèåíòîì ïðè ðó÷íîì ïîäòâåðæäåíèè ñäåëêè");
      case 145: return("Ìîäèôèêàöèÿ çàïðåùåíà, òàê êàê îðäåð ñëèøêîì áëèçîê ê ðûíêó è çàáëîêèðîâàí èç-çà âîçìîæíîãî ñêîðîãî èñïîëíåíèÿ");
      case 146: return("Ïîäñèñòåìà òîðãîâëè çàíÿòà. Ïîâòîðèòü ïîïûòêó òîëüêî ïîñëå òîãî, êàê ôóíêöèÿ IsTradeContextBusy âåðíåò FALSE.");
      case 147: return("Èñïîëüçîâàíèå äàòû èñòå÷åíèÿ îðäåðà çàïðåùåíî áðîêåðîì");
      case 148: return("Êîëè÷åñòâî îòêðûòûõ è îòëîæåííûõ îðäåðîâ äîñòèãëî ïðåäåëà, óñòàíîâëåííîãî áðîêåðîì");
      case 149: return("Ïîïûòêà îòêðûòü ïðîòèâîïîëîæíóþ ïîçèöèþ ê óæå ñóùåñòâóþùåé â ñëó÷àå, åñëè õåäæèðîâàíèå çàïðåùåíî");      
      case 4001: return("Íåïðàâèëüíûé óêàçàòåëü ôóíêöèè");
      case 4002: return("Èíäåêñ ìàññèâà - âíå äèàïàçîíà");
      case 4003: return("Íåò ïàìÿòè äëÿ ñòåêà ôóíêöèé");
      case 4004: return("Ïåðåïîëíåíèå ñòåêà ïîñëå ðåêóðñèâíîãî âûçîâà");
      case 4005: return("Íà ñòåêå íåò ïàìÿòè äëÿ ïåðåäà÷è ïàðàìåòðîâ");
      case 4006: return("Íåò ïàìÿòè äëÿ ñòðîêîâîãî ïàðàìåòðà");
      case 4007: return("Íåò ïàìÿòè äëÿ âðåìåííîé ñòðîêè");
      case 4008: return("Íåèíèöèàëèçèðîâàííàÿ ñòðîêà");
      case 4009: return("Íåèíèöèàëèçèðîâàííàÿ ñòðîêà â ìàññèâå");
      case 4010: return("Íåò ïàìÿòè äëÿ ñòðîêîâîãî ìàññèâà");
      case 4011: return("Ñëèøêîì äëèííàÿ ñòðîêà");
      case 4012: return("Îñòàòîê îò äåëåíèÿ íà íîëü");
      case 4013: return("Äåëåíèå íà íîëü");
      case 4014: return("Íåèçâåñòíàÿ êîìàíäà");
      case 4015: return("Íåïðàâèëüíûé ïåðåõîä");
      case 4016: return("Íåèíèöèàëèçèðîâàííûé ìàññèâ");
      case 4017: return("Âûçîâû DLL íå ðàçðåøåíû");
      case 4018: return("Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó");
      case 4019: return("Íåâîçìîæíî âûçâàòü ôóíêöèþ");
      case 4020: return("Âûçîâû âíåøíèõ áèáëèîòå÷íûõ ôóíêöèé íå ðàçðåøåíû");
      case 4021: return("Íåäîñòàòî÷íî ïàìÿòè äëÿ ñòðîêè, âîçâðàùàåìîé èç ôóíêöèè");
      case 4022: return("Ñèñòåìà çàíÿòà");
      case 4050: return("Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ ôóíêöèè");
      case 4051: return("Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè");
      case 4052: return("Âíóòðåííÿÿ îøèáêà ñòðîêîâîé ôóíêöèè");
      case 4053: return("Îøèáêà ìàññèâà");
      case 4054: return("Íåïðàâèëüíîå èñïîëüçîâàíèå ìàññèâà-òàéìñåðèè");
      case 4055: return("Îøèáêà ïîëüçîâàòåëüñêîãî èíäèêàòîðà");
      case 4056: return("Ìàññèâû íåñîâìåñòèìû");
      case 4057: return("Îøèáêà îáðàáîòêè ãëîáàëüíûåõ ïåðåìåííûõ");
      case 4058: return("Ãëîáàëüíàÿ ïåðåìåííàÿ íå îáíàðóæåíà");
      case 4059: return("Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå");
      case 4060: return("Ôóíêöèÿ íå ðàçðåøåíà");
      case 4061: return("Îøèáêà îòïðàâêè ïî÷òû");
      case 4062: return("Îæèäàåòñÿ ïàðàìåòð òèïà string");
      case 4063: return("Îæèäàåòñÿ ïàðàìåòð òèïà integer");
      case 4064: return("Îæèäàåòñÿ ïàðàìåòð òèïà double");
      case 4065: return(" êà÷åñòâå ïàðàìåòðà îæèäàåòñÿ ìàññèâ");
      case 4066: return("Çàïðîøåííûå èñòîðè÷åñêèå äàííûå â ñîñòîÿíèè îáíîâëåíèÿ");
      case 4067: return("Îøèáêà ïðè âûïîëíåíèè òîðãîâîé îïåðàöèè");
      case 4099: return("Êîíåö ôàéëà");
      case 4100: return("Îøèáêà ïðè ðàáîòå ñ ôàéëîì");
      case 4101: return("Íåïðàâèëüíîå èìÿ ôàéëà");
      case 4102: return("Ñëèøêîì ìíîãî îòêðûòûõ ôàéëîâ");
      case 4103: return("Íåâîçìîæíî îòêðûòü ôàéë");
      case 4104: return("Íåñîâìåñòèìûé ðåæèì äîñòóïà ê ôàéëó");
      case 4105: return("Íè îäèí îðäåð íå âûáðàí");
      case 4106: return("Íåèçâåñòíûé ñèìâîë");
      case 4107: return("Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè");
      case 4108: return("Íåâåðíûé íîìåð òèêåòà");
      case 4109: return("Òîðãîâëÿ íå ðàçðåøåíà. Íåîáõîäèìî âêëþ÷èòü îïöèþ Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü â ñâîéñòâàõ ýêñïåðòà");
      case 4110: return("Äëèííûå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà");
      case 4111: return("Êîðîòêèå ïîçèöèè íå ðàçðåøåíû. Íåîáõîäèìî ïðîâåðèòü ñâîéñòâà ýêñïåðòà");
      case 4200: return("Îáúåêò óæå ñóùåñòâóåò");
      case 4201: return("Çàïðîøåíî íåèçâåñòíîå ñâîéñòâî îáúåêòà");
      case 4202: return("Îáúåêò íå ñóùåñòâóåò");
      case 4203: return("Íåèçâåñòíûé òèï îáúåêòà");
      case 4204: return("Íåò èìåíè îáúåêòà");
      case 4205: return("Îøèáêà êîîðäèíàò îáúåêòà");
      case 4206: return("Íå íàéäåíî óêàçàííîå ïîäîêíî");
      case 4207: return("Îøèáêà ïðè ðàáîòå ñ îáúåêòîì");
      default:   return("Íåèçâåñòíàÿ îøèáêà: "+err_code);
     }
     return("");
  }
  
/* PrintHistoryOrders - âûãðóçèòü èíôîðìàöèþ îá èñòîðèè òåêóùåãî ñ÷åòà
  albr
*/ 
  void PrintHistoryOrders()
  { 
    int totalorders  = OrdersHistoryTotal();
    
    if (g_totalordersH == totalorders) 
    {
      if (totalorders > 0)
      {
        if(OrderSelect(0,SELECT_BY_POS, MODE_HISTORY))
        { 
          if (g_FirstOrderTicketH == OrderTicket()) return;
          g_FirstOrderTicketH = OrderTicket();
        }              
      } 
      else
      {
        g_FirstOrderTicketH = -1;
        return;
      }
    }
    g_totalordersH = totalorders;
    send_order_dll("hclear");
    
    
    for (int i=0; i < totalorders; i++)
    {
    
      if(OrderSelect(i,SELECT_BY_POS, MODE_HISTORY))
      {
        SendHistoryOrder();    
      }
    }
  }

/* PrintLastHistoryOrder - âûãðóçèòü èíôîðìàöèþ î ïîñëåäíåì çàêðûòîì îðäåðå
  albr
*/   
  void PrintLastHistoryOrder(int HistoryTicket)
  {    
    if(OrderSelect(HistoryTicket, SELECT_BY_TICKET, MODE_HISTORY))
    {
      g_totalordersH = g_totalordersH + 1;
      SendHistoryOrder();
    }    
  }
  
string GetOrderTypeStr(int aOrderType)  
{
  string ord_type;        
  switch(aOrderType)
  {
    case OP_BUY: ord_type = "BUY"; break;
    case OP_SELL: ord_type = "SELL"; break;
    case OP_BUYLIMIT: ord_type = "BUYLIMIT"; break;
    case OP_BUYSTOP: ord_type = "BUYSTOP"; break;
    case OP_SELLLIMIT: ord_type = "SELLLIMIT"; break;
    case OP_SELLSTOP: ord_type = "SELLSTOP"; break;
  }
  return (ord_type);
}

void SendHistoryOrder()
{
send_order_dll("h["+ DoubleToStr(NormalizeDouble(OrderLots() ,2),2)+ 
        "]["+ OrderMagicNumber()+
        "]["+ OrderTicket()+
        "]["+ OrderSymbol()+  
        "]["+ DoubleToStr(NormalizeDouble(OrderClosePrice(),5),5) +
        "]["+ TimeToStr(OrderCloseTime(),TIME_DATE|TIME_MINUTES)+
        "]["+ DoubleToStr(NormalizeDouble(OrderOpenPrice() ,5),5)+
        "]["+ TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES)+
        "]["+ DoubleToStr(NormalizeDouble(OrderSwap() ,2),2)+
        "]["+ DoubleToStr(NormalizeDouble(OrderProfit() ,2),2)+
        "]["+ GetOrderTypeStr(OrderType())+
        "]"        
        );
  return;
}


Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---