Если средств не хватает, эксперт вообще не должен пытаться выставлять ордера, как это сделать?

 
Если средств не хватает, эксперт вообще не должен пытаться выставлять ордера. Как сделать.

У вас ошибка появляется не хватает депозита, это к депозиту относится, ошибки нет советника, не может открыть ордер из-за недостатка средств.
В советнике должна быть проверка на достаточность средств перед отправкой ордера.
Файлы:
10.png  34 kb
 
Kirill Voytseshchuk:
Если средств не хватает, эксперт вообще не должен пытаться выставлять ордера. Как сделать.

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

Ну как-то так  

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

    if(AccountFreeMarginCheck(symb,type,lot)<=0) {
     Alert("ERR NOT ENOUGH MONEY: ",DoubleToStr(AccountFreeMargin(),2),", Lot="+(string)lot,", Symb=",symb);
      Sleep(1000*60*15);
     return;
    }
AccountFreeMarginCheck - Документация на MQL4
  • docs.mql4.com
AccountFreeMarginCheck - Документация на MQL4
 
Vitaly Muzichenko:

Ну как-то так  

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

Понял, спасибо.
 

Бл...

А я по старинному

:)))))))))))

if(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*Lotss>AccountFreeMargin()) 
{
Alert("Not enouth money to open order "+string(Lotss)+" lots!");
return;
} 
 
Kirill Voytseshchuk:
Если средств не хватает, эксперт вообще не должен пытаться выставлять ордера. Как сделать.

У вас ошибка появляется не хватает депозита, это к депозиту относится, ошибки нет советника, не может открыть ордер из-за недостатка средств.
В советнике должна быть проверка на достаточность средств перед отправкой ордера.
Зачем доводить до такого? Перед открытием ставлю условие, что можно открыть, если баланс не ниже своего прошлого пика на 20%. Если более, внеочередное тестирование и поиск улучшения результатов.
 

у меня похожий метод

if(!CheckOrderSend(cmd,dlot))
     {
      //Alert("Enough money to make the operation");
      return (-134);
     }


....

bool GOrders::CheckOrderSend(int itype,double dlot)
  {
   if(dlot<=0.0) return (false);
   if(!bCheckFreeMargin) return (true); //возможность отключить проверку

   int it=itype;

   if(it==OP_BUYLIMIT || it==OP_BUYSTOP) return (true);
   if(it==OP_SELLLIMIT || it==OP_SELLSTOP) return (true);

   if(AccountFreeMarginCheck(sname,it,dlot)<=0 || GetLastError()==134)
     {
      //Print("CheckOrderSend::Invalid lot: ",DoubleToString(dlot,2));
      return (false);
     }

   return (true);
  }
 
Alexandr Gavrilin:

у меня похожий метод

Ваш код имеет место быть но не всегда. 

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

 

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

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