Написал эксперта, вопрос по AccountEquity

 
Написал советника, код ниже:
//+------------------------------------------------------------------+
//|                                                       Lock_1.mq4 |
//|                                          Copyright © 2006, Manin |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Manin"
#property link      "manin1@mail.ru"
#define MAGIC 081206
 
extern int        Profit    =20;
extern double     Kf        =1.5;
extern double     Risk_Lots =0.0;   // Часть свободных денег вкладываемых в лот
extern int        Slippage  =5;     // Проскальзывание
 
int start()
{
  if(IsTradeAllowed()==false) return(0);
  int    _OrderTicket_B=0; // Ticket ордера Buy
  int    _OrderTicket_S=0; // Ticket ордера Sell
  double _OrderLots_B=0;
  double _OrderLots_S=0;
  double _OrderStopLoss_B=0;
  double _OrderStopLoss_S=0;
  double _OrderOpenPrice_B=0;
  double _OrderOpenPrice_S=0;
  double _OrderProfit_B=0;
  double _OrderProfit_S=0;
  datetime _OrderOpenTime_B=0;
  datetime _OrderOpenTime_S=0;
  int _OrderCloseBuy=0;
  int _OrderCloseSell=0;
  double _ProfitCloseBuy=0;
  double _ProfitCloseSell=0;
  double StopLoss, TakeProfit, _OrderOpenPrice, Lots, SAR0, WATR, Pred_AccountEquity, _AccountEquity;
  int i, z, Modify_B, Modify_S, _GetLastError, _Ticket;
//+------------------------------------------------------------------+
//| Блок запоминания параметров торгующих ордеров                    |
//+------------------------------------------------------------------+
  if (OrdersTotal()!=0) 
  {
    for (i=OrdersTotal()-1; i>=0; i --)
    {
      OrderSelect ( i, SELECT_BY_POS );
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderMagicNumber()!=MAGIC) continue;
      if (OrderType()==OP_BUY) 
      {
        _OrderLots_B=OrderLots();
        _OrderTicket_B=OrderTicket();
        _OrderProfit_B=OrderProfit();
        _OrderStopLoss_B=OrderStopLoss();
        _OrderOpenTime_B=OrderOpenTime();
        _OrderOpenPrice_B=OrderOpenPrice();
      }
      if (OrderType()==OP_SELL) 
      {
        _OrderLots_S=OrderLots();
        _OrderTicket_S=OrderTicket();
        _OrderProfit_S=OrderProfit();
        _OrderStopLoss_S=OrderStopLoss();
        _OrderOpenTime_S=OrderOpenTime();
        _OrderOpenPrice_S=OrderOpenPrice();
      }
      continue;
    }
//+------------------------------------------------------------------+
//| Блок модификации торгующих ордеров (подтягивание стопов)         |
//+------------------------------------------------------------------+
    for (WATR=0,i=1;i<1+10;i++) {WATR+=(1+(9+1-i))*(High[i]-Low[i]);} WATR/=55;
    for (z=OrdersTotal()-1; z>=0; z --)
    {
      OrderSelect (z, SELECT_BY_POS);
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderMagicNumber()!=MAGIC) continue;
      if(OrderType()==OP_BUY) 
      {
        if (_OrderOpenPrice_B<NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,2,0)]-WATR*Kf,Digits) && 
        NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,2,0)]-WATR*Kf,Digits)+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point<Bid &&
        (_OrderStopLoss_B<NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,2,0)]-WATR*Kf,Digits) || _OrderStopLoss_B==0.0)) 
        { 
          Modify_B=OrderModify(_OrderTicket_B,0,NormalizeDouble(Low[iLowest(NULL,0,MODE_LOW,2,0)]-WATR*Kf,Digits),0.0,0,Yellow);
          if(Modify_B>0) Print("BUY ордер модифицирован:",_OrderTicket_B);
          else {_GetLastError=GetLastError(); Print("Ошибка модификации BUY ордера:",_OrderTicket_B,
          "Ошибка:",_GetLastError);}
          _GetLastError=0;
        }
      }
      if(OrderType()==OP_SELL) 
      {
        if (_OrderOpenPrice_S>NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,2,0)]+WATR*Kf,Digits) && 
        NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,2,0)]+WATR*Kf,Digits)-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point>Ask &&
        (_OrderStopLoss_S>NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,2,0)]+WATR*Kf,Digits) || _OrderStopLoss_S==0.0))
        {
          Modify_S=OrderModify(_OrderTicket_S,0,NormalizeDouble(High[iHighest(NULL,0,MODE_HIGH,2,0)]+WATR*Kf,Digits),0.0,0,Yellow);
          if(Modify_S>0) Print("SELL ордер модифицирован:",_OrderTicket_S);
          else {_GetLastError=GetLastError(); Print("Ошибка модификации SELL ордера:",_OrderTicket_S,
          "Ошибка:",_GetLastError);}
          _GetLastError=0;
        }
      }
      continue;
    }
//+------------------------------------------------------------------+
//| Блок расчета прибыли закрытых ордеров                            |
//+------------------------------------------------------------------+
    int a, _OrdersHistoryTotal=OrdersHistoryTotal();
    for(a=0;a<_OrdersHistoryTotal;a++)
    {
      if(OrderSelect(a,SELECT_BY_POS,MODE_HISTORY)==false)
      {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
      }
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderMagicNumber()!=MAGIC) continue;
      if (OrderType()==OP_BUY && OrderOpenTime()>_OrderOpenTime_S) 
      {
        _OrderCloseBuy=_OrderCloseBuy+1;
        _ProfitCloseBuy=_ProfitCloseBuy+OrderProfit();
      }
      if (OrderType()==OP_SELL && OrderOpenTime()>_OrderOpenTime_B) 
      {
        _OrderCloseSell=_OrderCloseSell+1;
        _ProfitCloseSell=_ProfitCloseSell+OrderProfit();
      }
      continue;
    }
    //Print("Закрытых Buy ордеров:",_OrderCloseBuy,"Профит по закрытым ордерам:",_ProfitCloseBuy);
    //Print("Закрытых Sell ордеров:",_OrderCloseSell,"Профит по закрытым ордерам:",_ProfitCloseSell);
//+------------------------------------------------------------------+
//| Блок закрытия ордеров                                            |
//+------------------------------------------------------------------+
    if (_OrderProfit_B<0 && _OrderProfit_B+_ProfitCloseSell>Profit) 
    {
      OrderClose(_OrderTicket_B,_OrderLots_B,Bid,Slippage,Blue);
      _OrderTicket_B=0;
    }
    if (_OrderProfit_S<0 && _OrderProfit_S+_ProfitCloseBuy>Profit) 
    {
      OrderClose(_OrderTicket_S,_OrderLots_S,Ask,Slippage,Red);
      _OrderTicket_S=0;
    }
  }
//+------------------------------------------------------------------+
//| Блок открытия ордеров                                            |
//+------------------------------------------------------------------+
  if(AccountFreeMargin()<150) return(0); 
  // Открываем BUY позицию ------------------------------------------------------------------------
  if (_OrderTicket_B==0)
  {
    Lots=NormalizeDouble(AccountFreeMargin()*Risk_Lots/1000.0,1); if(Lots<0.1) Lots=0.1;
    _Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0.0,0.0,"Lock_1",MAGIC,0,Blue);
    if(_Ticket>0) 
    {
      Print("BUY ордер выставлен:",_Ticket);
      Pred_AccountEquity=AccountEquity();
      Print("Предыдущие средства счета=",Pred_AccountEquity);
    } 
    else {_GetLastError=GetLastError(); Print("Ошибка выставления BUY ордера:",_GetLastError);}
  }
  // Открываем SELL позицию ------------------------------------------------------------------------    
  if (_OrderTicket_S==0) 
  {
    Lots=NormalizeDouble(AccountFreeMargin()*Risk_Lots/1000.0,1); if(Lots<0.1) Lots=0.1;
    _Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0.0,0.0,"Lock_1",MAGIC,0,Red);
    if(_Ticket>0) 
    {
      Print("SELL ордер выставлен:",_Ticket);
      Pred_AccountEquity=AccountEquity();
      Print("Предыдущие средства счета=",Pred_AccountEquity);
    } 
    else {_GetLastError=GetLastError(); Print("Ошибка выставления SELL ордера:",_GetLastError);}
  }
  _AccountEquity=AccountEquity();
  Comment("Средства счета=",_AccountEquity," Предыдущие средства счета=",Pred_AccountEquity,
  " Разница=",Pred_AccountEquity-_AccountEquity);
  return(0);
}
Как-то странно отображаются AccountEquity()
Т.е. хотел увидеть в визуализаторе как меняются средства в зависимости от цены строка 174 в эксперте, но средства меняются когда какой-нибудь ордер закроется. И еще, запомнил в переменную Pred_AccountEquity предыдущее значение средств (стр. 155,168), а оно обнуляется. Что я не так делаю?
Файлы:
lock_1.mq4  8 kb
Причина обращения: