Максимальное и минимальное значение еквити

 
Здравствуйте. Подскажите пожалуйста новичку реализацию кода на четверку который будет отслеживать и динамически обновлять  максимальное и минимальное значение еквити за перид от старта советника.

Я пробовал реализать вот так, но вот проблема в том что не считает. Проблема в том что при повторном заходе  предыдущее значение не учитывается.

Спасибо. 

 

double MAX()
  {
   double ACCOUNT_EQUITY_MAX=AccountInfoDouble(ACCOUNT_EQUITY)-5000;

   if(ACCOUNT_EQUITY_MAX>0)
     {
      double count_MAX=ACCOUNT_EQUITY_MAX;

      if(ACCOUNT_EQUITY_MAX>count_MAX)
        {
         double count_MAX_=ACCOUNT_EQUITY_MAX;
        }
     }
   return (count_MAX_)
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double MIN()
  {
   double ACCOUNT_EQUITY_MIN=AccountInfoDouble(ACCOUNT_EQUITY)-5000;
   if(ACCOUNT_EQUITY_MIN<0)
     {
      double count_MIN=ACCOUNT_EQUITY_MIN;

      if(ACCOUNT_EQUITY_MIN<count_MIN)
        {
         count_MIN=ACCOUNT_EQUITY_MIN;
        }
     }
   return (count_MIN)
  }
//+------------------------------------------------------------------+

 

 

 Не будет этот код искать ни максимум ни минимум. Вы составьте блоксхему (ну или алгоритм) нахождения максимума и минимума, и далее уже посмотрите на свой код и поймете что там не так - это стандартная задача и ее как новичку Вам надо осилить самому.

Или хотя бы прокомментируйте каждую строчку Вашей программы, и потом уже спрашивайте совет.

 
Спасибо. Я ето делал но ни в какую. Потому и обратился сюда.
 
ghost_master:
Спасибо. Я ето делал но ни в какую. Потому и обратился сюда.

Поэтому и написал, прокомментируйте каждую строчку кода.

Например алгоритм нахождения максимума - присваиваем глобальной переменной ЕКВмакс какое нибудь мин. значение например   -10000.

Вызываем подпрограмму нахождения максимума. В подпрограмме: во временную переменную ЕКВвр присваиваем значение текущего еквити. Затем сравниваем значения ЕКВмакс и ЕКВвр. Если ЕКВвр больше ЕКВмакс, то ЕКВмакс=ЕКВвр.

Осталось только переложить на язык MQL.

Для минимума все наоборот 

 
а возможно реализовать без использования глобальных переменных терминала? Так как данный блок расчета должен бить в функции после кода основного цикла. (Что бы не забивать при прикреплении  к другим аналогичным советникам эти глобальные переменные.) Спасибо.
 
ghost_master:
а возможно реализовать без использования глобальных переменных терминала? Так как данный блок расчета должен бить в функции после кода основного цикла. (Что бы не забивать при прикреплении  к другим аналогичным советникам эти глобальные переменные.) Спасибо.
Возьмите статическую переменную, в общем то можно любую, которая не будет обнуляться при приходе тика. Ну подпрограмма то всегда одна и та же, никто вам не мешает её код использовать в других программах.
 

И потом я не имел в виду глобальную переменную терминала.

 Вот почитайте?

Глобальные переменные

Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке.

Пример:

int GlobalFlag=10;   // глобальная переменная
int OnStart()
  {
   ...
  }

Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе. Инициализируются нулем, если явно не задано другое начальное значение. Глобальная переменная может быть проинициализирована только соответствующей ее типу константой либо константным выражением.

Инициализация глобальных переменных производится однократно после загрузки программы в память клиентского терминала и перед первой обработкой события Init. Для глобальных переменных, представляющих собой объекты классов, при инициализации вызываются соответствующие конструкторы.

Время жизни глобальных переменных такое же, как и у статических переменных: от загрузки до выгрузки MQL4-программы.

Замечание: не следует путать переменные, объявленные на глобальном уровне, с глобальными переменными клиентского терминала, доступ к которым осуществляется при помощи функций GlobalVariable...().

Смотри также

Типы данных, Инкапсуляция и расширяемость типов, Инициализация переменных, Область видимости и время жизни переменных, Создание и уничтожение объектов </

События клиентского терминала - Документация на MQL4
  • docs.mql4.com
События клиентского терминала - Документация на MQL4