Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 16

 

Хорошо.

Мне сейчас, наверное, важнее всего уяснить для себя, верно ли я полагаю, что для расчёта маржи по одной конкретной сделке нужно использовать фиксированное значение курса базовой валюты по отношению к валюте депозита, взятое на момент открытия сделки. Это верно? И маржа по этой сделки остаётся постоянной до тех пор, пока ордер не будет закрыт? Это так?  

 
Babu Bonappan:

.....

Мне сейчас, наверное, важнее всего уяснить для себя, верно ли я полагаю, что для расчёта маржи по одной конкретной сделке нужно использовать фиксированное значение курса базовой валюты по отношению к валюте депозита, взятое на момент открытия сделки. Это верно? И маржа по этой сделки остаётся постоянной до тех пор, пока ордер не будет закрыт? Это так? 

Да, Вы правы.

Поэтому цена для расчета маржи важна на момент открытия ордера

 
Ренат, огромное спасибо за помощь!
 
Babu Bonappan:
Ренат, огромное спасибо за помощь!
Пожалуйста
 
Renat Akhtyamov:

вопрос по коду, соответственно без кода никак

Вы спрашиваете в вопросе про модифи или про перебор ордеров?

вот и  я не знаю - что Вам нужно. Но ошибка в коде - 100%

Вот не знаете ничего, но уверенно выводы делаете.

Я спрашиваю про OrderSelect

 
Babu Bonappan:

Пожалуйста, подскажите, как средствами MQL4 получить величину маржи по каждой открытой позиции в терминале?

Я обычно делал так:

margin = MarketInfo(Symbol(),MODE_LOTSIZE) * OrderOpenPrice() / AccountLeverage() * OrderLots();

При торговле по EUR/USD эта конструкция прекрасно работала и я был уверен, что её логика правильная.

Но теперь я хочу получить тот же результат для EUR/JPY (или EUR/CHF). Очевидно, что вместо OrderOpenPrice() мне нужно умножать величину стандартного лота на курс базовой валюты к валюте депозита (в моём случае на EUR/USD). Но вот что это за курс? Тот, что был в момент открытия позиции или тот, что есть сейчас (в тот момент, когда мы хотим узнать сумму залога по этой позиции)?

OrderOpenPrice - цена открытия выбранного ордера - ему без разницы на какой валюте, он цену выдаёт. Скорее всего Point и Digits проверить надо. Или Округления. Где то стоит округление

NormalizeDouble на 5 знаков после запятой, а на JPY надо 3 знака. А сама связка по идее должна так же работать на любых валютах.

 
Babu Bonappan:
А что если в момент открытия ордера в поле комментария записывать курс EUR/USD а потом его оттуда считывать?
Проще вместо OrderSymbol() "USDJPY" писать
 
A1exPit:
Проще вместо OrderSymbol() "USDJPY" писать

А почему USD/JPY? Ведь мы торгуем на EUR/JPY, соответственно, 1 лот это 100000 евро, а валюта депозита у нас доллар. На мой взгляд, в данном случае нам нужен курс EUR/USD на момент открытия сделки.

Кроме того, если принудительно в коде задать символ, то код получится непригодным для торговли на другом кроссе, к примеру NZD/CAD. А хотелось бы получить универсальный вариант. Пока мне приходит в голову только как-то сохранять величину залога для каждого ордера, вычисленную в момент его открытия. Может быть стоит создать для этой цели массив, где будут храниться тикет ордера и залог по нему. Но, возможно, существует какое-то более тривиальное решение...

 
A1exPit:

OrderOpenPrice - цена открытия выбранного ордера - ему без разницы на какой валюте, он цену выдаёт. Скорее всего Point и Digits проверить надо. Или Округления. Где то стоит округление

NormalizeDouble на 5 знаков после запятой, а на JPY надо 3 знака. А сама связка по идее должна так же работать на любых валютах.

А зачем вы врёте от количестве знаков? Не вводите народ в заблуждение. 

 

 
A1exPit:

OrderOpenPrice - цена открытия выбранного ордера - ему без разницы на какой валюте, он цену выдаёт.

OrderOpenPrice, как я понимаю, выдаёт именно то, что мне нужно. Но только при условии, что валюта депозита - доллар, а торгуемая пара - EUR/USD. В этом случае в OrderOpenPrice как бы сохраняется курс базовой валюты по отношению к валюте депозита на момент открытия ордера, зная который, можно без труда вычислить залог.

А вот если хотя бы одно из этих условий не выполняется, то как получить величину залога для отдельно взятого ордера? Где взять курс базовой валюты котировки по отношению к валюте депозита на момент его открытия?

Да, у нас есть время открытия ордера с точностью до секунды. Но что мы можем получить? Как максимум - параметры минутной свечи нужного инструмента. Но никак не точное значение курса, по которому вычислялся залог. Но ведь функция AccountMargin как-то получает его! Очень бы хотелось понять, как именно.

Причина обращения: