Достаточность средств для отложенного ордера. - страница 2

 

дело не в том как вопрос решается с маржей между советниками, а именно в том что это вполне объяснимая причина удаления ордера

но в маркете не хотят признавать эту ошибку и говорят: удаляйте значит ордера сами если маржи не хватает.

 

Т.е. другими словами: не хватает маржи удали все ордера и скажи покупателю " ШИШ" МАРЖИ НЕТ РАБОТАТЬ НЕ БУДУ"  

 
Vladislav Andruschenko:

дело не в том как вопрос решается с маржей между советниками, а именно в том что это вполне объяснимая причина удаления ордера

но в маркете не хотят признавать эту ошибку и говорят: удаляйте значит ордера сами если маржи не хватает.

 

Т.е. другими словами: не хватает маржи удали все ордера и скажи покупателю " ШИШ" МАРЖИ НЕТ РАБОТАТЬ НЕ БУДУ"  

Можете так и сказать! покупатель сам должен следить за уровнем маржи.
 
:-(
 
Alexey Viktorov:

Никакие доводы не помогут. Я тоже проходил эту процедуру. У них нет понимания, что в mql4 нет таких функций которые есть в mql5. Ответ один: "Ошибок не должно быть..." и всё тут...

Правда у меня советник мартин и лот там был далеко не 0.02 и следовательно проверка AccountFreeMarginCheck() помогла.

Видимо самый надёжный вариант, в данном случае, проверку делать с лотом (лот+минимальный_лот) или действительно торговать меньшим лотом.

У меня в МТ5 такая же ситуация. При срабатывании отложника и открытии позиции, тестер-терминал с матюками удаляет ордер.

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

Вопрос: как в этом случае решить вопрос с проверкой средств?

 
Vitaly Stepanov:

У меня в МТ5 такая же ситуация. При срабатывании отложника и открытии позиции, тестер-терминал с матюками удаляет ордер.

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

Вопрос: как в этом случае решить вопрос с проверкой средств?

Самое простое это не допускать постановку двух ордеров по одной цене. А уж если так задумано по стратегии, проверять достаточность средств с учётом двух ордеров по одной цене. Да и проверку надо делать не только перед размещением ордера, но и при модификации.

 
Alexey Viktorov:

 Да и проверку надо делать не только перед размещением ордера, но и при модификации.

Так и поступаю.

Пользуюсь такой функцией проверки маржи. А как, учитывать два ордера? lots * 2 ?

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
bool CheckMoneyForTrade(string symb,double lots,double price,ENUM_ORDER_TYPE type)
  {
//--- значения необходимой и свободной маржи
   double margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
//--- вызовем функцию проверки
   if(!OrderCalcMargin(type,symb,lots,price,margin))
     {
      //--- что-то пошло не так, сообщим и вернем false
      Print("Error in ",__FUNCTION__," code=",GetLastError());
      return(false);
     }
//--- если не хватает средств на проведение операции
   if(margin>free_margin-margin)
     {
      //--- сообщим об ошибке и вернем false
      Print("Not enough money for ",EnumToString(type)," ",lots," ",symb);
      return(false);
     }
//--- проверка прошла успешно
   return(true);
  }
 
Vitaly Stepanov:

Так и поступаю.

Пользуюсь такой функцией проверки маржи. А как, учитывать два ордера? lots * 2 ?

Как один из вариантов, да умножить на 2. Но всегда есть и другие варианты. Например сделать доступной переменную margin из функции и при условии что ордеров получилось 2, это значение умножить на 2.

 
Alexey Viktorov:

Как один из вариантов, да умножить на 2. Но всегда есть и другие варианты. Например сделать доступной переменную margin из функции и при условии что ордеров получилось 2, это значение умножить на 2.

Спасибо! Буду пробовать.

 
Умножил маржу на количество ордеров. У меня все работает без ошибок.
Причина обращения: