как добавить в советник функцию?

 

Закрывает все открытые ордера при изменении эквити на заданное значение.

Отображает стартовое эквити на графике.

просьба кто понимает в кодах.

надо добавть чтобы после закрытия серии всех ордеров отсчет происходил с текущего эквити .

extern string rem_0 = "-значения в валюте депозита-";
extern string rem_1 = "-при изменении на величину-";
extern double Profit = 20;
extern double Loss = 10;
extern string rem_2 = "-при достижении суммы-";
extern double Equity_Max = 0;
extern double Equity_Min = 0;

double Last_Equity,
       Equity,
       Diff_Profit,
       Diff_Loss,
       Equity_Max_for_comment,
       Equity_Min_for_comment;
bool FLAG_CLOSE = false;       
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
    Alert("ВНИМАНИЕ! Чтобы работать по изменению эквити, не задавайте сумму закрытия.");
//----
    Last_Equity = AccountEquity( );   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
//----
  Equity = AccountEquity( );
//---------- по прибыли ----------------------------------------------
  if(Equity_Max != 0)
  {
    Equity_Max_for_comment = Equity_Max;
    if(Equity >= Equity_Max) FLAG_CLOSE = true;
  }
  else
  {
    Equity_Max_for_comment = Last_Equity + Profit;
    Diff_Profit = Equity - Last_Equity;
    if(Diff_Profit >= Profit) FLAG_CLOSE = true;
  }
//--------------------------------------------------------------------
//---------- по убытку -----------------------------------------------
  if(Equity_Min != 0)
  {
    Equity_Min_for_comment = Equity_Min;
    if(Equity <= Equity_Min) FLAG_CLOSE = true;
  }
  else
  {
    Equity_Min_for_comment = Last_Equity - Loss;
    Diff_Loss = Last_Equity - Equity;
    if(Diff_Loss >= Loss) FLAG_CLOSE = true;
  }
//--------------------------------------------------------------------
  if(FLAG_CLOSE == true)
  {
    Close_All();
    Last_Equity = Equity;
    FLAG_CLOSE = false;
  } 
  Comment("Стартовое значение Эквити = ", DoubleToStr(Last_Equity,2), 
          "\nзакрываемся при достижении:",
          "\nВерхнего предела - ", DoubleToStr(Equity_Max_for_comment,2),
          "\nНижнего предела - ",DoubleToStr(Equity_Min_for_comment,2)
          );                                       
//----
  return(0);
}
//+------------------------------------------------------------------+
void Close_All()
{
  while(OrdersTotal()>0)
  {
    for (int i=0; i < OrdersTotal(); i++)                                                        
    {                                                                                          
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
        switch(OrderType())
        {
          case 0 : OrderClose(OrderTicket(),OrderLots(),Bid,5); break;
          case 1 : OrderClose(OrderTicket(),OrderLots(),Ask,5); break;
        }        
      }
    }
  }
}
 
rusa:

просьба кто понимает в кодах.



Я уже не знаю, как Вам объяснить. Уже вроде исправил код, так Вы новый выложили с той же ошибкой.
 
Roger:

Я уже не знаю, как Вам объяснить. Уже вроде исправил код, так Вы новый выложили с той же ошибкой.


то что вы подсказали не помогает .

Вы могли бы посмотреть этот код выдаёт ошибку при компиляции.

extern string rem0 = "- в валюте депозита -";
extern double Profit = 10;
extern double Loss = 10;
double Last_Equity,
       Equity,
       Diff_Profit,
       Diff_Loss;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
  Last_Equity = AccountEquity( );   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
   {

   ManageSeries();
   
   
   return(0);
  }
  void ManageSeries()
//
{
  Equity = AccountEquity( );
  Diff_Profit = Equity - Last_Equity;
  Diff_Loss = Last_Equity - Equity;
  if(Diff_Profit > Profit || Diff_Loss > Loss)  
  CloseSeries();
  {
    while(OrdersTotal()>0)
    {
      for (int i=0; i < OrdersTotal(); i++)                                                        
      {                                                                                          
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
        {
          switch(OrderType())
          {
            case 0 : OrderClose(OrderTicket(),OrderLots(),Bid,5); break;
            case 1 : OrderClose(OrderTicket(),OrderLots(),Ask,5); break;
          }        
        }
      }
    }
    Last_Equity = AccountEquity( );


  } 
  Comment("Начальное Эквити = ", DoubleToStr(Last_Equity - Equity,2));                                       
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
В том коде, что Вы выложили, есть обращение к функции CloseSeries();. Вот ее Вы не показали.
 
Roger:
В том коде, что Вы выложили, есть обращение к функции CloseSeries();. Вот ее Вы не показали.

Вы могли бы исправить ?
 
Уже тестирую. Не до конца осознаю надобность вывода комментария.
 
Roger:
Уже тестирую. Не до конца осознаю надобность вывода комментария.

вывода какого комментария?
 
rusa:

вывода какого комментария?

О наличии "Начального эквити".
 
Roger:

О наличии "Начального эквити".

Comment("Начальное Эквити = ", DoubleToStr(Last_Equity - Equity,2)); я думаю что это для удобства видно что происходит с эквити.


 
Он же показывает разницу между реальным эквити и заданным, а не начальное эквити.
 
Roger:
Он же показывает разницу между реальным эквити и заданным, а не начальное эквити.

всё время видно сколько осталось до прибыли или убытка.и когда закроются ордера.
Причина обращения: