Скачать MetaTrader 5

Нужна помощь - Манипуляции с балансом

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Artem Ashikhmin
1478
Artem Ashikhmin  

Как записать максимальное значение баланса на счете и сравнить его с текущим балансом
 double MaxBalance;
 double NewBalance;
 if (NewBalance < MaxBalance) то действие

Alexey Viktorov
8062
Alexey Viktorov  
Посмотри в документации все математические функции. Всё что надо там есть.
Artem Ashikhmin
1478
Artem Ashikhmin  
AlexeyVik:
Посмотри в документации все математические функции. Всё что надо там есть.
Ссылку можно? Googl не помог
Vitalie Postolache
12271
Vitalie Postolache  

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

Придется писать функцию, высчитывающюю баланс из истории торговли, и выискивающую макс. значение. Цикл, от OrdersHistoryTotal()-1 до 0, перебирать все ордера типов Buy, Sell, Balance (код 6) считать баланс и сравнивать с предыдущим. Или записывать в массив и после цикла выяснить ArrayMaximum().

Artem Ashikhmin
1478
Artem Ashikhmin  
Должен быть проще вариант, однозначно!!
Vitalie Postolache
12271
Vitalie Postolache  
Если придумаете проще, напишите, мне тоже интересно.
Alexey Viktorov
8062
Alexey Viktorov  
forex-time:
Ссылку можно? Googl не помог

1. В метаедиторе нажимаешь F1 и открывается документация.

2.


Artem Ashikhmin
1478
Artem Ashikhmin  
evillive:
Если придумаете проще, напишите, мне тоже интересно.

Что-то вроде этого, но не работает, мысли не хватает))

   if(OrdersB==0||OrdersS==0) StartBalance=AccountBalance();    //  в истории нет ордеров (записали баланс)
   NewBalance=AccountBalance();                                                // текущий баланс  (записали баланс)
   if(StartBalance<NewBalance) MaxBalance=((NewBalance-StartBalance)+StartBalance);     //  максимальный баланс  (записали баланс)

     if(NewBalance<(MaxBalance||StartBalance)){
         for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==Magic) {
           if(OrderType()==0 && AccountEquity()>=MaxBalance) CloseOrder(OrderTicket());
           }
        }
     if(NewBalance<(MaxBalance||StartBalance)){
         for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==Magic) {
           if(OrderType()==1 && AccountEquity()>=MaxBalance) CloseOrder(OrderTicket());
           }
        }

STARIJ
165
STARIJ  
forex-time:

     if(NewBalance<(MaxBalance||StartBalance)){   

Это что, в MQL4 и такое можно?  MaxBalance||StartBalance  в C++ надо было поподробнее писать...  Попробовал написать скрипт с таким выражением. Глухо!!!

 if(NewBalance<(MaxBalance||StartBalance)) эквивалентно  if(NewBalance<true)


Artem Ashikhmin
1478
Artem Ashikhmin  

Всё, сделал !!
Вот так работает))

double MaxBalance=0, StartBalance, NewBalance;

  if(OrdersB==0||OrdersS==0) StartBalance=AccountBalance(); 
  NewBalance=AccountBalance();
  if(StartBalance>MaxBalance) MaxBalance=StartBalance;
  if(StartBalance<NewBalance) MaxBalance=((NewBalance-StartBalance)+StartBalance); 

  if(NewBalance<MaxBalance){
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==Magic) {
  if(OrderType()==0 && AccountEquity()>=MaxBalance) CloseOrder(OrderTicket());
       }
  }
  if(NewBalance<MaxBalance){
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==Magic) {
  if(OrderType()==1 && AccountEquity()>=MaxBalance) CloseOrder(OrderTicket());
       }
  }

Теперь можно восстанавливать баланс после серии убыточных ордеров.

ТЕМА ЗАКРЫТА 

STARIJ
165
STARIJ  
forex-time:

Всё, сделал !!
Вот так работает))

double MaxBalance=0, StartBalance, NewBalance;

  if(OrdersB==0||OrdersS==0) StartBalance=AccountBalance(); 
  NewBalance=AccountBalance();
  if(StartBalance>MaxBalance) MaxBalance=StartBalance;
  if(StartBalance<NewBalance) MaxBalance=((NewBalance-StartBalance)+StartBalance); 

  if(NewBalance<MaxBalance){
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==Magic) {
  if(OrderType()==0 && AccountEquity()>=MaxBalance) CloseOrder(OrderTicket());
       }
  }
  if(NewBalance<MaxBalance){
  for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symb && OrderMagicNumber()==Magic) {
  if(OrderType()==1 && AccountEquity()>=MaxBalance) CloseOrder(OrderTicket());
       }
  }

Теперь можно восстанавливать баланс после серии убыточных ордеров.

ТЕМА ЗАКРЫТА 

Попробовал. Оказалось, что все фигурные скобки в этом фрагменте можно выбросить  -  результат тот же
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий