Как узнать в советнике, было ли снятие или пополнение счёта

 

Как узнать в советнике, было ли снятие или пополнение счёта ?
Есть готовая функция такого определения ?

 
forex2030:

Как узнать в советнике, было ли снятие или пополнение счёта ?
Есть готовая функция такого определения ?

Пройтись по истории счета и найти балансовые операции. Они имеют тип, отличный от типов ордеров.

 
Ihor Herasko:

Они имеют тип, отличный от типов ордеров.

Это как?

По ордеру можно вытащить всё, это я знаю

if(OrderType()==OP_BUY)
.......
.......
.......
 
forex2030:

Это как?

По ордеру можно вытащить всё, это я знаю

Да, правильно. Только тип будет не OP_BUY, не OP_SELL и не один из типов отложенных ордеров. Смотрите, есть ли у операции прибыль или убыток. Если отличен от нуля, то это балансовая операция.

 
Ihor Herasko:

Смотрите, есть ли у операции прибыль или убыток. Если отличен от нуля, то это балансовая операция.

Вот тут я ни чего не понял))

 
forex2030:

Вот тут я ни чего не понял))

   for (int i = OrdersHistoryTotal() - 1; i >= 0; --i)
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && OrderType() > OP_SELLSTOP)
         Print("Балансовая операция. Сумма: ", OrderProfit(), ", комментарий: ", OrderComment());
 
Ihor Herasko:

Так правильно, или ошибка?

   for (int i = OrdersHistoryTotal() - 1; i >= 0; --i)
 
forex2030:

Так правильно, или ошибка?

В данном случае постинкремент или преинкремент - неважно. Можно и так, и сяк. Ошибки нет.

 
Ihor Herasko:

В данном случае постинкремент или преинкремент - неважно. Можно и так, и сяк. Ошибки нет.

При вызове этой функции будет значение (-nnn) снятие или (+nnn) пополнение, а по умолчанию =0 ?

void start()
{
   if(Money()!=0.0)
     {
     if(Money()<0) //Был вывод средств
     if(Money()>0) //Было пополнение средств
     }  
}
//+------------------------------------------------------------------+
//| Балансовая операция                                              |
//+------------------------------------------------------------------+
double Money(){
   double prf=0.0;
   for(i=OrdersHistoryTotal()-1; i>=0; i--)
   if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderType()>5){
       prf=OrderProfit();
       Print("Балансовая операция. Сумма: ", prf, ", комментарий: ", OrderComment());
       }
return(prf);}
 
forex2030:

При вызове этой функции будет значение (-nnn) снятие или (+nnn) пополнение, а по умолчанию =0 ?

Да, но только первого в истории. По большому счету получите сумму, которую внесли первой после открытия счета. Минус не получите, т. к. изначально баланса равен нулю (депозит можно только пополнить, снимать еще нечего).

Ну и не забудьте отобразить всю историю счета перед использованием.

 
Ihor Herasko:

Да, но только первого в истории. По большому счету получите сумму, которую внесли первой после открытия счета. Минус не получите, т. к. изначально баланса равен нулю и его можно только пополнить.

Такое не подходит.

Сделал по сравнению времени закрытия позиции и времени запомненное при изменении баланса.
Если последнее запомненное время переменной баланса больше времени закрытия позиции и в этот момент баланс изменился, то было пополнение или снятие
Если  последнее запомненное время переменной баланса меньше времени закрытия позиции и в этот момент баланс изменился, то было закрытие позиции

Причина обращения: