#CloseOrDeleteOrder

Download script
Author: Copyright � 2006, Yuri2005
#CloseOrDeleteOrder

This script is a specialized utility tool designed for MetaTrader 4 users to manage open trades and pending orders directly from the trading chart. Instead of navigating through complex menus, it allows you to interact with specific positions by simply dragging the script onto your chart or entering an order number.

Core Functionality

The primary purpose of this script is to provide a fast and visual way to perform three main actions:

  1. Close an open position (either fully or partially).
  2. Delete a pending order (an order that has not yet been executed).
  3. Modify the volume of a trade through an interactive visual interface.

How the Logic Works

1. Identifying the Target Trade The script offers two ways to select which trade you want to manage:

  • Automatic Detection: If you don't provide a specific number, the script looks for any order located near where you dropped the icon on the chart. It uses a "search radius" to find the closest matching trade price.
  • Manual Selection: You can manually enter a specific Order Ticket Number in the settings. If a number is provided, the script ignores the location on the chart and focuses solely on that specific ticket.

2. Handling Pending Orders If the script detects that you have selected a pending order (rather than an active trade), it will trigger a confirmation window. Once confirmed, it removes the order from the system, clears its visual markings from your chart, and logs the success in the system history.

3. Managing Open Positions For active trades, the script provides an interactive "Volume Selector":

  • Visual Interface: It generates a list of available lot sizes on your screen.
  • Partial Closures: You can choose to close only a portion of your trade. The script calculates how much volume you want to exit based on your selection from the visual list.
  • Confirmation: Before finalizing any action, the script displays a popup window showing exactly what will happen (e.g., "Sell 0.5 lots at current market price"). You must click "OK" to proceed.

4. Post-Trade Cleanup and Updates Once an action is completed, the script automatically handles the "housekeeping":

  • It removes the old trade labels from your chart.
  • If you closed a trade partially, it identifies the remaining portion of that trade and creates new visual markers for the remaining position so you can continue tracking it easily.

Key Safety Features

  • Error Handling: If the script fails to close a trade (due to market conditions or connection issues), it will display a specific error message explaining what went wrong.
  • Validation: It checks that your requested lot sizes are valid according to your broker's minimum requirements before attempting any transaction.
  • Cancellation: At any point during the process, you can click "Cancel" to stop the script from executing the action.
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;

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