Вопросы от начинающих 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 как-то получает его! Очень бы хотелось понять, как именно.