Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Решение пришло сразу.
double GetMarginRequired( const string Symb )
{
MqlTick Tick;
return(SymbolInfoTick(Symb, Tick) ? Tick.ask * SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) * SymbolInfoDouble(Symb, SYMBOL_TRADE_CONTRACT_SIZE) *
SymbolInfoDouble(Symb, SYMBOL_POINT) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Отлично, осталось привести margin в валюте депозита, т.к. залог, к примеру, для AUDCAD при валюте депо USD нужно иметь в USD.
Отлично, осталось привести margin в валюте депозита, т.к. залог, к примеру, для AUDCAD при валюте депо USD нужно иметь в USD.
Это и было сделано.
Всё отлично работает на форекс, вот только остался последний вопрос: "почему в два раза меньше, и как это устранить?"
Всё отлично работает на форекс, вот только остался последний вопрос: "почему в два раза меньше, и как это устранить?"
Столкнулся с тем, что на SGDJPY маржа в разы отличается на серверах FIBOGroup-MT5 Server и MetaQuotes-Demo. Это говорит о том, что сам MT5 вычисляет маржу с ошибками. Ну а раз так, то эталона для сравнения просто нет. Поэтому однозначно нельзя сказать, это ошибка моей реализации или разработчиков. Думаю, ошибка и там и там. Проблема в отсутствии правильной информации.
У меня два сервера показывают верно, с одним исключением - выделено красным
Как узнать свойство, выделенное красным?
Спасибо!
У меня два сервера показывают верно, с одним исключением - выделено красным
Как узнать свойство, выделенное красным?
double GetMarginRequired( const string Symb )
{
MqlTick Tick;
double MarginInit, MarginMain;
return((SymbolInfoTick(Symb, Tick) && SymbolInfoMarginRate(Symb, ORDER_TYPE_BUY, MarginInit, MarginMain)) ? MarginInit * Tick.ask *
SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_VALUE) / (SymbolInfoDouble(Symb, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0);
}
Надо четко понимать, что в MT5 в разные стороны могут быть совсем другие маржинальные требования. Т.е. единый MT4-вариант может не прокатывать. На Forex, конечно, такого не будет. Но помнить нужно. Поэтому в общем случае нужно писать так
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
double MarginInit, MarginMain;
const bool Res = SymbolInfoMarginRate(symbol, action, MarginInit, MarginMain);
margin = Res ? MarginInit * price * volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE) /
(SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE) * AccountInfoInteger(ACCOUNT_LEVERAGE)) : 0;
return(Res);
}
Это и было сделано.
Прикол MT5 на FIBOGroup-MT5 Server SGDJPY
В этой ситуации MyOrderCalcMargin считает правильно, а штатная OrderCalcMargin - нет!
Прикол MT5 на FIBOGroup-MT5 Server SGDJPY
В этой ситуации MyOrderCalcMargin считает правильно, а штатная OrderCalcMargin - нет!