AccountFreeMargin() и AccountBalance()

 
Если в советнике есть условие

If (OrdersTotal()<1) // не более одной открытой позиции

Тогда при открытии: AccountFreeMargin() == AccountBalance() // если я не ошибаюсь

Но почему-то результат расчета лота для EURUSD в следующих операциях разный.

Lots=NormalizeDouble((AccountFreeMargin()*MaximumRisk)/(StopLoss*10),1);
0.3 =NormalizeDouble((890*0.2)/(40*10),1); // не понятно почему

Lots=NormalizeDouble((AccountBalance()*MaximumRisk)/(StopLoss*10),1);
0.4 =NormalizeDouble((890*0.2)/(40*10),1);

Подскажите, почему так?
 
(OrdersTotal()<1 означает, что нет ордеров ни открытых ни отложнных.
 
(OrdersTotal()<1 означает, что нет ордеров ни открытых ни отложнных.


это понятно, если так, то AccountFreeMargin() == AccountBalance() ???
 
По идее - да. В терминале так и пишет.
Ты воткни тупо проверку AccountFreeMargin() == AccountBalance()
Если сойдется - пляшем дальше.
 
Ввел дополнительное условие
If (OrdersTotal()<1 && AccountFreeMargin() == AccountBalance() )

Эксперт совершил одну сделку, после условия нарушились. Это странно, у меня на терминале нет открытых позиций и БАЛАНС == СРЕДСТВА && СРЕДСТВА == СВОБОДНО
 
double AccountBalance( ) и double AccountFreeMargin( ) - попробуй нормализовать перед сравнением
 
double AccountBalance( ) и double AccountFreeMargin( ) - попробуй нормализовать перед сравнением


пробовал ...... ,0) одна сделка
 
//+------------------------------------------------------------------+
//|                                                          525.mq4 |
//|                                                             Oleg |
//|                                                                  |
//+------------------------------------------------------------------+

extern int       StopLoss=40;
extern int       TakeProfit=40;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   
   if(OrdersTotal()<1  &&   NormalizeDouble(AccountFreeMargin(),0) == NormalizeDouble(AccountBalance(),0) ) 
     {
      
     
             
     
 int     ticket=OrderSend(Symbol(),OP_SELL,1,NormalizeDouble(Bid,4),2,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",4254,0,White);
      return;
     
    }
   
     return;
  }


 
double AccountBalance( ) и double AccountFreeMargin( ) - попробуй нормализовать перед сравнением

пробовал ...... ,0) одна сделка

дык не 0, а 2 ;)
 
double AccountBalance( ) и double AccountFreeMargin( ) - попробуй нормализовать перед сравнением

пробовал ...... ,0) одна сделка

дык не 0, а 2 ;)


Суть не меняется. После первой сделки равенство нарушается. Причем намного

Lots=NormalizeDouble((AccountFreeMargin()*MaximumRisk)/(StopLoss*10),1);
0.3 =NormalizeDouble((890*0.2)/(40*10),1); // не понятно почему

Lots=NormalizeDouble((AccountBalance()*MaximumRisk)/(StopLoss*10),1);
0.4 =NormalizeDouble((890*0.2)/(40*10),1);
 
Если количество открытых ордеров больше нуля, то равенство, естественно, сразу нарушается.