OrderCalcMargin()

 

Привет!

Эта функция на ФОРТС правильно работает? 

 

Устанавливаю 1 отложенный ордер на продажу SBRF-9.19 в Квик по цене 22030, резервируются средства 3838,04 руб.

Проделываю все тоже самое в MT5, резервируется 3820,94 руб.

Какой терминал не правильно считает?

 
prostotrader:

Устанавливаю 1 отложенный ордер на продажу SBRF-9.19 в Квик по цене 22030, резервируются средства 3838,04 руб.

Проделываю все тоже самое в MT5, резервируется 3820,94 руб.

Какой терминал не правильно считает?

походу в mt5 выгодней торговать)

 
diman1982:

походу в mt5 выгодней торговать)

Суть вопроса какова? Что, спрашивали где выгодней торговать?

Нечего сказать по сути - нефиг встревать!

 
Сергей Таболин:

Суть вопроса какова? Что, спрашивали где выгодней торговать?

Нечего сказать по сути - нефиг встревать!

Скажите вы по сути

 
prostotrader:

Устанавливаю 1 отложенный ордер на продажу SBRF-9.19 в Квик по цене 22030, резервируются средства 3838,04 руб.

Проделываю все тоже самое в MT5, резервируется 3820,94 руб.

Какой терминал не правильно считает?

Брокер открытие уже не раз сообщало, что ГО считается не верно в MT5, с этим и коррекции связывают на клиринге - видимо это все из одной темы.

 
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.03.04
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Тип ордера правильно поставь ORDER_TYPE_SELL_LIMIT

2020.03.05 01:06:15.704 CheckMargin (GOLD-3.20,H1)      ГО = 7691.09000000

для рыночного ордера берется минимальная цена, получается маржа * 1.5

 
Sergey Chalyshev:

Тип ордера правильно поставь ORDER_TYPE_SELL_LIMIT

для рыночного ордера берется минимальная цена, получается маржа * 1.5

Да, но после сделки маржа не 1,5, а 1!

Т.е 50% денег не используется!

Добавлено

Если я поставлю ORDER_TYPE_SELL_LIMIT,

то посчитается меньше, НО если свободные средства "на грани",

то МТ5 не пропустит ордер, будет реджект.

Я как раз "наступил" на эти грабли.

Это архиважно при парном трейдинге!

 
prostotrader:

Да, но после сделки маржа не 1,5, а 1!

Т.е 50% денег не используется!

Добавлено

Если я поставлю ORDER_TYPE_SELL_LIMIT,

то посчитается меньше, НО если свободные средства "на грани",

то МТ5 не пропустит ордер, будет реджект.

Я как раз "наступил" на эти грабли.

Это архиважно при парном трейдинге!

если ставить SELL_LIMIT то маржи требует столько сколько нужно для ордера по указанной цене, не больше,

но запас тоже немного надо иметь ))

для просто SELL берется в расчет минимально возможная цена, поэтому и маржы требует для открытия в 1.5 раза больше, после открытия уже берется фактическая цена открытия позиции,

можно еще использовать OrderCheck,

а вообще в открывашке последнее время глюки и на квике тоже

 

такой скрипт еще нашел у себя, может пригодится:

//+------------------------------------------------------------------+
//|                                                 Check Margin.mq5 |
//|                                         Copyright 2016, Serj_Che |
//|                           https://www.mql5.com/ru/users/serj_che |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Serj_Che"
#property link      "https://www.mql5.com/ru/users/serj_che"
#property version   "1.00"
#property script_show_inputs

input ENUM_ORDER_TYPE typ = ORDER_TYPE_BUY_LIMIT;
input double volum = 1.0;
input double price = 0.0; // price (если=0.0 то по цене Ask)
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   MqlTick tick;
   SymbolInfoTick(_Symbol,tick);
   double iprice=price;
   if(price==0.0) iprice=tick.ask;
   bool res;
   double margin=0.0;
   res=OrderCalcMargin(typ,_Symbol,volum,iprice,margin);
   
   MqlTradeRequest request={0}; 
   MqlTradeCheckResult result={0}; 

   request.action=TRADE_ACTION_PENDING;
   request.symbol=_Symbol;
   request.volume=volum;
   request.price=iprice;
   request.type=typ;
   request.type_filling=ORDER_FILLING_RETURN;
   request.type_time=ORDER_TIME_DAY;
   
   ResetLastError();
   
   res=OrderCheck(request,result);
   
   Comment(
   "\n OrderCalcMargin margin = ",margin,
   "\n Размер маржи (средства) необходимый для требуемой торговой операции = ",result.margin,
   "\n Размер свободных собственных средств, которые останутся после выполнения требуемой торговой операции = ",result.margin_free,
   "\n res=",res,
   "\n retcod=",GetRetCode(result.retcode),
   "\n retcod comment=",result.comment,
   "\n error=",GetLastError(),
   "\n SYMBOL_MARGIN_INITIAL=",SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL),
   "\n SYMBOL_MARGIN_MAINTENANCE=",SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_MAINTENANCE),
   "\n SYMBOL_MARGIN_LIMIT=",SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_LIMIT),
   "\n SYMBOL_MARGIN_LONG=",SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_LONG),
   "\n SYMBOL_MARGIN_STOP=",SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_STOP),
   "\n SYMBOL_MARGIN_STOP=",SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_STOPLIMIT),
   "");
   
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
string GetRetCode( const uint code )
{
  string retcode;
  
  switch( code )
  {
    case 10004: retcode = "Реквота";
         break;
    case 10006: retcode = "Запрос отвергнут";
         break;
    case 10007: retcode = "Запрос отменен трейдером";
         break;
    case 10008: retcode = "Ордер размещен";
         break;
    case 10009: retcode = "Заявка выполнена";
         break;
    case 10010: retcode = "Заявка выполнена частично";
         break;
    case 10011: retcode = "Ошибка обработки запроса";
         break;
    case 10012: retcode = "Запрос отменен по истечению времени";
         break;
    case 10013: retcode = "Неправильный запрос";
         break;
    case 10014: retcode = "Неправильный объем в запросе";
         break;
    case 10015: retcode = "Неправильная цена в запросе";
         break;
    case 10016: retcode = "Неправильные стопы в запросе";
         break;
    case 10017: retcode = "Торговля запрещена";
         break;
    case 10018: retcode = "Рынок закрыт";
         break;
    case 10019: retcode = "Нет достаточных денежных средств для выполнения запроса";
         break;
    case 10020: retcode = "Цены изменились";
         break;
    case 10021: retcode = "Отсутствуют котировки для обработки запроса";
         break;
    case 10022: retcode = "Неверная дата истечения ордера в запросе";
         break;
    case 10023: retcode = "Состояние ордера изменилось";
         break;
    case 10024: retcode = "Слишком частые запросы";
         break;
    case 10025: retcode = "В запросе нет изменений";
         break;
    case 10026: retcode = "Автотрейдинг запрещен сервером";
         break;
    case 10027: retcode = "Автотрейдинг запрещен клиентским терминалом";
         break;
    case 10028: retcode = "Запрос заблокирован для обработки";
         break;
    case 10029: retcode = "Ордер или позиция заморожены";
         break;
    case 10030: retcode = "Указан неподдерживаемый тип исполнения ордера по остатку";
         break;
    case 10031: retcode = "Нет соединения с торговым сервером";
         break;
    case 10032: retcode = "Операция разрешена только для реальных счетов";
         break;
    case 10033: retcode = "Достигнут лимит на количество отложенных ордеров";
         break;
    case 10034: retcode = "Достигнут лимит на объем ордеров и позиций для данного символа";
         break;
    case 10035: retcode = "Неверный или запрещённый тип ордера";
         break;
    case 10036: retcode = "Позиция с указанным POSITION_IDENTIFIER уже закрыта";
         break;
    default: retcode = "Нет кода возврата!";  
         break; 
  }
  return( retcode );
}
//+------------------------------------------------------------------+
Причина обращения: