not enough money - страница 3

 
Alexey Viktorov:

Вас куда-то не в ту степь понесло.

Alexey Viktorov:

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

Так в большинстве случаев и происходит. Тема https://www.mql5.com/ru/forum/160683 , это яркий пример происходящего, многие фрилансеры и продавцы задают там детские вопросы.

Alexey Viktorov:

Скажите когда вы последний раз видели учителя математики который требовал не просто решение, а понимание и объяснение сделанного? 

На егэ не нужно решение. Главное ответ, у математика зарплата от баллов учеников зависит, а не от понимания.
Alexey Viktorov:

 От такого обучения такие экономисты и появляются в нашей стране.

Экономика не наука, она не способна что-либо прогнозировать.
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
  • 2016.11.09
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Vitaly Muzichenko:

Ситуация:  Ставим 2 ордера, один сработал и закрылся по стопу, денег осталось 1 цент, но в рынке остался ещё один ордер, и чтоб его исполнить "not enough money"

Нет денег - удаляем все ордера

Я написал вот такую функцию и там все это предусмотрено:

void PendingOrder(int cmd, double lt, double st)
{
   double Lot=lt;
   double Price=0.0;
   if(cmd==OP_BUYLIMIT)
   {
      Price=Bid-FS;
   }
   if(cmd==OP_SELLLIMIT)
   {
      Price=Ask+FS;
   }
   double priceStep=Price;
   for(int count=0; count<NumberOrder; count++)
   {
      if(CheckVolumeValue(Lot)==false)
      {
      Comment("Wrong Lot!!!");
      return;   
      }
      if(Lot*MarketInfo(Symbol(),MODE_MARGINREQUIRED)>AccountEquity())
        {Print("Trade stop is not enough free margin to begin");Comment("Trade stop is not enough free margin to begin"); return;}
      if(!OrderSend(Symbol(),cmd,NormalizeDouble(Lot,2),priceStep,Slippage,0,0,"",magic,0))
      {
         Print("Error = ",GetLastError(),"  ",cmd,"  ",Lot,"  ",Price);
      }
      Lot=NormalizeDouble(Lot*mnog,2);
      if(cmd==OP_BUYLIMIT)
      {
         priceStep=priceStep-st;  
      }
      if(cmd==OP_SELLLIMIT)
      {
         priceStep=priceStep+st;  
      }      
   }
}
 
Maksim Neimerik:

Я написал вот такую функцию и там все это предусмотрено:

Перечитайте моё сообщение ещё раз, внимательно. Вы устанавливаете ордер, когда деньги ещё есть.

 
Maksim Neimerik:

Ну и ничего страшного не произойдет, просто появится коммент и принт:

Вопрос был другой "Какое другое определение можете дать такому поступку?"

Я-же отвечал на

 
Vitaly Muzichenko:

Перечитайте моё сообщение ещё раз, внимательно. Вы устанавливаете ордер, когда деньги ещё есть.

И ещё момент, при текущей цене маржа к примеру равна 10 центов, и при цене ниже, то есть установке байлимита, маржа уже 8 центов, а вот при цене выше, это ордер селллимит, там маржа 12 центов, но у вас на счету нет денег, чтоб исполнить этот ордер, хотя при установке были, цена то ниже была. На золоте вообще маржа конская.

 
Alexey Viktorov:
Вопрос был другой "Какое другое определение можете дать такому поступку?"

Я-же отвечал на


понял, ладно, проехали. Проблему я, кажется, понял, теперь нужно думать как ее решить...

 
Maksim Neimerik:

Я написал вот такую функцию и там все это предусмотрено:

Максим, я уже неоднократно предлагал почаще читать документацию. Кроме AccountEquity существует ещё такое понятие как свободные средства AccountFreeMargin
AccountFreeMargin - Информация о счете - Справочник MQL4
AccountFreeMargin - Информация о счете - Справочник MQL4
  • docs.mql4.com
AccountFreeMargin - Информация о счете - Справочник MQL4
 
Maksim Neimerik:

понял, ладно, проехали. Проблему я, кажется, понял, теперь нужно думать как ее решить...

Попробуйте решить удалением всех ордеров, когда нет свободных денег.

 
Vitaly Muzichenko:

И ещё момент, при текущей цене маржа к примеру равна 10 центов, и при цене ниже, то есть установке байлимита, маржа уже 8 центов, а вот при цене выше, это ордер селллимит, там маржа 12 центов, но у вас на счету нет денег, чтоб исполнить этот ордер, хотя при установке были, цена то ниже была. На золоте вообще маржа конская.

Да, понял. Как же решить такую проблему? Как мониторить маржу в момент перехода лимитника в рынок?

 
Alexey Viktorov:
Максим, я уже неоднократно предлагал почаще читать документацию. Кроме AccountEquity существует ещё такое понятие как свободные средства AccountFreeMargin

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

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