Зависает индикатор при перезапуске терминала, как исправить?

 

Добрый день,зависает индикатор при перезапуске терминала, если на том был запущен индикатор

В чем проблема? Пожалуйста помогите найти проблему

#property copyright "Copyright 2014, ForexDE"
#property link      ""
#property version   "1.00"
#property strict
#property indicator_chart_window
   
   double tu,tp,tr;
   string textMONEY;
//+------------------------------------------------------------------+
//| Custom indicator initialization fnction                         |
//+------------------------------------------------------------------+
int OnInit()
{

   PutButton("B",50,50,"KNOPKA");

   if(ObjectFind(ChartID(), "Money") < 0)
   SetLabel1("Money", textMONEY,Green, 6, 18, 3, 9);
      
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
   {  
   //if(reason != REASON_CHARTCHANGE)
     //{
         //ObjectDelete("Money");
     //}
   }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
 {
 
//--- Мани
   tu = GetProfitOpenPosInPoint();
   tp = GetProfitOpenPos();
   tr = tp * 100.0 / AccountBalance();

   textMONEY = DoubleToStr(tu,1) + " пп";
   textMONEY += " | " + DoubleToStr(tp,2) + " " + AccountCurrency();
   textMONEY += " | " + DoubleToStr(tr,1) + "%";

   //ObjectSetText("Money",text);
         ObjectSetText("Money", textMONEY,9,"Arial",Green);
       //ObjectSetText("Балансище",text,9,0,ColorOnSign(tp));
//--- Мани

  return(rates_total);
 }

void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                 )
 {

  if(id == CHARTEVENT_OBJECT_CLICK)
   {

         if(!ObjectGetInteger(0,"B",OBJPROP_STATE,false))
           {
   ObjectSet("Money",OBJPROP_XDISTANCE,7000); // скрываю 
           }
         else
           {
   ObjectSet("Money",OBJPROP_XDISTANCE,5);    // показываю обратно
           }

   }
   
 }
/*******************************************************************/
void PutButton(string name,int x,int y,string text)
  {
   ObjectCreate(0,name,OBJ_BUTTON,0,0,0);
//--- установим координаты кнопки
   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- установим размер кнопки
   ObjectSetInteger(0,name,OBJPROP_XSIZE,80);
   ObjectSetInteger(0,name,OBJPROP_YSIZE,30);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,name,OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,name,OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
//--- установим цвет текста
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим цвет фона
   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,White);
//--- установим цвет границы
   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,Blue);
  }
  
double GetProfitOpenPos(int mn = -1)
{
   int mji, mjk = OrdersTotal();
   double pr = 0.0;

   for (mji = 0; mji < mjk; mji++) {
      if (OrderSelect(mji, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol() == Symbol()) {
            if (mn < 0 || OrderMagicNumber() == mn) {
               pr += OrderProfit() + OrderCommission() + OrderSwap();
            }
         }
      }
   }
   return (pr);
}

double GetProfitOpenPosInPoint(int opj=-1, int mnj=-1) 
{
   double pr = 0.0;
   double n = 1.0;

   for (int mji = 0; mji < OrdersTotal(); mji++) {
      if (OrderSelect(mji, SELECT_BY_POS, MODE_TRADES)) {
         if ((OrderSymbol() == Symbol()) && (opj < 0 || OrderType() == opj)) {
            if (mnj < 0 || OrderMagicNumber() == mnj) {
               if (OrderType() == OP_BUY) {
                  pr += (OrderProfit() / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE )) / n;
                  //pr += (MarketInfo(OrderSymbol(), MODE_BID) - OrderOpenPrice())/p;
               }
               if (OrderType() == OP_SELL) {
                  pr += (OrderProfit() / OrderLots() / MarketInfo( OrderSymbol(), MODE_TICKVALUE )) / n;
                  //pr += (OrderOpenPrice() - MarketInfo(OrderSymbol(), MODE_ASK))/p;
               }
            }
         }
      }
   }
   return (pr);
}

void SetLabel1(string nm, string tx, color cljj, int xd, int yd, int cr, int fs) 
{

   ObjectCreate(nm, OBJ_LABEL, 0, 0,0);
   ObjectSetText(nm, tx, fs);
   ObjectSet(nm, OBJPROP_COLOR    , cljj);
   ObjectSet(nm, OBJPROP_XDISTANCE, xd);
   ObjectSet(nm, OBJPROP_YDISTANCE, yd);
   ObjectSet(nm, OBJPROP_CORNER   , cr);
   ObjectSet(nm, OBJPROP_FONTSIZE , fs);
ObjectSet(nm, OBJPROP_SELECTABLE, false);
ObjectSet(nm, OBJPROP_HIDDEN, true);
}
 
Всё, решил вопрос
 
vebster005:
Всё, решил вопрос

В чем была проблема?