CloseOrDeleteOrder

Download script
Author: Copyright � 2006, Yuri2005
CloseOrDeleteOrder

This script is a specialized management tool for the MetaTrader 4 platform designed to help traders manually close, delete, or partially exit trading positions and pending orders with precision. It provides an interactive interface that allows for both automated detection and manual identification of trades.

Core Functionality

1. Smart Order Identification The script offers two ways to select which trade you want to act upon:

  • Manual Input: You can enter the specific "Ticket Number" of an order into the settings. If a number is provided, the script ignores visual location and targets that specific trade immediately.
  • Visual Proximity: If no ticket number is entered, the script uses a "Search Radius." You can drag the script onto the trading chart near the price line of the position you wish to modify. It will automatically look for the nearest open order within a defined distance.

2. Order Deletion (Pending Orders) If the identified item is a "Pending Order" (an order waiting to be triggered, like a Buy Limit or Sell Stop), the script will prompt you with a confirmation window. Upon clicking "OK," it removes the order from the system and cleans up any associated visual labels on your chart.

3. Position Management (Open Trades) For currently active positions (Buy or Sell), the script offers advanced management features:

  • Full Closure: Instantly closes the entire position at the current market price.
  • Partial Closure (Lot Scaling): This is a unique feature where the script allows you to close only a specific portion of your trade. When you activate this mode, an interactive visual scale appears on your screen. You can select the exact volume you wish to close from this list, making it much easier to manage "scaling out" of a large position without manually calculating lot sizes.

Interactive User Experience

  • Confirmation Dialogs: To prevent accidental clicks from ruining a trade, the script asks for confirmation before every major action (deleting an order or closing a position).
  • Visual Feedback: The script handles the "cleanup" of your chart automatically. Once a trade is closed or deleted, it removes the associated text and labels from the screen to keep your workspace organized.
  • Error Handling: If something goes wrong during the process (such as a connection issue with the broker or an invalid lot size), the script will display a clear error message explaining what happened rather than simply failing silently.

Summary for the User

Think of this tool as a "precision remote control" for your trades. Instead of clicking through nested menus to find and close specific orders, you can simply drop this tool onto your chart, pick the trade you want to handle, choose how much of it you want to close via an on-screen slider, and confirm the action with one click.

Orders Execution
Checks for the total of open ordersIt Closes Orders by itself
Miscellaneous
It opens Message Boxes to the user
14 Views
0 Downloads
0 Favorites
CloseOrDeleteOrder
//+------------------------------------------------------------------+
//|                                        (CloseOrDeleteOrder).mq4 |
//|                                       Copyright © 2006, Yuri2005 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Yuri2005"

/*
-----------------------------Â-Í-È-Ì-À-Í-È-Å---------------------------------
Ïåðåä çàïóñêîì ñêðèïòà íàñòîÿòåëüíî ðåêîìåíäóåòñÿ èçó÷èòü ñëåäóþùåå ðóêîâîäñòâî:

Ñêðèïò ïðåäíàçíà÷åí äëÿ çàêðûòèÿ/óäàëåíèÿ ïîçèöèè/îòëîæåííîãî îðäåðà.

Äëÿ ýòîãî íåîáõîäèìî:
 
 1) Îçíàêîìèòüñÿ ñ äàííûì ðóêîâîäñòâîì. 
 
 2) Óñòàíîâèòü çíà÷åíèÿ ïåðåìåííûõ ïî óìîë÷àíèþ (íàõîäÿòñÿ ïîä îïèñàíèåì,íà÷èíàþòñÿ è 
    çàêàí÷èâàþòñÿ ñòðîêîé  //+----------------------------------------------+ )
 
 3) Ðàçðåøèòü èìïîðò âíåøíèõ ýêñïåðòîâ ÷åðåç ìåíþ
 	"Ñåðâèñ" -> "Íàñòðîéêè" -> "Ñîâåòíèêè" -> "Ðàçðåøèòü èìïîðòèðîâàíèå âíåøíèõ ýêñïåðòîâ"
 	(íåîáõîäèìî äëÿ îïèñàíèÿ îøèáêè, êîòîðàÿ ìîæåò âîçíèêíóòü ïðè óñòàíîâêå îðäåðà.
 
 4) Ïåðåòàùèòü ñêðèïò íà ãðàôèê íåäàëåêî îò ëèíèè îðäåðà/ïîçèöèè, êîòîðûé(-óþ) íåîáõîäèìî ìîäèôèöèðîâàòü
    èëè çàêðûòü, ëèáî ââåñòè å¸ íîìåð âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà.
    
 5) Óïðàâëÿþùàÿ ëèíèÿ.
 
 	 - "****" - óêàçàòåëü ðàçìåðà ïîçèöèè (èñïîëüçóåòñÿ òîëüêî â òîì ñëó÷àå, åñëè íåîáõîäèìî çàêðûòü 
 	 îòêðûòóþ ïîçèöèþ ÷àñòè÷íî). Íåîáõîäèìî óñòàíîâèòü íàïðîòèâ íóæíîãî çíà÷åíèÿ. 
   
 6) Ïîñëå íàõîæäåíèÿ íóæíîãî îðäåðà ïîÿâèòñÿ îêíî ñ âîïðîñîì î ïîäòâåðæäåíèè çàêðûòèÿ èëè óäàëåíèÿ îðäåðà 
    (â çàâèñèìîñòè îò åãî òèïà). Äëÿ ïîäòâåðæäåíèÿ îïåðàöèè íàæìèòå â í¸ì "OK", äëÿ å¸ îòìåíû - "Îòìåíà".
	 
 7) Äëÿ ïðåêðàùåíèÿ ðàáîòû ñêðèïòà â ëþáîé ìîìåíò ìîæíî âîñïîëüçîâàòüñÿ êíîïêîé "Îòìåíà".
 
*/


//+------------------------------------------------------------------+

// Åñëè îêíî ñâîéñòâ íå íóæíî, íàäî çàêîììåíòèðîâàòü ñëåäóþùóþ ñòðîêó (ïîñòàâèòü â íà÷àëî //)

#property show_inputs

// Íîìåð îðäåðà äëÿ èçìåíåíèÿ. Äàííûé ñêðèïò ïîçâîëÿåò âûäåëÿòü îðäåðà äëÿ èçìåíåíèÿ êàê óêàçàíèåì íà èõ ëèíèþ íà ãðàôèêå, 
// òàê è ïðÿìûì ââåäåíèåì èõ íîìåðîâ. Åñëè íîìåð îðäåðà ââåä¸í, òî óêàçàíèå ëèíèè îðäåðà íà ãðàôèêå èãíîðèðóåòñÿ,
// åñëè íîìåð ðàâåí 0, òî èñïîëüçóåòñÿ óêàçàíèå ëèíèè îðäåðà.

extern int Order_Number = 0;

// Èçìåí¸ííûé îáü¸ì îðäåðà ïî óìîë÷àíèþ (ìîæíî ìåíÿòü â ïðîöåññå ðàáîòû)- â äàííîì ñêðèïòå èñïîëüçóåòñÿ òîëüêî 
// äëÿ ÷àñòè÷íîãî çàêðûòèÿ ïîçèöèè. Åñëè ðàâåí 0, òî èñïîëüçóåòñÿ ðàíåå óñòàíîâëåííûé äëÿ îðäåðà îáú¸ì. 
// Äîëæåí áûòü êðàòåí ðàçìåðó ìèíèìàëüíîãî ëîòà (ñìîòðè íèæå).

extern double Lots = 0;

// Ìàêñèìàëüíîå îòêëîíåíèå îò çàïðîøåííîé öåíû

extern int Slippage = 1;

// Ìàêñèìàëüíîå ðàññòîÿíèå â ïóíêòàõ îò ìåñòà, íà êîòîðîå áûë "îòïóùåí" ñêðèïò, äî
// öåíû îòêðûòèÿ îðäåðà. Äëÿ ìàêèìàëüíîé òî÷íîñòè ðàáîòû èñïîëüçóéòå "0",
// òîãäà îðäåð âûäåëèòñÿ òîëüêî â ñëó÷àå òî÷íîãî ïîïàäàíèÿ.

extern int Order_Find_Radius = 10;

// Ìèíèìàëüíûé ðàçìåð ëîòà. Îïðåäåëÿåòñÿ òîðãîâûìè óñëîâèÿìè êîíêðåòíîé êîìïàíèè è ìîæåò
// ïðèíèìàòü òîëüêî îäíî èç 3 âîçìîæíûõ çíà÷åíèé: 0.01, 0.1 èëè 1.
// Îò äàííîé ïåðåìåííîé çàâèñèò îòðèñîâêà øêàëû óñòàíîâêè ðàçìåðà òîðãîâîãî ëîòà è åù¸ ðÿä íàñòðîåê.

extern double Min_Lot_Size = 0.1;


extern string Line_Color = "----------------------------------------------------------------------------------------";

// Öâåòà óïðàâëÿþùèé ëèíèé è òåêñòà ïî óìîë÷àíèþ

extern color Open_Price_Color = Blue;
extern color Stop_Loss_Color = Red;
extern color Take_Profit_Color = DarkViolet;

//+------------------------------------------------------------------+

// Âêëþ÷åíèå áèáëèîòåêè îáðàáîòêè îøèáîê

#include <stdlib.mqh>

// Îáúÿâëåíèå ïåðåìåííûõ

int first = 1, dig;
double Lots_Scale;

// Íà÷àëî ñêðèïòà

int start()
{

//+------------------------------------------------------------------+

// Îáúÿâëåíèå è óñòàíîâêà çíà÷åíèé ïåðåìåííûõ

int _break, error;
double DropPrice = PriceOnDropped();

if (Min_Lot_Size == 0.01)
   dig = 2;
else
   if (Min_Lot_Size == 0.1)
      dig = 1;
   else
      if (Min_Lot_Size == 1.0)
         dig = 0;
      else
         {
         string Question = "Óñòàíîâèòå âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà \n" 
                         + "çíà÷åíèå Min_Lot_Size = 0.01, 0.1 èëè 1.0";
	      int  Answer = MessageBox( Question, "Íåêîððåêòíàÿ óñòàíîâêà ìèíèìàëüíîãî ëîòà", 0x00000000 | 0x00000030);
         deinit(); 
         return(0);
         }

if (Lots != 0 && Lots < Min_Lot_Size)
   {
   Question = "Óñòàíîâèòå âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà \n" 
            + "ðàçìåð ëîòà íå ìåíüøå ìèíèìàëüíîãî";
	Answer = MessageBox( Question, "Íåêîððåêòíàÿ óñòàíîâêà ðàçìåðà ëîòà", 0x00000000 | 0x00000030);
   deinit(); 
   return(0);
   }

// Ïîèñê îðäåðà äëÿ èçìåíåíèÿ

int _OrdersTotal = OrdersTotal();

// Íàõîæäåíèå îðäåðà ïðè ïîìîùè óêàçàíèÿ åãî ëèíèè íà ãðàôèêå

if (Order_Number == 0)
   {
   for ( int x = 0; x <= Order_Find_Radius; x ++ )
      {
	   for ( int z1 = _OrdersTotal - 1; z1 >= 0; z1 -- )
	      {
		   OrderSelect( z1, SELECT_BY_POS, MODE_TRADES );
		   if ( OrderSymbol() == Symbol() )
	         {
			   if ( ( DropPrice - OrderOpenPrice() )/Point <= x && ( DropPrice - OrderOpenPrice() )/Point >= 0 )
			      { 
			      _break = 1; 
			      break; 
			      }
			   if ( ( OrderOpenPrice() - DropPrice )/Point <= x && ( OrderOpenPrice() - DropPrice )/Point >= 0 )
			      {
			      _break = 1; 
			      break; 
			      }
		      }
	      }
	   if ( _break == 1 ) 
	      break;
      }
   }

// Íàõîæäåíèå îðäåðà ïî åãî íîìåðó

if (Order_Number != 0)
   {
	OrderSelect(Order_Number, SELECT_BY_TICKET);
		if ( OrderSymbol() == Symbol() )
			_break = 1; 
	}

if ( _break != 1 )
   {
	MessageBox(  "Íå óäàëîñü íàéòè îðäåð!\n\n" 
	           + "Ïåðåìåñòèòå ñêðèïò íà ãðàôèê íåäàëåêî îò öåíû îòêðûòèÿ \n" 
			     + "îðäåðà, êîòîðûé õîòèòå ìîäèôèöèðîâàòü, ëèáî ââåäèòå \n"
			     + "íîìåð îðäåðà âî âõîäíûõ ïàðàìåòðàõ ñêðèïòà.", 
          	 	 "Íà÷àëî ðàáîòû", 0x00000000 | 0x00000010 | 0x00040000 ); 
	return(0);
   }

// Çàïèñü ïàðàìåòðîâ íàéäåííîãî îðäåðà

int _OrderType = OrderType();
int _OrderTicket = OrderTicket();
double _OrderOpenPrice = OrderOpenPrice();
double _OrderStopLoss = OrderStopLoss();
double _OrderTakeProfit = OrderTakeProfit();
double _Order_Lots = OrderLots();
datetime _OrderExpiration = OrderExpiration();

// Óäàëåíèå îòëîæåííîãî îðäåðà

if (_OrderType != OP_BUY && _OrderType != OP_SELL)
   {
   
   // Âûâîä îêíà ïîäòâåðæäåíèÿ îïåðàöèè
   
	Question = "Âû óâåðåíû, ÷òî õîòèòå óäàëèòü îòëîæåííûé îðäåð #" + _OrderTicket + "? \n\n" 
	         + "Äëÿ ïîäòâåðæäåíèÿ îïåðàöèè íàæìèòå \"ÎÊ\".\n\n" 
	         + "×òîáû îòêàçàòüñÿ îò îïåðàöèè, íàæìèòå \"Îòìåíà\".";
	Answer = MessageBox( Question, "Óäàëåíèå îòëîæåííîãî îðäåðà", 0x00000001 | 0x00000020 | 0x00040000  );
	// Åñëè íàæàòà ëþáàÿ êðîìå "ÎÊ" êíîïêà - âûõîäèì
	if ( Answer == 1 ) 
		{ 
		if (OrderDelete( _OrderTicket ))
         {
         
         // åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì
         
         Print( "Îðäåð #", _OrderTicket, " óäàë¸í óñïåøíî!");
    
         ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0));
         ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss");
         ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit");
         
         ObjectsRedraw();	
         }
    
         else
            
            // åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì
	         
	         {
	         error = GetLastError();
	         if (error != 0 && error != 4202 )
	            {
	            Print("Îøèáêà ïðè óäàëåíèè! GetLastError = ", error, ", ErrorDescription =  \"", ErrorDescription( error ), "\"" );
	            MessageBox( "Îøèáêà ïðè óäàëåíèè! GetLastError = " + error + ", ErrorDescription = \"" + ErrorDescription( error ) + "\"", 
             	 			"Îøèáêà óäàëåíèÿ îðäåðà", 0x00000000 | 0x00000010 | 0x00040000 ); 
	            
	            ObjectsRedraw();	
	            return(-1);
               }
            }
		   }		   
      ObjectsRedraw();	
      return(-1); 
      }

// Çàêðûòèå îòêðûòîé ïîçèöèè

// Óñòàíîâêà íà÷àëüíûõ çíà÷åíèé:
   
if (Lots == 0)
   Lots = _Order_Lots;

int Lots_value_y = 30;

// Ñîçäàíèå ëèíèé:

if ( first == 1 )
   {						
	int y = 25;
	if (Lots - 7 * Min_Lot_Size >= Min_Lot_Size)
	    Lots_Scale = Lots - 7 * Min_Lot_Size;
	else
	    Lots_Scale = Min_Lot_Size;
	  
 	for ( double z = Lots_Scale; z < Lots_Scale + 20 * Min_Lot_Size; z += Min_Lot_Size )
	   {
	   if (NormalizeDouble(z,dig) - NormalizeDouble( Lots,dig) == 0)
	      int y_pos = y;
	      
      ObjectCreate( DoubleToStr( z, dig ), OBJ_LABEL, 0,0,0,0,0,0,0);
	   ObjectSet( DoubleToStr( z, dig ), OBJPROP_CORNER, 1);
	   ObjectSet( DoubleToStr( z, dig ), OBJPROP_XDISTANCE, 1);
	   ObjectSet( DoubleToStr( z, dig ), OBJPROP_YDISTANCE, y);
	   ObjectSetText(  DoubleToStr( z, dig ), DoubleToStr( z, dig ), 10, "Arial", Open_Price_Color);
	   y += 15;
	   }
	ObjectCreate( "Lots", OBJ_LABEL, 0,0,0,0,0,0,0);
	ObjectSet( "Lots", OBJPROP_CORNER, 1);
   ObjectSet( "Lots", OBJPROP_XDISTANCE, 1);
   ObjectSet( "Lots", OBJPROP_YDISTANCE, 10);
	ObjectSetText(  "Lots", "Lots", 10, "Arial", Open_Price_Color);

	ObjectCreate( "Lots value", OBJ_LABEL, 0,0,0,0,0,0,0);
	ObjectSet( "Lots value", OBJPROP_CORNER, 1);
	ObjectSet( "Lots value", OBJPROP_XDISTANCE, 25);
	ObjectSet( "Lots value", OBJPROP_YDISTANCE, y_pos + 5);
	ObjectSetText(  "Lots value", "****", 14, "Arial", Open_Price_Color);
	ObjectsRedraw();

   // Âûâîä îêíà ïîäòâåðæäåíèÿ îïåðàöèè

   if (_OrderType == OP_BUY)
      {
      string Price_Type = "Bid"; 
      string Operation = "ïðîäàòü ";
      }
   else
      {
      Price_Type = "Ask"; 
      Operation = "êóïèòü ";
      }
      
	Question = "Âû óâåðåíû, ÷òî õîòèòå çàêðûòü ïîçèöèþ #" + _OrderTicket + " -" + "\n" + Operation + DoubleToStr(Lots,dig) 
	           + " ëîòîâ ïî òåêóùåé ðûíî÷íîé öåíå " + Price_Type + "? \n\n" 
	           + "Äëÿ ïîäòâåðæäåíèÿ îïåðàöèè íàæìèòå \"ÎÊ\".\n\n"
	           + "Äëÿ ÷àñòè÷íîãî çàêðûòèÿ óñòàíîâèòå íåîáõîäèìûé\n"  
	           + "ðàçìåð ëîòà ìåíüøå " + DoubleToStr(_Order_Lots, dig) + ".\n\n" 
	           + "×òîáû îòêàçàòüñÿ îò îïåðàöèè, íàæìèòå \"Îòìåíà\".";
	Answer = MessageBox( Question, "Çàêðûòèå ÎÒÊÐÛÒÎÉ ÏÎÇÈÖÈÈ ïî ðûíêó", 0x00000001 | 0x00000020 | 0x00040000  );
	first = 0;

	// åñëè íàæàòà ëþáàÿ êðîìå "ÎÊ" êíîïêà - âûõîäèì
	if ( Answer != 1 ) 
	   { 
	   deinit(); 
	   return(0); 
	   }
   }
   
// Ñ÷èòûâàåì çíà÷åíèÿ ñ îáúåêòîâ è íîðìàëèçóåì:

// Ðàçìåð ëîòà
 
Lots_value_y = ObjectGet( "Lots value", OBJPROP_YDISTANCE );

if ( Lots_value_y < 35)  Lots = Lots_Scale;
if ( Lots_value_y >= 35  && Lots_value_y < 50  ) Lots = Lots_Scale + Min_Lot_Size;
if ( Lots_value_y >= 50  && Lots_value_y < 65  ) Lots = Lots_Scale + 2 * Min_Lot_Size;
if ( Lots_value_y >= 65  && Lots_value_y < 80  ) Lots = Lots_Scale + 3 * Min_Lot_Size;
if ( Lots_value_y >= 80  && Lots_value_y < 95  ) Lots = Lots_Scale + 4 * Min_Lot_Size;
if ( Lots_value_y >= 95  && Lots_value_y < 110 ) Lots = Lots_Scale + 5 * Min_Lot_Size;
if ( Lots_value_y >= 110 && Lots_value_y < 125 ) Lots = Lots_Scale + 6 * Min_Lot_Size;
if ( Lots_value_y >= 125 && Lots_value_y < 140 ) Lots = Lots_Scale + 7 * Min_Lot_Size;
if ( Lots_value_y >= 140 && Lots_value_y < 155 ) Lots = Lots_Scale + 8 * Min_Lot_Size;
if ( Lots_value_y >= 155 && Lots_value_y < 170 ) Lots = Lots_Scale + 9 * Min_Lot_Size;
if ( Lots_value_y >= 170 && Lots_value_y < 185 ) Lots = Lots_Scale + 10 * Min_Lot_Size;
if ( Lots_value_y >= 185 && Lots_value_y < 200 ) Lots = Lots_Scale + 11 * Min_Lot_Size;
if ( Lots_value_y >= 200 && Lots_value_y < 215 ) Lots = Lots_Scale + 12 * Min_Lot_Size;
if ( Lots_value_y >= 215 && Lots_value_y < 230 ) Lots = Lots_Scale + 13 * Min_Lot_Size;
if ( Lots_value_y >= 230 && Lots_value_y < 245 ) Lots = Lots_Scale + 14 * Min_Lot_Size;
if ( Lots_value_y >= 245 && Lots_value_y < 260 ) Lots = Lots_Scale + 15 * Min_Lot_Size;
if ( Lots_value_y >= 260 && Lots_value_y < 275 ) Lots = Lots_Scale + 16 * Min_Lot_Size;
if ( Lots_value_y >= 275 && Lots_value_y < 290 ) Lots = Lots_Scale + 17 * Min_Lot_Size;
if ( Lots_value_y >= 290 && Lots_value_y < 305 ) Lots = Lots_Scale + 18 * Min_Lot_Size;
if ( Lots_value_y >= 305 							  ) Lots = Lots_Scale + 19 * Min_Lot_Size;
	
Lots = NormalizeDouble( Lots, dig );

// Íåïîñðåäñòâåííî îïåðàöèÿ çàêðûòèÿ

int order;

RefreshRates();

if ( _OrderType == OP_BUY ) 
	order = OrderClose( _OrderTicket, Lots, Bid, Slippage); 
else
   order = OrderClose( _OrderTicket, Lots, Ask, Slippage);
		
if ( order > 0 )
	{
   
   // åñëè âñ¸ îê, âûâîäèì ëîã è âûõîäèì
	
	if (Lots == _Order_Lots)
	   Print( "Îðäåð #", _OrderTicket, " çàêðûò óñïåøíî!");
	else
	   Print( "Îðäåð #", _OrderTicket, " çàêðûò ÷àñòè÷íî!");
			
	ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0));
   ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss");
   ObjectDelete("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit");
   ObjectsRedraw();	
   
   if (Lots != _Order_Lots)
      {
      
      // Ïîèñê íîâîãî îðäåðà, îòêðûòîãî âçàìåí ÷àñòè÷íî çàêðûòîãî  
     
      for(int pos = 0; pos < OrdersTotal(); pos++)
          {
          OrderSelect(pos, SELECT_BY_POS, MODE_TRADES);
          if (OrderComment() == "split from #"+ DoubleToStr(_OrderTicket,0))
             {
             _OrderTicket = OrderTicket();
             _OrderOpenPrice = OrderOpenPrice();
             _OrderStopLoss = OrderStopLoss();
             _OrderTakeProfit = OrderTakeProfit();
             break;
             }
          }
          
     	ObjectCreate("Îðäåð # " + DoubleToStr(_OrderTicket,0), OBJ_TEXT, 0, iTime(NULL,0,0), _OrderOpenPrice);
      ObjectSetText("Îðäåð # " + DoubleToStr(_OrderTicket,0), DoubleToStr(_OrderOpenPrice, Digits), 8,"Times New Roman", Open_Price_Color );
   
      if (_OrderStopLoss != 0)
         {
         ObjectCreate("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss", OBJ_TEXT, 0, iTime(NULL,0,0), _OrderStopLoss);
         ObjectSetText("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Stop Loss", DoubleToStr(_OrderStopLoss, Digits), 8,"Times New Roman", Stop_Loss_Color );
	      }
	
	   if (_OrderTakeProfit != 0)
	      {
	      ObjectCreate("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit", OBJ_TEXT, 0, iTime(NULL,0,0), _OrderTakeProfit);
         ObjectSetText("Îðäåð # " + DoubleToStr(_OrderTicket,0) + " Take Profit", DoubleToStr(_OrderTakeProfit, Digits), 8,"Times New Roman", Take_Profit_Color );
         }	
      }
    
   ObjectsRedraw();	
   return(0); 
	}

   // Åñëè îøèáêà - âûâîäèì ñîîáùåíèå è âûõîäèì
	
	error = GetLastError();
	if (error != 0 && error != 4202 )
	  {
	  Print("Îøèáêà ïðè çàêðûòèè! GetLastError = ", error, ", ErrorDescription =  \"", ErrorDescription( error ), "\"" );
	  MessageBox( "Îøèáêà ïðè çàêðûòèè! GetLastError = " + error + ", ErrorDescription = \"" + ErrorDescription( error ) + "\"", 
             	 			"Îøèáêà çàêðûòèÿ îðäåðà", 0x00000000 | 0x00000010 | 0x00040000 ); 
     
     ObjectsRedraw();	
     return(-1);
     }
}

// Çàâåðøåíèå ðàáîòû ñêðèïòà

int deinit()
{

// Óäàëåíèå âñåõ îáúåêòîâ, ñîçäàííûõ ñêðèïòîì
	
for ( double z = Lots_Scale; z < Lots_Scale + 20 * Min_Lot_Size; z += Min_Lot_Size )
	ObjectDelete( DoubleToStr( z, dig )); 

ObjectDelete( "Lots" );
ObjectDelete( "Lots value" );
ObjectsRedraw();	

return(0);
}

Comments