Весь день бьюсь с этой маржой, но без результата.
Получаю данные аккаунта:
AccoutBalance = AccountInfoDouble(ACCOUNT_BALANCE);
AccountEquity = AccountInfoDouble(ACCOUNT_EQUITY);
AccountMargin = AccountInfoDouble(ACCOUNT_MARGIN);
AccountMarginFree = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
AccountMarginLevel = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL);
Заодно и данные, которые вы указали:
SymbolMarginInitial = SymbolInfoDouble(CurrentSymbol, SYMBOL_MARGIN_INITIAL);
SymbolMarginMaintenance = SymbolInfoDouble(CurrentSymbol, SYMBOL_MARGIN_MAINTENANCE);
res = SymbolInfoMarginRate(CurrentSymbol, ORDER_TYPE_BUY_LIMIT, SymbolInitialMarginRate, SymbolMaintenanceMarginRate);
Результат:
AccoutBalance = 110601.639999999999417923
AccountEquity = 94459.720000000001164153
AccountMargin = 61622.0
AccountMarginFree = 32837.720000000001164153
AccountMarginLevel = 153.288955243257277061
Эти данные полностью соответствую данным тестера на вкладке торговля.
Остальное:
SymbolMarginInitial = 4181.32999999999992724
SymbolMarginMaintenance = 0.0
SymbolInitialMarginRate = 1.0
SymbolMaintenanceMarginRate = 0.0
То что я получил в SymbolMarginInitial - начальная (инициирующая) маржа, которая используется для проверки средств клиента при входе в рынок (так написано). Т.е., это значение можно использовать для расчета нужной маржи до входа в рынок, чтобы удостовериться, что маржи хватит для входа.
НО, проблема в том, что тестер получает данные счета еще ДО ВХОДА в рынок (current account state):
Balance: 110601.64,
Credit: 0.00,
Commission: 0.00,
Accumulated: 0.00,
Assets:0.00,
Liabilities: 0.00,
Equity 94459.72,
Margin: 83469.00,
FreeMargin: 10990.72
и среди этих данных Margin = 83469.00. При этом я получаю также, ДО ВХОДА в рынок AccountMargin = 61622.0.
Кстати, Balance и Equity совпадают с полученными мной.
ОТКУДА, ну откуда тестер берет Margin = 83469.00 ?
P.S. Тестер, кстати, указывает какие будут данные аккаунта после входа в рынок (calculated account state):
Assets: 0.00,
Liabilities: 0.00,
Equity 94459.72,
Margin: 99255.00,
FreeMargin: -4795.28
Видно, что маржа для входа в рынок по его расчету = 99255.00 - 83469.00 = 15786.00. Так как открытие на 6 лотов, то на 1 лот приходится
= 15786.00 / 6 = 2631, что совсем не коррелируется со значением, которое я получил в SymbolMarginInitial = 4181.3299. Т.е. тестер использует явно не это значение для проверки входа в рынок.
Когда-то писал расчет маржи для индикатора, вроде работал для большинства рынков, попробуй это
![Когда наконец поправят расчет маржи? Когда наконец поправят расчет маржи?](https://c.mql5.com/36/22/kogda-nakonec-popravyat-raschet.jpg)
- 2018.06.26
- www.mql5.com
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Отлаживаю эксперта в тестере стратегий на истории инструмента BR-3.18.
Вижу в тестере стратегий следующее:
Ясно видно, что Маржа: 61622.00.
Добавляю к позиции еще 6 лотов ордером buylimit, но получаю ошибку тут же.
Подробнее, там 3 строки.
Первая:
FK 2 20:38:04.642 Trade 2018.02.08 22:30:00 current account state: Balance: 110601.64, Credit: 0.00, Commission: 0.00, Accumulated: 0.00, Assets:0.00, Liabilities: 0.00, Equity 94459.72, Margin: 83469.00, FreeMargin: 10990.72
Вторая:
PK 2 20:38:04.642 Trade 2018.02.08 22:30:00 calculated account state: Assets: 0.00, Liabilities: 0.00, Equity 94459.72, Margin: 99255.00, FreeMargin: -4795.28
Третья:
EG 2 20:38:04.643 Trade 2018.02.08 22:30:00 not enough money for order [#54 buy limit 6.00 / 6.00 BR-3.18 at 64.86]
Понятно, что исполнить ордер не удалось, так как свободной маржи недостаточно.
Но почему поле "Маржа:" составляет 61622.00, в то время как сам же тестер указывает в calculated account state, что Margin: 83469.00 ?
Это как, тестер сам в себе врет ?