eEquityTrailing

Author: *
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It issuies visual alerts to the screen
0 Views
0 Downloads
0 Favorites
eEquityTrailing
//+------------------------------------------------------------------+
//|                                              eEquityTrailing.mq4 |
//|                                                                * |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "*"
#property link      "*"

/*
      Òðåéëèíã ýêâèòè. 
      
      Ïî ïðèíöèïó ðàáîòå àíàëîãè÷åí ðàáîòå òðåéëèíãà îðäåðà.
      Ïðè äîñòèæåíèè çàäàííîãî çíà÷åíèÿ ýêâèòè ýêñïåðò íà÷èíàåò ôèêñèðîâàòü
      ìàêñèìàëüíîå çíà÷åíèå ýêâèòè, çàòåì, â ñëó÷àå ñíèæåíèÿ ýêâèòè 
      íà çàäàííóþ âåëè÷èíó âûïîëíÿåòñÿ çàêðûòèå âñåõ îðäåðîâ îòêðûòûõ íà ñ÷åòå.
      
      Âñå íàñòðîéêè (çà èñêëþ÷åíèåì âûáîðà öâåòîâîé ñõåìû) âûïîëíÿþòñÿ ÷åðåç 
      óïðàâëåíèå ñâîéñòâîì "Òåêñò" ãðàôè÷åñêèõ îáúåêòîâ. Ãðàôè÷åñêèå îáúåêòû 
      íàõîäÿòñÿ â ïðàâîì âåðõíåì óãëó ãðàôèêà.
      
      Ýëåìåíòû óïðàâëåíèÿ:
      
         1. ON/OF - âêëþ÷åíèå/âûêëþ÷åíèå ýêñïåðòà. Ýêñïåðò ìîæåò ïîñòîÿííî áûòü íà ãðàôèêå 
                 è èñïîëüçîâàòüñÿ ïî ìåðå íåîáõîäèìîñòè. 
      
         2. StartEquity ($) - Ýêâèòè ïðè äîñòèæåíèè êîòîðîãî íà÷èíàåòñÿ ïåðåìåùåíèå óðîâíÿ
                           çàêðûòèÿ.
                           
         3. Level ($) - Óðîâåíü çàêðûòèÿ. 
         
         Ïðè èçìåíåíèè çíà÷åíèé ìîæíî èñïîëüçîâàòü çàïÿòóþ â êà÷åñòâå äåñÿòè÷íîãî ðàçäåëèòåëÿ,
         íå òîëüêî òî÷êó.
         
      Èíôîðìàöèîííûå íàäïèñè:
      
         4. MaxEquity ($) - ìàêñèìàëüíîå ýêâèòè, çàôèêñèðîâàííîå îò ìîìåíòà âêëþ÷åíèÿ ýêñïåðòà. 
                         Ïðè íåîáõîäèìîñòè çíà÷åíèå ìîæíî ìåíÿòü òàêæå êàê ó 
                         íàäïèñåé - ýëåìåíòîâ óïðàâëåíèÿ.   
      
         5. CloseEquity ($) - óðîâåíü ýêâèòè, ïðè ñíèæåíèè äî êîòîðîãî áóäåò âûïîëíåíî çàêðûòèå.
         
         6. Equity ($) - òåêóùåå ýêâèòè.
         
         Çíàê ($) - åäèíèöà èçìåðåíèÿ - âàëþòà äåïîçèòà (íå îáÿçàòåëüíî äîëëàðû).
         
      Ýêñïåðò íå áîèòñÿ ïåðåçàïóñêà òåðìèíàëà èëè êîìïüþòåðà, ïåðåêëþ÷åíèÿ ãðàôèêà: 
      òàéìôðåéìà, ñèìâîëà. Âñå äàííûå ñîõðàíÿþòñÿ â íàäïèñÿõ. Íàäïèñè óäàëÿþòñÿ 
      òîëüêî ïðè ñíÿòèè ýêñïåðòà ñ ãðàôèêà èëè ïðè ïåðåêëþ÷åíèè ñ÷åòà.
      
      Ïåðåä íà÷àëîì âûïîëíåíèÿ çàêðûòèÿ îòêðûâàåòñÿ àëåðò ñ ñîîáùåíèåì "Âûïîëíÿþ çàêðûòèå".
      Ïîñëå âûïîëíåíèÿ çàêðûòèÿ ýêñïåðò îòêëþ÷àåòñÿ (÷åðåç íàäïèñü ON/OF).
      
      Âíåøíèå ïàðàìåòðû:
          
         BlackBG - Öâåòîâàÿ ñõåìà äëÿ ÷åðíîãî ôîíà, false - äëÿ áåëîãî.
*/

extern bool BlackBG=true; // Öâåòîâàÿ ñõåìà äëÿ ÷åðíîãî ôîíà, false - äëÿ áåëîãî.

color Caption; // Öâåò íàäïèñåé
color Control; // Öâåò ýëåìåíòîâ óïðàâëåíèÿ (íàäïèñåé â êîòîðûõ ìîæíî ìåíÿòü çíà÷åíèÿ)   
color ControlInfo; // Öâåò èíôîðìàöèîííîé íàäïèñè, â êîòîðîé ìîæíî ìåíÿòü çíà÷åíèå.
color On; // Öâåò âûêëþ÷àòåëÿ âî âêëþ÷åííîì ñîñòîÿíèè.
color Of; // Öâåò âûêëþ÷àòåëÿ â âûêëþ÷åííîì ñîñòîÿíèè.




double StartEquity$=0;
double Level$=100.0;
double MaxEq;
bool CloseFlag;
bool OnOf=false;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

int init(){

   Caption=White;
   Control=Yellow;
   ControlInfo=Red;
   On=Lime;
   Of=Silver;

      if(!BlackBG){
         Caption        =  Black;
         Control        =  Chocolate;
         ControlInfo    =  Red;
         On             =  Green;
         Of             =  Gray;
      }

   OnOf=false;
      if(ObjectFind(WindowExpertName()+"_OnOf")==0){
         if(ObjectDescription(WindowExpertName()+"_OnOf")=="ON"){
            OnOf=true;
         }
      }
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   if(UninitializeReason()==REASON_REMOVE || UninitializeReason()==REASON_ACCOUNT){
      fObjDeleteByPrefix(WindowExpertName());
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+



int start(){

   //if(OrdersTotal()==0)
   //OrderSend(Symbol(),OP_BUY,0.1,NormalizeDouble(Ask,Digits),0,NormalizeDouble(Ask-Point*200,Digits),NormalizeDouble(Ask+Point*350,Digits),NULL,0,0,CLR_NONE);

   fGUI_OnOff_Simple(WindowExpertName()+"_OnOf",OnOf,"ON","OF",5,15,1,On,Of,"Arial",8);
   
   fObjLabel(WindowExpertName()+"_StEq_Lbl",5,30,"StartEquity ($)",1,Caption,8,0,"Arial",false);
      if(ObjectFind(WindowExpertName()+"_StEq_Value")!=0){
         fObjLabel(WindowExpertName()+"_StEq_Value",85,30,DS2(StartEquity$),1,Control,8,0,"Arial",false);
      }
   ObjectSet(WindowExpertName()+"_StEq_Value",OBJPROP_XDISTANCE,85);
   ObjectSet(WindowExpertName()+"_StEq_Value",OBJPROP_YDISTANCE,30); 
   ObjectSet(WindowExpertName()+"_StEq_Value",OBJPROP_COLOR,Control);   
   string tmp=ObjectDescription(WindowExpertName()+"_StEq_Value");
   fStrReplace(tmp,",",".");
   StartEquity$=StrToDouble(tmp);  
   ObjectSetText(WindowExpertName()+"_StEq_Value",DS2(StartEquity$));
 
   fObjLabel(WindowExpertName()+"_Level_Lbl",5,45,"Level ($)",1,Caption,8,0,"Arial",false);
      if(ObjectFind(WindowExpertName()+"_Level_Value")!=0){
         fObjLabel(WindowExpertName()+"_Level_Value",85,45,DS2(Level$),1,Control,8,0,"Arial",false);
      }
   ObjectSet(WindowExpertName()+"_Level_Value",OBJPROP_XDISTANCE,85);
   ObjectSet(WindowExpertName()+"_Level_Value",OBJPROP_YDISTANCE,45);  
   ObjectSet(WindowExpertName()+"_Level_Value",OBJPROP_COLOR,Control);  
   
   
   tmp=ObjectDescription(WindowExpertName()+"_Level_Value");
   fStrReplace(tmp,",",".");
   Level$=StrToDouble(tmp);  
   ObjectSetText(WindowExpertName()+"_Level_Value",DS2(Level$));  
      
  
   fObjLabel(WindowExpertName()+"_MaxEquity_Lbl",5,60,"MaxEquity ($)",1,Caption,8,0,"Arial",false);      
      if(ObjectFind(WindowExpertName()+"_MaxEquity")!=0){
         fObjLabel(WindowExpertName()+"_MaxEquity",85,60,DS2(MaxEq),1,ControlInfo,8,0,"Arial",false);
      }
      else{
         tmp=ObjectDescription(WindowExpertName()+"_MaxEquity");
         fStrReplace(tmp,",",".");
         MaxEq=StrToDouble(tmp);
      }   
   ObjectSet(WindowExpertName()+"_MaxEquity",OBJPROP_XDISTANCE,85);
   ObjectSet(WindowExpertName()+"_MaxEquity",OBJPROP_YDISTANCE,60);           
   ObjectSet(WindowExpertName()+"_MaxEquity",OBJPROP_COLOR,ControlInfo);  
   
      if(MaxEq!=0 && OnOf){
         fObjLabel(WindowExpertName()+"_CloseLevel_Lbl_1",5,75,"CloseEquity ($)",1,Caption,8,0,"Arial",false);  
         fObjLabel(WindowExpertName()+"_CloseLevel_Lbl_2",85,75,DS2(MaxEq-Level$),1,Caption,8,0,"Arial",false);  
      }
      else{
         fObjLabel(WindowExpertName()+"_CloseLevel_Lbl_1",5,75,"CloseEquity ($)",1,Caption,8,0,"Arial",false);  
         fObjLabel(WindowExpertName()+"_CloseLevel_Lbl_2",85,75,"NO",1,Caption,8,0,"Arial",false);  
      }
   fObjLabel(WindowExpertName()+"_Equity_Lbl_1",5,90,"Equity ($)",1,Caption,8,0,"Arial",false);  
   fObjLabel(WindowExpertName()+"_Equity_Lbl_2",85,90,DS2(AccountEquity()),1,Caption,8,0,"Arial",false);  

   WindowRedraw();

      if(OnOf){
         if(AccountEquity()>=StartEquity$){
            MaxEq=MathMax(MaxEq,AccountEquity());
            ObjectSetText(WindowExpertName()+"_MaxEquity",DS2(MaxEq));
         }       
         if(MaxEq!=0){
            if(ND2(AccountEquity()-(MaxEq-Level$))<=0){
               CloseFlag=true;
            }
         }      
      }
      
      if(CloseFlag){
         if(fCloseAllTotal()==0){
            CloseFlag=false;
            Alert(WindowExpertName()+": Âûïîëíÿþ çàêðûòèå");
            fInit();                   
         }
         else{
            return(0);
         }
      }      
      

   return(0);
}
//+------------------------------------------------------------------+

double ND2(double v){return(NormalizeDouble(v,2));}

void fInit(){
   MaxEq=0;
   ObjectSetText(WindowExpertName()+"_MaxEquity",DS2(MaxEq));
   StartEquity$=0;
   OnOf=false;
   fGUI_OnOff_Simple(WindowExpertName()+"_OnOf",OnOf,"ON","OF",5,15,1,On,Of,"Arial",8);
   fObjLabel(WindowExpertName()+"_CloseLevel_Lbl_2",85,75,"NO",1,Caption,8,0,"Arial",false);  
   WindowRedraw();
}

void fObjDeleteByPrefix(string aPrefix){
   for(int i=ObjectsTotal()-1;i>=0;i--){
      if(StringFind(ObjectName(i),aPrefix,0)==0){
         ObjectDelete(ObjectName(i));
      }
   }
}


void fGUI_OnOff_Simple(string aObjName, bool & aState,string aCaptionON, string aCaptionOFF,int aX=5, int aY=5,int aCorner=0, color aColorON=Lime, color aColorOFF=Silver, string aFont="Arial", int aFontSize=8){
      if(ObjectFind(aObjName)!=0){
         string tmpCaption=aCaptionOFF;
         color tmpColor=aColorOFF;
            if(aState){
               tmpCaption=aCaptionON;
               tmpColor=aColorON;
            }
         fObjLabel(aObjName,aX,aY,tmpCaption,aCorner,tmpColor,aFontSize,0,aFont,false);
      }
      if(ObjectFind(aObjName)==0){
         int xp=ObjectGet(aObjName,OBJPROP_XDISTANCE);
         int yp=ObjectGet(aObjName,OBJPROP_YDISTANCE);
         string txt=ObjectDescription(aObjName);
         tmpColor=ObjectGet(aObjName,OBJPROP_COLOR);
            if(xp!=aX || yp!=aY){
               ObjectDelete(aObjName);
               fObjLabel(aObjName,aX,aY,aCaptionON,aCorner,tmpColor,aFontSize,0,aFont,false); 
               xp=ObjectGet(aObjName,OBJPROP_XDISTANCE);
               yp=ObjectGet(aObjName,OBJPROP_YDISTANCE);
                  if(xp==aX && yp==aY){
                        if(aCaptionON!=aCaptionOFF){
                           if(txt==aCaptionOFF){
                              aState=true;
                           }
                           else{
                              aState=false;
                           }
                        }      
                        else{
                           if(tmpColor==aColorOFF){
                              aState=true;
                           }
                           else{
                              aState=false;
                           }
                        }
                        if(aState){
                           txt=aCaptionON;
                           tmpColor=aColorON;
                        }
                        else{
                           txt=aCaptionOFF;
                           tmpColor=aColorOFF;
                        }
                     fObjLabel(aObjName,aX,aY,txt,aCorner,tmpColor,aFontSize,0,aFont,false); 
                  }
            } 
            else{
               tmpCaption=aCaptionOFF;
               tmpColor=aColorOFF;
                  if(aState){
                     tmpCaption=aCaptionON;
                     tmpColor=aColorON;
                  }
               fObjLabel(aObjName,aX,aY,tmpCaption,aCorner,tmpColor,aFontSize,0,aFont,false);
            }              
      }
}



int fCloseAllTotal(){
   int tErr=0;
      for(int i=OrdersTotal()-1;i>=0;i--){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
            if(OrderType()==OP_BUY){
               RefreshRates();
                  if(!IsTradeContextBusy()){
                     if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_SPREAD)*3,CLR_NONE)){
                        int tCheck=GetLastError();
                        Print("Error close BUY "+OrderTicket()+" "+fMyErDesc(tCheck)); 
                        tErr=-1;
                     }
                  }
                  else{
                     static int lt1=0;
                        if(TimeCurrent()>lt1+20){
                           lt1=TimeCurrent();
                           Print("Need close BUY "+OrderTicket()+". Trade Context Busy");
                        }            
                     return(-2);
                  }   
            }
            if(OrderType()==OP_SELL){
               RefreshRates();
                  if(!IsTradeContextBusy()){                        
                     if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_SPREAD)*3,CLR_NONE)){
                        tCheck=GetLastError();
                        Print("Error close SELL "+OrderTicket()+" "+fMyErDesc(tCheck)); 
                        tErr=-1;
                     }  
                  }
                  else{
                     static int lt2=0;
                        if(TimeCurrent()>lt2+20){
                           lt2=TimeCurrent();
                           Print("Need close SELL "+OrderTicket()+". Trade Context Busy");
                        }            
                     return(-2);
                  }          
            }
         }
         else{
            tErr=-3;
         }
      }
   return(tErr);
}  


void fObjLabel(
   string aObjectName,     // 1 èìÿ
   int aX,                 // 2 õ
   int aY,                 // 3 ó
   string aText,           // 4 òåêñò
   int aCorner=0,          // 5 óãîë   0  1
                           //          2  3
   color aColor=Red,       // 6 öâåò
   int aFontSize=8,        // 7 ðàçìåð øðèôòà
   int aWindowNumber=0,    // 8 îêíî
   string aFont="Arial",   // 9 øðèôò
   bool aBack=false        // 10 ôîí
   ){     
      if(ObjectFind(aObjectName)!=aWindowNumber){
         ObjectCreate(aObjectName,OBJ_LABEL,aWindowNumber,0,0);
      }      
   ObjectSet(aObjectName,OBJPROP_XDISTANCE,aX);
   ObjectSet(aObjectName,OBJPROP_YDISTANCE,aY);   
   ObjectSetText(aObjectName,aText,aFontSize,aFont,aColor);
   ObjectSet(aObjectName,OBJPROP_BACK,aBack);
   ObjectSet(aObjectName,OBJPROP_CORNER,aCorner);   
}


string fStrReplace(string aString, string aFind, string aReplace){
   int tPos1=0;
   string RetStr="";
   int tFindLength=StringLen(aFind);   
   int tPos2=StringFind(aString,aFind,tPos1);
      while(tPos2!=-1){
            if(tPos2>tPos1){
               RetStr=RetStr+StringSubstr(aString,tPos1,tPos2-tPos1);
            }
         RetStr=RetStr+aReplace;
            tPos1=tPos2+tFindLength;      
         tPos2=StringFind(aString,aFind,tPos1);
      }
   RetStr=RetStr+StringSubstr(aString,tPos1,StringLen(aString)-tPos1);
   return(RetStr);
}

string DS2(double v){return(DoubleToStr(v,2));}


string fMyErDesc(int aErrNum){
   
   // fMyErDesc(GetLastError());
   
   string pref="Err Num: "+aErrNum+" - ";
   switch(aErrNum){
      case 0: return(pref+"NO ERROR");
      case 1: return(pref+"NO RESULT");                                 
      case 2: return(pref+"COMMON ERROR");                              
      case 3: return(pref+"INVALID TRADE PARAMETERS");                  
      case 4: return(pref+"SERVER BUSY");                               
      case 5: return(pref+"OLD VERSION");                               
      case 6: return(pref+"NO CONNECTION");                             
      case 7: return(pref+"NOT ENOUGH RIGHTS");                         
      case 8: return(pref+"TOO FREQUENT REQUESTS");                     
      case 9: return(pref+"MALFUNCTIONAL TRADE");                       
      case 64: return(pref+"ACCOUNT DISABLED");                         
      case 65: return(pref+"INVALID ACCOUNT");                          
      case 128: return(pref+"TRADE TIMEOUT");                           
      case 129: return(pref+"INVALID PRICE");                           
      case 130: return(pref+"INVALID STOPS");                           
      case 131: return(pref+"INVALID TRADE VOLUME");                    
      case 132: return(pref+"MARKET CLOSED");                           
      case 133: return(pref+"TRADE DISABLED");                          
      case 134: return(pref+"NOT ENOUGH MONEY");                        
      case 135: return(pref+"PRICE CHANGED");                           
      case 136: return(pref+"OFF QUOTES");                              
      case 137: return(pref+"BROKER BUSY");                             
      case 138: return(pref+"REQUOTE");                                 
      case 139: return(pref+"ORDER LOCKED");                            
      case 140: return(pref+"LONG POSITIONS ONLY ALLOWED");             
      case 141: return(pref+"TOO MANY REQUESTS");                       
      case 145: return(pref+"TRADE MODIFY DENIED");                     
      case 146: return(pref+"TRADE CONTEXT BUSY");                      
      case 147: return(pref+"TRADE EXPIRATION DENIED");                 
      case 148: return(pref+"TRADE TOO MANY ORDERS");                   
      //---- mql4 run time errors
      case 4000: return(pref+"NO MQLERROR");                            
      case 4001: return(pref+"WRONG FUNCTION POINTER");                 
      case 4002: return(pref+"ARRAY INDEX OUT OF RANGE");               
      case 4003: return(pref+"NO MEMORY FOR FUNCTION CALL STACK");      
      case 4004: return(pref+"RECURSIVE STACK OVERFLOW");               
      case 4005: return(pref+"NOT ENOUGH STACK FOR PARAMETER");         
      case 4006: return(pref+"NO MEMORY FOR PARAMETER STRING");         
      case 4007: return(pref+"NO MEMORY FOR TEMP STRING");              
      case 4008: return(pref+"NOT INITIALIZED STRING");                 
      case 4009: return(pref+"NOT INITIALIZED ARRAYSTRING");            
      case 4010: return(pref+"NO MEMORY FOR ARRAYSTRING");              
      case 4011: return(pref+"TOO LONG STRING");                        
      case 4012: return(pref+"REMAINDER FROM ZERO DIVIDE");             
      case 4013: return(pref+"ZERO DIVIDE");                            
      case 4014: return(pref+"UNKNOWN COMMAND");                        
      case 4015: return(pref+"WRONG JUMP");                             
      case 4016: return(pref+"NOT INITIALIZED ARRAY");                  
      case 4017: return(pref+"DLL CALLS NOT ALLOWED");                  
      case 4018: return(pref+"CANNOT LOAD LIBRARY");                    
      case 4019: return(pref+"CANNOT CALL FUNCTION");                   
      case 4020: return(pref+"EXTERNAL EXPERT CALLS NOT ALLOWED");      
      case 4021: return(pref+"NOT ENOUGH MEMORY FOR RETURNED STRING");  
      case 4022: return(pref+"SYSTEM BUSY");                            
      case 4050: return(pref+"INVALID FUNCTION PARAMETERS COUNT");      
      case 4051: return(pref+"INVALID FUNCTION PARAMETER VALUE");       
      case 4052: return(pref+"STRING FUNCTION INTERNAL ERROR");         
      case 4053: return(pref+"SOME ARRAY ERROR");                       
      case 4054: return(pref+"INCORRECT SERIES ARRAY USING");           
      case 4055: return(pref+"CUSTOM INDICATOR ERROR");                 
      case 4056: return(pref+"INCOMPATIBLE ARRAYS");                    
      case 4057: return(pref+"GLOBAL VARIABLES PROCESSING ERROR");      
      case 4058: return(pref+"GLOBAL VARIABLE NOT FOUND");              
      case 4059: return(pref+"FUNCTION NOT ALLOWED IN TESTING MODE");   
      case 4060: return(pref+"FUNCTION NOT CONFIRMED");                 
      case 4061: return(pref+"SEND MAIL ERROR");                        
      case 4062: return(pref+"STRING PARAMETER EXPECTED");              
      case 4063: return(pref+"INTEGER PARAMETER EXPECTED");             
      case 4064: return(pref+"DOUBLE PARAMETER EXPECTED");              
      case 4065: return(pref+"ARRAY AS PARAMETER EXPECTED");            
      case 4066: return(pref+"HISTORY WILL UPDATED");                   
      case 4067: return(pref+"TRADE ERROR");                            
      case 4099: return(pref+"END OF FILE");                            
      case 4100: return(pref+"SOME FILE ERROR");                        
      case 4101: return(pref+"WRONG FILE NAME");                        
      case 4102: return(pref+"TOO MANY OPENED FILES");                  
      case 4103: return(pref+"CANNOT OPEN FILE");                       
      case 4104: return(pref+"INCOMPATIBLE ACCESS TO FILE");            
      case 4105: return(pref+"NO ORDER SELECTED");                      
      case 4106: return(pref+"UNKNOWN SYMBOL");                         
      case 4107: return(pref+"INVALID PRICE PARAM");                    
      case 4108: return(pref+"INVALID TICKET");                         
      case 4109: return(pref+"TRADE NOT ALLOWED");                      
      case 4110: return(pref+"LONGS  NOT ALLOWED");                     
      case 4111: return(pref+"SHORTS NOT ALLOWED");                     
      case 4200: return(pref+"OBJECT ALREADY EXISTS");                  
      case 4201: return(pref+"UNKNOWN OBJECT PROPERTY");                
      case 4202: return(pref+"OBJECT DOES NOT EXIST");                  
      case 4203: return(pref+"UNKNOWN OBJECT TYPE");                    
      case 4204: return(pref+"NO OBJECT NAME");                         
      case 4205: return(pref+"OBJECT COORDINATES ERROR");               
      case 4206: return(pref+"NO SPECIFIED SUBWINDOW");                 
      case 4207: return(pref+"SOME OBJECT ERROR");    
      default: return(pref+"WRONG ERR NUM");                
   }
}  

Comments