Значение "Маржа:" в тестере стратегий не соответствует марже (!?)

 

Отлаживаю эксперта в тестере стратегий на истории инструмента 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 ?

Это как, тестер сам в себе врет ? 

 
На фьючерсах два вида маржи - Initial & Maintenance. 
В МТ5 есть отдельные методы для каждого из них, точнее метода три, два - для каждого вида маржи, и один - возвращает оба, какой-то из этих методов работает не всегда правильно, но какой - не помню :) 
 

Весь день бьюсь с этой маржой, но без результата.

Получаю данные аккаунта:

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.   Т.е. тестер использует явно не это значение для проверки входа в рынок.
 

Когда-то писал расчет маржи для индикатора, вроде работал для большинства рынков, попробуй это

Когда наконец поправят расчет маржи?
Когда наконец поправят расчет маржи?
  • 2018.06.26
  • www.mql5.com
Биржевой трейдинг: Когда наконец поправят расчет маржи?